IBM Integration Bus choose which Queue read first - ibm-mq

I have 5 input Queues, 5 message flows for each. After some processing messages from all queues go to one transport queue.
Is there a possibility to set a priority across queues, for example messages from input queue 1 will always be processed and put in the transport queue first?

It sounds like you need to set the message priority.
You set the priority of a message (in the Priority field of the MQMD
structure) when you put the message on a queue
... you can create messages having priorities between 0 (the lowest) and 9
(the highest).

Hi use the Sequence Node to done this task.
https://www.ibm.com/support/knowledgecenter/en/SSMKHH_10.0.0/com.ibm.etools.mft.doc/bc28010_.htm

Related

How to send multiple number of message to queue using jms

Have a requirement while sending message to queue (tibco ems), it should be any random number between 1000-3000, how to achieve this in JMeter?
Will updating the number of samples to aggregate to ${__Random(1000,3000,)} will work? Or there is any alternate solution for this?
Config Details
Want to send any number between 1000-3000 of messages to queue in every iteration.
You are correct, whatever number you will configured in number of samples to aggregate, that many number is going to pushed to Queue,
For example, I have given the value as 3 then it is going to post 3 messages to the Queue.
Note: In this case all the 3 messages will be identical

AMQP: Process different queues in declaration order

I have a (RabbitMQ) exchange with different queues, each queue containing messages in which the order is important.
I want to select and process the earliest declared queue and progress in the order of creation. Like the exchange functioning as another queue.
How do I achieve this in AMQP?
Solved by creating a new queue for storing the unique identifiers of other queues. Since it's FIFO, the items are placed to the queue in order. For cases when we push the currently processed queue, we simply push the same identifier again - so if not all messages got processed, their processing get queued for later.

I have multiple queues and i want to set priorities to these queues. Is it possible in JMS?

If I have the 3 queues of priority 1,2 & 3 respectively. I want my consumer to consume first from queue withe priority 1, then 2 & so on. If in case queue with higher priority is empty, the consumer can consume from the queue with lower priority.
Is it possible to achieve from JMS or ActiveMQ or any other way?How?
You'd have to control that logic yourself using this method. To ActiveMQ, or any other JMS provider, you are just using another queue.
However, you can use a single queue for message priority. There are a couple different ways on how to do this as described in the documentation.
If you want your consumer to be as simple as possible then have the broker figure out the priority. Otherwise you'll need to mess with multiple consumers or inefficient single consumer logic with selectors to consume.
In both cases, your producer will just need to be smart enough to set the JMSPriority header to whatever priority the logic says it should be.
The only downside really is the fact that you have a broker side config to set up for that queue specifically rather than everything being automatic.

JMS Custom message ordering

JMS Question:- Is there any way to change the messages order in JMSQUEUE based on custom rule/policy/strategy? Other then FIFO..
You can try setting JMSPriority property on the messages sent to the queue. JMSPriority can have value from 0 to 9, with 9 been the highest. If multiple messages are present in the queue then the message with the highest priority will be consumed first.
This link could be helpful for you,
http://www.techpaste.com/2012/04/prioritize-messages-enqueued-jms-queue/

How to read messages in an order from the Queue using MDB?

I have a MDB which listens to WebSphere MQ. It does not picks up the messages in the order that has been received by the Queue. How can i make it read it in that order? Is it possible? Should i not use a MDB.
In general, WMQ delivers messages in the order that they were received. However, several things can impact that...
If the queue is set to priority instead of FIFO delivery and messages arrive in different priorities, they will be delivered "out of order".
Distinguish between order produced and order delivered. If the messages are produced on a remote QMgr and there are multiple paths to the local QMgr, messages may arrive out of order.
Difference in persistence - if messages are produced on a remote QMgr and are of different persistences, the non-persistent messages may arrive faster than the persistent ones, especially with channel NPMSPEED(FAST) set.
Multiple readers/writers - Any dependency on sequence implies a single producer sending to a single consumer over a single path. Any redundancy in producers, consumers or paths between them can result in messages delivered out of sequence.
Syncpoint - To preserve sequence, ALL messages must be written and consumed under syncpoint or else ALL must be written and consumed outside of syncpoint.
Selectors - These specifically are intended to deliver messages out of order with respect to the context of all messages in the queue.
Message groups - Retrieval of grouped messages typically waits until the entire group is present. If groups are interleaved, messages are delivered out of sequence.
DLQ - if the target queue fills, messages may be delivered to the DLQ. As the target queue is drained, messages start going back there. With a queue near capacity, messages can alternate between the target queue and DLQ.
So when an MDB is receiving messages out of order any of these things, or even several of them in combination, may be at cause. Either eliminate the dependency on message sequence (best choice) or else go back over the design and reconcile all the factors that may lead to out-of-sequence processing.
To add to T.Rob's list, MDBs use the application server WorkManager to schedule message delivery, so message order is also dependent on the order in which the WorkManager starts Work items. This is outside the control of WMQ. If you limit the MDB ServerSessionPool depth to one, then this limit is removed as there will only ever be one in-flight Work instance, but at the cost of reducing maximum throughput.
If you're running in WebSphere application server, then non-ASF mode with ListenerPorts can preserve message order subject to some transactional/backout caveats. There's a support technote here:
http://www-01.ibm.com/support/docview.wss?uid=swg21446463

Resources