我有一个实现Camel和ActiveMQ的系统,用于某些服务器之间的通信。我想知道是否有一种方式,自动过期和清除发送到队列的消息后,X段时间。由于原始服务器(填充队列)将不知道是否有人正在接收消息,所以我不希望队列增长,直到它太大以至于某些东西崩溃。奖励业力指向能够帮助和提供java实现此功能的方法的人。
溶液
// expire message after 2 minutes
long ttl = System.currentTimeMillis() + 120000;
// send our info one-way to the group topic
camelTemplate.sendBodyAndHeader("jms:queue:stats", ExchangePattern.InOnly, stats, "JMSExpiration", ttl);发布于 2012-01-15 16:32:30
JMS为您提供了一种设置消息过期的机制。请看下面的两个参考
发布于 2012-01-16 10:50:51
还请注意,客户-代理之间的时钟需要保持同步,以使到期正常工作。如果时钟不同步,那么当在代理上接收到消息时,来自客户端的过期集可能已经过期。或者客户时间在代理之前,所以到期时间比10秒长。
我有点不明白为什么到期日是以客户时间为基础的。因此,AMQ提供了一个插件,通过重新调整时间来解决这个问题,只以经纪人为基础。请参阅https://activemq.apache.org/timestampplugin.html
发布于 2012-01-15 17:02:32
好的,setJMSExpiration(长期过期):
是当你是客户的时候你不能叫的东西。请看我在ActiveMQ论坛上的演讲。
https://apache-qpid-developers.2158895.n2.nabble.com/MRG-Java-JMS-Expiration-td7171854.html
https://stackoverflow.com/questions/8871249
复制相似问题