如何根据消息的时间从JMS主题中清除消息

如何根据消息的时间从JMS主题中清除消息,jms,jms-topic,autoflush,Jms,Jms Topic,Autoflush,我们有一个将事件通知发布到JMS主题的应用程序。这里注意到的问题是,经过相当长的时间后,Weblogic中的消息存储达到了10GB以上的大小。有没有一种方法可以实现一个组件,该组件可以从一个JMS主题中删除跨越特定时间(比如30天)的消息 当前就位是一个流程,在停机活动期间,消息存储被删除。然而,该流程有一个来自订阅应用程序所有者的先决条件检查是否已处理了基于最后一条消息的操作 感谢JMS主题的消息累积表示至少有一个非活动的持久订阅或可能是慢速订阅使用者。通常,您可以通过删除非活动的持久订阅、加

我们有一个将事件通知发布到JMS主题的应用程序。这里注意到的问题是,经过相当长的时间后,Weblogic中的消息存储达到了10GB以上的大小。有没有一种方法可以实现一个组件,该组件可以从一个JMS主题中删除跨越特定时间(比如30天)的消息

当前就位是一个流程,在停机活动期间,消息存储被删除。然而,该流程有一个来自订阅应用程序所有者的先决条件检查是否已处理了基于最后一条消息的操作


感谢

JMS主题的消息累积表示至少有一个非活动的持久订阅或可能是慢速订阅使用者。通常,您可以通过删除非活动的持久订阅、加快慢速订阅使用者的速度、减慢消息生成速度以便使用者能够跟上等方法来防止这种情况

如果您不想保留超过30天的消息,那么可以尝试使用JMS规范定义的“消息生存时间”功能。JMS 1.1规范第4.8节规定:

客户机可以为收到的每条消息指定生存时间值(以毫秒为单位) 发送。此值定义消息过期时间,该时间是 消息的生存时间及其发送的GMT(对于事务性发送,这是 客户端发送消息的时间,而不是事务提交的时间)

JMS提供者应该尽最大努力使消息准确过期;然而,JMS 未定义提供的精度。完全忽视是不能接受的 是时候活了

有关消息过期的更多信息,请参阅第3.4.9节 “性侵犯。”

使用重载的
send()
方法发送消息时,可以设置消息的生存时间。当然,这需要更改发送应用程序的代码


许多代理都支持在代理上设置消息的生存时间或过期时间,这样就不必严格地进行客户端修改。我对Weblogic不太熟悉,不知道它是否支持此功能,但如果您想使用此解决方案而不想修改客户端,则值得研究。

遇到以下代码,这些代码可以通过浏览队列来帮助清除消息