You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Michael Ingardia (JIRA)" <ji...@apache.org> on 2008/04/24 16:38:43 UTC
[jira] Created: (AMQ-1684) FIFO ordering across queue consumers
FIFO ordering across queue consumers
------------------------------------
Key: AMQ-1684
URL: https://issues.apache.org/activemq/browse/AMQ-1684
Project: ActiveMQ
Issue Type: New Feature
Components: Broker
Environment: problem is not environment specific
Reporter: Michael Ingardia
The JMS spec is silent on how messages are distributed across queue consumers when there is more than one consumer on the same queue. In many cases where processing of a given task is highly dependent upon the order they are processed ( requires FIFO processing ), a JMS queue is often used with a single consumer that is singled theaded. Although this does achieve FIFO processing it leaves handling the failure of the consumer up to the programmer which is a difficult task. Some JMS providers provide a way to specify that a message will not be delivered to a queue consumer (receive will block ) while a message taken from that destination has not been commited. What this allows for is to have multiple queue consumers hanging off of one queue but only one of the consumers can process a message at any given time. If one of the consumer processes is killed then the message is not commited, a time out occurs and the message is rolled back to the queue and the next consumer get the message and continues on its merry way. This makes writting a fault tolerant system much easier as you can spread consumers of a queue across multiple machines etc. Today ActiveMQ does not seem to support this capability, if more than one consumer pulls from the same queue the messages are load balanced across the consumers but there is no way to block a consumer from getting the next message thus if consumer A gets message 1, and one takes 10 seconds to process and consumer B gets message 2 immediately and it only takes 1 second to process 2, will beat one and cause down stream out of order problems. Handling this at the broker centrally is a much better solution than trying to come up with some distributed locking system that the consumers have to implement.
My proposal is to add a feature to the Queue that allows for only one out standing message transaction, and blocks all receivers until the message is either commited or rolled back..
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Assigned: (AMQ-1684) FIFO ordering across queue consumers
Posted by "Hiram Chirino (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/AMQ-1684?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Hiram Chirino reassigned AMQ-1684:
----------------------------------
Assignee: Hiram Chirino
> FIFO ordering across queue consumers
> ------------------------------------
>
> Key: AMQ-1684
> URL: https://issues.apache.org/activemq/browse/AMQ-1684
> Project: ActiveMQ
> Issue Type: New Feature
> Components: Broker
> Environment: problem is not environment specific
> Reporter: Michael Ingardia
> Assignee: Hiram Chirino
>
> The JMS spec is silent on how messages are distributed across queue consumers when there is more than one consumer on the same queue. In many cases where processing of a given task is highly dependent upon the order they are processed ( requires FIFO processing ), a JMS queue is often used with a single consumer that is singled theaded. Although this does achieve FIFO processing it leaves handling the failure of the consumer up to the programmer which is a difficult task. Some JMS providers provide a way to specify that a message will not be delivered to a queue consumer (receive will block ) while a message taken from that destination has not been commited. What this allows for is to have multiple queue consumers hanging off of one queue but only one of the consumers can process a message at any given time. If one of the consumer processes is killed then the message is not commited, a time out occurs and the message is rolled back to the queue and the next consumer get the message and continues on its merry way. This makes writting a fault tolerant system much easier as you can spread consumers of a queue across multiple machines etc. Today ActiveMQ does not seem to support this capability, if more than one consumer pulls from the same queue the messages are load balanced across the consumers but there is no way to block a consumer from getting the next message thus if consumer A gets message 1, and one takes 10 seconds to process and consumer B gets message 2 immediately and it only takes 1 second to process 2, will beat one and cause down stream out of order problems. Handling this at the broker centrally is a much better solution than trying to come up with some distributed locking system that the consumers have to implement.
> My proposal is to add a feature to the Queue that allows for only one out standing message transaction, and blocks all receivers until the message is either commited or rolled back..
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Resolved: (AMQ-1684) FIFO ordering across queue consumers
Posted by "Hiram Chirino (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/AMQ-1684?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Hiram Chirino resolved AMQ-1684.
--------------------------------
Resolution: Won't Fix
The exclusive consumer feature should satisfy your requirement. See:
http://activemq.apache.org/exclusive-consumer.html
> FIFO ordering across queue consumers
> ------------------------------------
>
> Key: AMQ-1684
> URL: https://issues.apache.org/activemq/browse/AMQ-1684
> Project: ActiveMQ
> Issue Type: New Feature
> Components: Broker
> Environment: problem is not environment specific
> Reporter: Michael Ingardia
> Assignee: Hiram Chirino
>
> The JMS spec is silent on how messages are distributed across queue consumers when there is more than one consumer on the same queue. In many cases where processing of a given task is highly dependent upon the order they are processed ( requires FIFO processing ), a JMS queue is often used with a single consumer that is singled theaded. Although this does achieve FIFO processing it leaves handling the failure of the consumer up to the programmer which is a difficult task. Some JMS providers provide a way to specify that a message will not be delivered to a queue consumer (receive will block ) while a message taken from that destination has not been commited. What this allows for is to have multiple queue consumers hanging off of one queue but only one of the consumers can process a message at any given time. If one of the consumer processes is killed then the message is not commited, a time out occurs and the message is rolled back to the queue and the next consumer get the message and continues on its merry way. This makes writting a fault tolerant system much easier as you can spread consumers of a queue across multiple machines etc. Today ActiveMQ does not seem to support this capability, if more than one consumer pulls from the same queue the messages are load balanced across the consumers but there is no way to block a consumer from getting the next message thus if consumer A gets message 1, and one takes 10 seconds to process and consumer B gets message 2 immediately and it only takes 1 second to process 2, will beat one and cause down stream out of order problems. Handling this at the broker centrally is a much better solution than trying to come up with some distributed locking system that the consumers have to implement.
> My proposal is to add a feature to the Queue that allows for only one out standing message transaction, and blocks all receivers until the message is either commited or rolled back..
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.