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 IRISOnTearDown
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 IRISOnTearDown
Apache Kafka ( )OnMessage
Apache 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 -d
InterSystems IRIS Java/.Net
Java/.Net InterSystems ObjectScript , InterSystems ObjectScript Java/.Net
, Docker