Initial Release
Interoperability components for receiving or publishing Google Cloud
Platform PubSub messages
This project provides example interoperability components to receive
messages from and publish messages to Google Cloud Provider (GCP) PubSub
topics. It uses PEX and the GCP Java libraries to connect to GCP PubSub.
For more information:
IRIS PEX
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=EPEX
https://learning.intersystems.com/course/view.php?id=1716
GCP PubSub
https://cloud.google.com/pubsub/docs/overview
Java PEX Inbound Adapter for the IRIS business service
PEX.GCP.PubSub.Service.cls. Receives messages for a GCP PubSub
subscription using GCP Java libraries and sends them to the Business
Service’s OnProcessInput() method as a PEX.GCP.PubSub.Msg.Message.
IRIS business service. Receives and processes PEX.GCP.PubSub.Msg.Message
messages from PEX.GCP.PubSub.InboundAdapter and sends them to one or
more other IRIS Business Hosts.
Java PEX Outbound Adapter for the IRIS business operation
PEX.GCP.PubSub.Operation. Receives PEX.GCP.PubSub.Msg.Message messages
from other business hosts in IRIS and uses GCP Java libraries to publish
them to a GCP PubSub topic.
IRIS business operation. Receives PEX.GCP.PubSub.Msg.Message messages
from other IRIS Business Hosts and sends them to
PEX.GCP.PubSub.OutboundAdapter for publishing to a GCP PubSub topic. The
operation will return a PEX.GCP.Msg.PublishResponse containing the
message ID assigned by GCP PubSub.
IRIS message class for GCP PubSub messages. Message data is stored in
one of two %Stream properties (depending on message encoding) – use
GetDataStream() to retrieve the appropriate stream. See GCP PubSub
documentation for more information about Attributes, OrderingKey,
PublishTime, and MessageID.
IsBinary indicates if message is encoded as text or binary. The
InboundAdapter will set IsBinary based on the Remote Setting
GCPTopicEncoding. When sending a message to the OutboundAdapter, set
this to true (1) when sending to topics that are configured with an
Encoding of BINARY in the GCP Topic configuration.
This currently works with IRIS 2020.1 and greater
Download the “deployment” folder from GitHub
Import the included ObjectScript classes from classes.xml in the
“objectscript” subfolder into the namespace containing the
interoperability production
Copy the included Java JAR files from the “jar” subfolder to the
server: GCPPubSub.jar and the libraries folder
Add a Business Service using the class EnsLib.JavaGateway.Service to
the Production or use an existing EnsLib.JavaGateway.Service.
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=EJVG_instructions
If it doesn’t already have them, add intersystems-gateway-x.y.z.jar
and intersystems-jdbc-x.y.z.jar to Additional Settings/Class Path.
These JARs can be found under <IRIS installation
directory>/dev/java/lib/JDK18
Add a Business Service using the class PEX.GCP.PubSub.Service
Under Basic Settings, configure TargetConfigNames to send to one
or more Business Hosts.
Under Remote InboundAdapter:
Set Remote Classname to the name of the Inbound Adapter Java
class: PEX.GCP.PubSub.InboundAdapter
Set Gateway Host and Gateway Port to those used by the
EnsLib.JavaGateway.Service that was configured earlier
To Gateway Extra CLASSPATH, add references to the JAR files
that were copied to the server. Note that if you expect to have
multiple GCP services and/or operations in the production you
can add these JAR references to the EnsLib.JavaGateway.Service
Class Path instead:
GCPPubSub.jar
JARs found in the library folder. To save time, you can copy
this from the included file classpath.txt – note that you
will need to first edit the entries in classpath.txt to
point to the directory where you placed the library folder.
Configure Remote Settings. This is a free text field, and
should contain multiple Key=Value entries, one per line.
For an explanation of the available options, view the class
documentation for PEX.GCP.PubSub.Service. The critical items
are:
GCPCredentials
GCPProjectID
GCPSubscriptionID
A GCP PEX Business Operation is configured similarly to a Business
Service.
Construct a PEX.GCP.PubSub.Msg.Message
Set IsBinary to 1 for binary content or leave it at the default of 0
for JSON or text
Populate the data stream using GetDataStream().Write() or another
stream method
Populate attributes
Populate OrderingKey if needed
Send the message to the GCP PubSub Business Operation