Implementing Exactly Once in Order (or FIFO) in Solace

AnujDulta
AnujDulta Member Posts: 4
edited 2:54AM in General Discussions #1

Hi there,

We have recently introduced SAP Advanced Event Mesh (AEM), which under the hood is 'Solace PubSub+ Cloud' in our Integration Landscape, and now I am seeking for the best way to implement 'Exactly Once In Order' Sequencing in our Integration.

We are on Version 10.9.1.114-0.

The Integration is going to do the following:

  1. Source System will Publish the Switching Job details (XML) to SAP AEM from WebLogic JMS Server.
  2. We have another SAP Integration Layer which then subscribes to the Solace Queue (or Topic), does Message Transformation, and then forwards that to External System.

The Challenge:

We want messages belonging to one Job (lets say Job A), should be delivered to External System in Sequence. Lets say Job A has Operation 1, 2 and 3. If for some reason Operation 2 fails to get delivered to External System, Job 3 should not go. However, Job B and it's Operations can continue to go as usual.

So, we need FIFO for individual Job Operation, and not across all the Job Operations.

Analysis done so far:

  1. We can create One Exclusive Queue and One DMQ for the process, and Publish everything there. By doing it all the Jobs and their Operations will follow Sequence by Default. In All the Success scenarios, this should be okay (I guess). But in case of failure, the message will move to DMQ and the Subsequent message for one Job will not know and 'might' get processed.
  2. I went through Partition Queues, but that doesn't seem to fit the purpose, as there the messages (Job Operations in our case) of one Job can go to any Partition
  3. Non-Durable (Temporary) Queues: What I have understood so far, we can request the Publisher (Client) to create Queues Dynamically and all the messages (Operation) of one Job should be sent to ONE Queue. As soon as those messages are consumed by our SAP Integration and forwarded to Externally System, these Queues get deleted - I am not 100% sure if this is how this will behave. In case of failures, I would expect the Queue remains intact and messages belonging to that Queue will pile up, without impacting the other Jobs.

Following things are Mandatory:

  1. Guaranteed Delivery of the messages to External System
  2. Order of Operations belonging to same Job should be maintained
  3. Order for Different Jobs is not Mandatory, and those can be parallelly processed.

Any help on this would be really appreciated.

-Anuj