我想以某种方式延迟整个消息组的消息。
事情是属于每个消息组的所有消息必须按照它们发布的顺序进行处理。如果其中一条消息无法使用 - 我们希望延迟它并延迟同一消息组中的其余消息。我不想阻止消费者 - 应该可以自由处理来自其他群组的消息。
怎么做?
答案 0 :(得分:0)
我不能说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。