The underlying technology is ActiveMQ (Classic), so the documentation for that may answer some of your questions.
The fields which are required are either Queue or Topic (depending on how you want delivery to work), and Body.
The main limitation is that only text/string messages can be consumed by ETM channels. So, you could have Channel A submit a Message with a CSV format data which was then consumed by Channel B (using the CSV message format). However you could not have Channel A submit messages using XLSX/PNG etc. data for consumption by another channel.
One scenario where using the message bus would be useful would be to support asynchronous processing on a Remote Upload channel whilst using a Response Mapper. The Remote Upload channel could submit the received Payload to the message bus, then immediately send a custom response to the caller (via a response mapper). Another channel could process the queued message in the background.
Do you have more specific questions or uses cases?
Thank you very much, Paul!
I had not come across that article, and the specifics of Queues implemening a sort of “loadbalancer” were new to me.
However, the main limitation I’m experiencing is the lack of a direct example to work from, such as a example datamapper to add a message to the message bus.
I’ve spent a lot of time trying to get the syntax correct when adding data to the Body, Message Property, Priority, and Time To Live, and this is where the main issue arises as I keep getting different errors and not figuring out the syntax.
If there was an example of a Message Bus Request Mapper on the wiki, it would be much easier to know what format ETM is expecting as input when data mapping, or even better, a set of example channels that display some “best practices” for both adding and reading data from the message bus.
The specific use case I’m trying to get to work is the one you proposed in this thread;
but I’ve not had the opertunity to set aside time to try getting that to work. However upon trying to do so a few weeks ago led me to realize i did not know enough about the use of destinations and the message bus.
How to use the message bus seemed out of topic to bring up in that thread, and that’s why this is a sepererate question
The simplest mapper would have a Body with expression “Hello, World!” and a Queue expression “MyQueue”. When this mapper processes an Import Record it will post a message to the specified queue, which will remain in the queue until something reads it, or the ActiveMQ process is restarted.
A Channel to consume these messages would specify:
- Source: Assyst Destination
- Message format: Free Text
- Queue: MyQueue
Such a channel would create a single record import for each invocation of the mappper.
From that simple example it should be possible to incrementally add complexity.