AMQ消费者选择要处理的队列

时间:2018-03-22 21:01:25

标签: java activemq

鉴于以下情况:

我有一个创建,更新和删除记录的系统。对于这些操作中的每一个,我都需要做一些事情(让我们把事件写成日志作为一个愚蠢的例子)但是我需要按顺序处理每个记录的这些事件 - 这意味着我不能在删除之前记录删除完成创建或任何以前的更新。在记录创建之前,我也无法记录更新。

我正在调查队列以保留序列。但是,我并不希望RecordID_2在RecordID_14后面被阻止。记录不需要像每条记录上的操作那样按顺序处理。因此,我认为我不能/应该使用一个队列。

由于我没有同时激活数百个RecordID_XX,我正在考虑为每个RecordID_XX设置一个队列,因此如果有多个更新可以用于该RecordID,那么该记录的每个事件都会添加到该记录中相同的队列并按顺序处理(即,在Create完成后创建第一个,Update_1,在Update_1完成后处理Update_2等),但是如果其他事件的其他事件进入,则它们将被添加到它们自己的队列中。如果队列在一段时间内是空的,它只会获得deleted。我意识到这可能导致队列获得一条消息然后被删除,因为在空闲超时到期之前没有更新。 (这似乎没有效率)

基于Andres T Finnell's this question的优秀答案。

我正在考虑做以下事情

Producer (Web Service) -> Queue_Original <- Dispatcher  -> RecordID_14 
                                                        -> RecordID_2 
                                                        -> RecordID_8
                                                        -> RecordID_15

一些&#34;记录&#34;可能需要很长时间所以我希望能够让一些消费者听这些队列。

假设我有Consumer_1和Consumer_2(我可能希望稍后添加Consumer_3以协助增加负载)

我希望Consumer_1做getDistinations()  经纪人将返回[RecordID_14,RecordID_2,RecordID_8,RecordID_15]

问题:

  • Consumer_1是否可以遍历从代理返回的队列列表,查找没有连接Consumer_X的第一个可用队列并开始处理此队列中的第一条消息?
  • 然后每个后续消费者做同样的事情,直到它找到没有消费者连接的下一个队列?
  • Advisory-Messages会在这里使用吗?

  • 我完全走错了路吗?有没有更好的方法 处理这种情况?

0 个答案:

没有答案