我想以某种方式延迟整个消息组的消息。
问题是属于每个消息组的所有消息必须按照它们发布的相同顺序依次处理。如果无法使用其中一条消息 - 我们希望延迟它并延迟同一消息组中的剩余消息。我不想阻止消费者——它应该可以自由地处理来自其他组的消息。
怎么做?
我不能说 JMS 有什么好的内置支持这些东西。使用单个“独立”消息,一切都变得更容易,但是您可以尝试一件事。
对这些消息(在该组中)进行延迟传递。
// Send to same queue once again, but delay 60 sec
if( isGroupMarkedForRedelivery(message.getStringProperty("JMSXGroupID"))){
message.setLongProperty("_HQ_SCHED_DELIVERY", System.currentTimeMillis() + 60000);
producer.send(message); // producer sends to process queue (again).
}
请注意,如果您需要它们以相同的顺序,那么您可能不应该在发送和/或接收中使用并发。您当然可以添加更多逻辑以适应您的情况。
您可能需要确保isGroupMarkedForRedelivery
在比“延迟”更短的时间后返回特定组的 false。