Gateways in InterSystems IRIS sind der Kommunikationsmechanismus zwischen dem InterSystems IRIS-Kern und dem Java / .Net-Anwendungscode. Mithilfe von Gateways können Sie sowohl mit Java / .NET-Objekten aus ObjectScript- und ObjectScript-Objekten als auch mit Globals aus Java / .NET arbeiten. Gateways können überall ausgeführt werden - lokal, auf einem Remote-Server oder im Docker.
In diesem Artikel werde ich Ihnen zeigen, wie Sie Integrationsprodukte mit .NET / Java-Code einfach entwickeln und containerisieren können. Um mit Code in Java / .Net-Sprachen zu interagieren, verwenden wir PEX , das die Möglichkeit bietet, jedes Element von Integrationsprodukten in Java / .Net-Sprachen zu implementieren.
In unserem Beispiel werden wir eine Integration mit Apache Kafka entwickeln .
Die Architektur
Apache Kafka ist ein beliebter Nachrichtenbroker. In Kafka gibt es ein Thema (Thema) Nachrichten, in denen Publisher (Publisher) Nachrichten schreiben und Abonnenten (Consumer) in den Threads haben, die diese Nachrichten lesen.
Zuerst schreiben wir einen Java-Geschäftsvorgang, der Nachrichten an Apache Kafka sendet. Anschließend fügen wir in C # einen Geschäftsdienst hinzu, der Nachrichten zur weiteren Verarbeitung in InterSystems IRIS liest, speichert und überträgt.
Unsere Lösung funktioniert im Docker und sieht folgendermaßen aus:
Java Gateway
Zunächst werden wir einen Business Operation in Java entwickeln, um Nachrichten an Apache Kafka zu senden. Der Code kann in jede Java-IDE geschrieben werden und sieht folgendermaßen aus :
PEX -
com.intersystems.enslib.pex.BusinessOperation.— -
OnInitApache Kafka InterSystems IRISOnTearDownApache Kafka ( ).OnMessagedc.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 builderJDK8 , .
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.— -
OnInitApache Kafka, Apache Kafka InterSystems IRISOnTearDownApache Kafka ( )OnMessageApache 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 -dInterSystems IRIS Java/.Net
Java/.Net InterSystems ObjectScript , InterSystems ObjectScript Java/.Net
, Docker