Les passerelles d'InterSystems IRIS sont le mécanisme de communication entre le cœur d'InterSystems IRIS et le code d'application Java / .Net. À l'aide des passerelles, vous pouvez travailler à la fois avec des objets Java / .NET à partir d'objets ObjectScript et ObjectScript et des globaux à partir de Java / .NET. Les passerelles peuvent être exécutées n'importe où - localement, sur un serveur distant, dans docker.
Dans cet article, je vais vous montrer comment vous pouvez facilement développer et conteneuriser des produits d'intégration avec du code .Net / Java. Et pour interagir avec le code dans les langages Java / .Net, nous utiliserons PEX , qui offre la possibilité d'implémenter n'importe quel élément des produits d'intégration dans les langages Java / .Net.
Pour notre exemple, nous développerons une intégration avec Apache Kafka .
Architecture
Apache Kafka est un courtier de messages populaire. Dans Kafka a un thème (sujet) messages dans lequel les éditeurs (éditeur) écrivent des messages et ont des abonnés (consommateur) sur les fils qui lisent ces messages.
Tout d'abord, nous allons écrire une opération commerciale Java qui enverra des messages à Apache Kafka. Ensuite, nous ajouterons un service métier en C # qui lira, enregistrera et transmettra les messages pour un traitement ultérieur dans InterSystems IRIS.
Notre solution fonctionnera dans docker et ressemble à ceci:
Passerelle Java
Tout d'abord, nous développerons une opération commerciale en Java pour l'envoi de messages à Apache Kafka. Le code peut être écrit dans n'importe quel IDE Java et ressembler à ceci :
PEX -
com.intersystems.enslib.pex.BusinessOperation
.— -
OnInit
Apache Kafka InterSystems IRISOnTearDown
Apache Kafka ( ).OnMessage
dc.KafkaRequest Apache Kafka.
- Docker .
-:
FROM openjdk:8 AS builder
ARG APP_HOME=/tmp/app
COPY src $APP_HOME/src
COPY --from=intersystemscommunity/jgw:latest /jgw/*.jar $APP_HOME/jgw/
WORKDIR $APP_HOME/jar/
ADD https://repo1.maven.org/maven2/org/apache/kafka/kafka-clients/2.5.0/kafka-clients-2.5.0.jar .
ADD https://repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar .
ADD https://repo1.maven.org/maven2/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar .
ADD https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar .
WORKDIR $APP_HOME/src
RUN javac -classpath $APP_HOME/jar/*:$APP_HOME/jgw/* dc/rmq/KafkaOperation.java && \
jar -cvf $APP_HOME/jar/KafkaOperation.jar dc/rmq/KafkaOperation.class
FROM intersystemscommunity/jgw:latest
COPY --from=builder /tmp/app/jar/*.jar $GWDIR/
FROM openjdk:8 AS builder
JDK8 , .
ARG APP_HOME=/tmp/app
COPY src $APP_HOME/src
/src
/tmp/app
.
COPY --from=intersystemscommunity/jgw:latest /jgw/*.jar $APP_HOME/jgw/
Java Gateway /tmp/app/jgw
.
WORKDIR $APP_HOME/jar/
ADD https://repo1.maven.org/maven2/org/apache/kafka/kafka-clients/2.5.0/kafka-clients-2.5.0.jar .
ADD https://repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar .
ADD https://repo1.maven.org/maven2/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar .
ADD https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar .
WORKDIR $APP_HOME/src
RUN javac -classpath $APP_HOME/jar/*:$APP_HOME/jgw/* dc/rmq/KafkaOperation.java && \
jar -cvf $APP_HOME/jar/KafkaOperation.jar dc/rmq/KafkaOperation.class
- javac/jar
jar . maven gradle.
FROM intersystemscommunity/jgw:latest
COPY --from=builder /tmp/app/jar/*.jar $GWDIR/
, , jar Java , Java .
.Net Gateway
.Net, Apache Kafka. .Net IDE .
:
PEX -
InterSystems.EnsLib.PEX.BusinessService
.— -
OnInit
Apache Kafka, Apache Kafka InterSystems IRISOnTearDown
Apache Kafka ( )OnMessage
Apache KafkaEns.StringContainer
-
- Docker .
-:
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build
ENV ISC_PACKAGE_INSTALLDIR /usr/irissys
ENV GWLIBDIR lib
ENV ISC_LIBDIR ${ISC_PACKAGE_INSTALLDIR}/dev/dotnet/bin/Core21
WORKDIR /source
COPY --from=store/intersystems/iris-community:2020.2.0.211.0 $ISC_LIBDIR/*.nupkg $GWLIBDIR/
# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# copy and publish app and libraries
COPY . .
RUN dotnet publish -c release -o /app
# final stage/image
FROM mcr.microsoft.com/dotnet/core/runtime:2.1
WORKDIR /app
COPY --from=build /app ./
# Configs to start the Gateway Server
RUN cp KafkaConsumer.runtimeconfig.json IRISGatewayCore21.runtimeconfig.json && \
cp KafkaConsumer.deps.json IRISGatewayCore21.deps.json
ENV PORT 55556
CMD dotnet IRISGatewayCore21.dll $PORT 0.0.0.0
, :
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build
.Net Core 2.1 SDK .
ENV ISC_PACKAGE_INSTALLDIR /usr/irissys
ENV GWLIBDIR lib
ENV ISC_LIBDIR ${ISC_PACKAGE_INSTALLDIR}/dev/dotnet/bin/Core21
WORKDIR /source
COPY --from=store/intersystems/iris-community:2020.2.0.211.0 $ISC_LIBDIR/*.nupkg $GWLIBDIR/
.Net Gateway InterSystems IRIS:
# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# copy and publish app and libraries
COPY . .
RUN dotnet publish -c release -o /app
-.
FROM mcr.microsoft.com/dotnet/core/runtime:2.1
WORKDIR /app
COPY --from=build /app ./
.
RUN cp KafkaConsumer.runtimeconfig.json IRISGatewayCore21.runtimeconfig.json && \
cp KafkaConsumer.deps.json IRISGatewayCore21.deps.json
.Net , .
ENV PORT 55556
CMD dotnet IRISGatewayCore21.dll $PORT 0.0.0.0
55556
, .
!
docker-compose, ( UI Apache Kafka, ).
:
:
:
git clone https://github.com/intersystems-community/pex-demo.git
cd pex-demo
docker-compose pull
docker-compose up -d
InterSystems IRIS Java/.Net
Java/.Net InterSystems ObjectScript , InterSystems ObjectScript Java/.Net
, Docker