目前我正在开发一个有2个进程的应用程序。
将消息排入JMS quque。 另一个有监听器监听jms quque的进程意味着从jms队列中出队。
如果排队的元素在特定时间段内没有出列,我需要从process1知道。可能存在进程2未运行的情况。因此,当我将一个未出列的元素排入队列时,这种情况可能会上升。
目前,我正在使用队列浏览器处理此情况。
有没有更好的方法来做到这一点。
答案 0 :(得分:0)
我不知道它是否“更好”(取决于你的要求)但是......
JMS合同表示应该丢弃过期的消息,但是某些(很多?)代理(例如ActiveMQ)可以将过期的消息发送到死信队列。因此,一种方法可能是发送带有时间的消息;然后,您可以在DLQ上侦听过期的消息(并在之后重新排队)。当然,你会丢失消息顺序,因为消息可能会缓慢而不是死亡,因此消息可能会过期而有点脆弱。
另一个可能更好的替代方案是让消费者不时发送一个心跳(例如包含已处理的消息的数量)回到生产者的不同队列,让生产者在没有收到心跳的情况下做出反应(或者计数器没有按预期增加)。