Jonar Ramos
Jonar Ramos

Reputation: 11

One at a Time Processing for Oracle SOA JMS Queue

We have a requirement in where we need to send only one message at a time to a backend process. The call back of this process takes around an hour, only after the call back can we send another request to the process.

I am trying to achieve this by using a manager bpel process that will hold the messages first if there is already something being processed in the backend, and then send it once it realizes that the backend is free. This approach will work, but our architect wants a cleaner solution. He suggested using JMS queues. The idea is for the jms queue to messages to be read by a amanger one at a time, only moving on to the next one once we receive the callback from the backend and we know that the composite and bpel instance is finished. I've been scouring the internet for weeks, but I couldn't find a working jms based solution for my requirement.

I've tried the suggestions for this link but turning on unit of order and acknowledgement properties does nothing.

Upvotes: 1

Views: 1406

Answers (2)

Jesper Vernooij
Jesper Vernooij

Reputation: 195

Hi Jonar,

At my company we always use JMS queues for Asynchronous messaging. You could do with a delay timer build in your composite set to 1 hour and 15 minutes for example, and it will work most of the time, but its hella messy. The whole idea is for any asynchronous process to kick off when a message is put upon its queue target (specified by the JMS queue). The JMS adapter in the composite of your project will pick up the message from the queue when it is free to process the queue. The goal for you would be to put the message on the queue and pick it up from it using the adapter. It will know which message to pick up because you specify which queues it listens to in the adapter.

The following blog post by John-Brown Evans eplains the whole process from step one. It might be a bit tedious, but I found it very helpful. Its using SOa Suite 11g instead of the nowadays more commonly used 12c, but its fundamentals remain the same.

Awesome JMS queue tutorial

I hope this works for you!

Cheers,

Jesper

Upvotes: 0

spattanaik75
spattanaik75

Reputation: 143

Try this approach!! Use a event driven bpel process.

Use a database flag as your next trigger. (flag is TRUE)

  1. jms Adapter receives first message from the queue. Here use a delay in the adapter since you are expecting the bpel to be long running. use below setting.

    <binding.jca config="MyServiceInboundQueue_jms.jca"> <property name="minimumDelayBetweenMessages">10000</property> <property name="singleton">true</property> </binding.jca>

  2. if flag == TRUE in the db causes the db adapter to proceed with the bpel process, else skip the bpel.

  3. mark flag==FALSE
  4. call the backend system
  5. callback is received after an hour.
  6. set flag==TRUE

Upvotes: 1

Related Questions