Java / .Net-Gateways in IRIS-Integrationsprodukten von InterSystems

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.

  • — -

  • OnInit Apache Kafka InterSystems IRIS

  • OnTearDown 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 IRIS

  • OnTearDown Apache Kafka ( )

  • OnMessage Apache Kafka Ens.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




All Articles