英文:
Artemis STOMP message expiry
问题
从文档中我仍然不理解如何在 broker.xml 中配置 STOMP 协议的消息过期。我们有一个聊天项目,为每个聊天创建了“多播”地址:
topic/chat.1、topic/chat.2、...、topic/chat.100000
除此之外,我们还使用了“持久订阅”。因此,即使在我们不太流行的项目中,每个月的主题数量可能会超过 50000,这会导致服务器内存耗尽,尤其是当我们转到 web 控制台时。
我希望在删除过期消息时,不必要的地址和队列会被自动删除。
英文:
From the documentation I still do not understand how to configure the expiration of messages for the STOMP protocol in broker.xml.
We have a chat project in which "multicast" addresses are created for each chat
topic/chat.1, topic/chat.2, ..., topic/chat.100000
Among other things, we use "Durable Subscriptions".
Thus, even on our unpopular project, the number of topics per month can exceed 50,000, which causes the server to run out of memory, especially if we go to the web console.
I hope that when deleting expired messages, unnecessary addresses and queues will be automatically deleted
答案1
得分: 1
你可以在文档中提到的address-setting
中使用expiry-delay
来为所有传入的消息设置过期时间,例如:
<address-setting match="#">
<expiry-delay>300000</expiry-delay> <!-- 5分钟 -->
</address-setting>
如果你正在使用ActiveMQ Artemis 2.12.0或更新版本,当最后一条消息从没有消费者的自动创建队列中过期时,默认情况下将自动删除队列(如果相应的自动创建地址没有队列,也将默认自动删除该地址)。
英文:
You can use the expiry-delay
address-setting
mentioned in the documentation to apply an expiration to all incoming messages, e.g.:
<address-setting match="#">
<expiry-delay>300000</expiry-delay> <!-- 5 minutes -->
</address-setting>
If you're using ActiveMQ Artemis 2.12.0 or later then when the last message expires from an auto-created queue with no consumers then the queue will be auto-deleted by default (and if the corresponding auto-created address then has no queues it will also be auto-deleted by default).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论