Passerelles Java / .Net dans les produits d'intégration InterSystems IRIS

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 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