Fire and forget messaging is a powerful concept. Asynchronous, decoupled communication is key to scalability and independence of services. Oracle Cloud provides a pub/sub solution called Oracle Messaging Cloud Service. This is an HTTP based publish and subscribe mechanism for asynchronous communication – based on persistent messages and durable subscriptions. It is modelled after the Java Messaging Service. It allows for publishing messages from anywhere – inside OCI but also from other clouds and from any on premises system- and for consuming these messages anywhere – again inside Oracle Cloud Infrastructure or anywhere else. Oracle Messaging Cloud Service has a low threshold – with a price set per 1M API Calls per month at $0.38 (pay as you go) or $0.25 (monthly flex).
You may wonder: why the strike out? Is that information incorrect? Well, not necessarily – it is all based on actual information from the Oracle Cloud’s website and documentation.
However, as I tried to get started with OMCS, it turned out to be not as simple as I thought. In fact, it seemed impossible.
I have gone through this with a friendly chat agent from Oracle:
And though he did not help me at all, he seemed nice.
I then decided to check service availability – in Data Regions (https://www.oracle.com/cloud/data-regions.html) – and that seems to clarify things: OMCS is about to be killed off. This useful cloud service is only available in a very select few regions, and not the up and coming ones:
In EMEA only Amsterdam Classic (thoroughly legacy) offers Messaging Cloud.
Long story short: I need to come up with a different solution. I guess in the Oracle cloud portfolio that means OCI Streaming – based on Kafka. The one thing I will not get from OCI Streaming (or so at least is my current understanding) is the Message Push Listener – invocation of an HTTP endpoint whenever a message is published. That is a real shame, because that is a feature I could really use in my function – invokes – function – in a decoupled architecture.
In this article I will describe how to get going with OMCS – creating a Destination, a (durable) Subscriber and a Publisher. In follow up articles I will show the Push Listener in conjunction with API Gateway and Oracle Functions. I believe the OMCS, API Gateway and Serverless Functions make for a terrific cloud native threesome, allowing functions to asynchronously call each other as well as other publishers to trigger function execution in a truly asynchronous manner. It is my expectation that for high volume and low latency use cases OMCS may not be the perfect solution, but where latency is not crucial and a little overhead in communication is acceptable, this may be a very nice, scalable and cheap solution for many challenges.
The messaging solution on OCI that I am now relying upon is OCI Streaming. Streaming provides a pull/buffer-based communication model with sufficient capacity to flatten load spikes and the ability to feed multiple consumers with the same data independently. More on Streaming in a future article:
Resources
Product page on OMCS: https://www.oracle.com/application-development/cloud-services/messaging/
Documentation for Oracle Messaging Cloud Service: https://docs.oracle.com/en/cloud/iaas/messaging-cloud/index.html
Tutorial: Oracle Messaging Cloud Service: Handling Messaging Transactions with HTTP – https://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/13_2/messagingservice/obe_messaging_Handling_Messaging_Transactions_with_HTTP.html#overview
Documentation on OCI Streaming – https://docs.cloud.oracle.com/iaas/Content/Streaming/Concepts/streamingoverview.htm