Gateways Java / .Net en productos de integración de InterSystems IRIS

Las puertas de enlace en InterSystems IRIS son el mecanismo de comunicación entre el núcleo de InterSystems IRIS y el código de la aplicación Java / .Net. Con la ayuda de puertas de enlace, puede trabajar con objetos Java / .NET de ObjectScript y ObjectScript y globales de Java / .NET. Las puertas de enlace se pueden ejecutar en cualquier lugar: localmente, en un servidor remoto, en la ventana acoplable.

En este artículo, le mostraré cómo puede desarrollar y contener fácilmente productos de integración con código .Net / Java. Y para interactuar con código en lenguajes Java / .Net, usaremos PEX , que brinda la oportunidad de implementar cualquier elemento de productos de integración en lenguajes Java / .Net.

Para nuestro ejemplo, desarrollaremos una integración con Apache Kafka .

Arquitectura

Apache Kafka es un corredor de mensajes popular. En Kafka tiene un tema (tema) mensajes en los que los editores (editor) escriben mensajes y tienen suscriptores (consumidor) en los hilos que leen estos mensajes.

Primero, escribiremos una operación comercial de Java que publicará mensajes en Apache Kafka. Luego, agregaremos un servicio comercial en C # que leerá, guardará y transmitirá mensajes para su posterior procesamiento en InterSystems IRIS.

Nuestra solución funcionará en Docker y tiene este aspecto:

Puerta de enlace Java

En primer lugar, desarrollaremos una Operación Comercial en Java para enviar mensajes a Apache Kafka. El código se puede escribir en cualquier IDE de Java y lucir así :

  • 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