Gateway Java / .Net dalam Produk Integrasi IRIS InterSystems

Gateway di InterSystems IRIS adalah mekanisme komunikasi antara inti IRIS InterSystems dan kode aplikasi Java / .Net. Dengan bantuan gateway, Anda dapat bekerja dengan objek Java / .NET dari objek ObjectScript dan ObjectScript serta global dari Java / .NET. Gateway dapat dijalankan di mana saja - secara lokal, di server jauh, di buruh pelabuhan.

Pada artikel ini, saya akan menunjukkan kepada Anda bagaimana Anda dapat dengan mudah mengembangkan dan memasukkan produk integrasi dengan kode .Net / Java. Dan untuk berinteraksi dengan kode dalam bahasa Java / .Net, kita akan menggunakan PEX , yang memberikan kesempatan untuk mengimplementasikan elemen produk integrasi apa pun dalam bahasa Java / .Net.

Sebagai contoh, kami akan mengembangkan integrasi dengan Apache Kafka .

Arsitektur

Apache Kafka adalah broker pesan yang populer. Di Kafka memiliki tema (topik) pesan di mana penerbit (penerbit) menulis pesan dan memiliki pelanggan (konsumen) di utas yang membaca pesan tersebut.

Pertama, kami akan menulis operasi bisnis Java yang akan mengirim pesan ke Apache Kafka. Kemudian kami menambahkan layanan bisnis di C # yang akan membaca, menyimpan, dan mengirimkan pesan untuk diproses lebih lanjut di InterSystems IRIS.

Solusi kami akan berfungsi di buruh pelabuhan dan terlihat seperti ini:

Gateway Java

Pertama-tama, kami akan mengembangkan Operasi Bisnis di Java untuk mengirim pesan ke Apache Kafka. Kode dapat ditulis di IDE Java apa pun dan terlihat seperti ini :

  • 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