【问题标题】:ActiveMQ persistent messages (durable queue) configuration problem?ActiveMQ持久消息(持久队列)配置问题?
【发布时间】:2011-10-12 20:30:06
【问题描述】:

首先让我描述一下我计划将 activemq 用于我的服务的方式。

该服务为其客户提供 API,并保证通知任何对其数据发生变化感兴趣的人。例如,如果创建了新用户,则每个 API 用户都应该能够收到有关它的通知,并在他们愿意的情况下查询新信息(或以任何其他方式处理通知)。为了实现这些通知,我使用了 activemq。通知作为持久消息发送到相关主题,例如"Service.User",因此每个想要随时了解新用户的人都可以简单地实现持久消费者来接收来自该主题的消息。

我需要的主题并不多,但消息量可能非常高 - 我预计一开始每天大约 100-200k 条通知,并且在部署到生产环境时能够大幅增加这个数量。

在实现了上述场景后,我似乎遇到了某种限制问题。 该服务在C#.NetApache.NMS 中开发,ActiveMQ 安装在Windows Server 机器上。 我没有时间优化我的代码,我确实为每个发送的通知创建了一个新的连接/会话/生产者(因为 C# 中尚不支持pooledconnectionfactory)。但这不是问题,因为目前我并不关心这种性能。

我遇到的问题是,在运行我的功能测试时,一旦它达到大约 20k 条消息,我似乎无法向 activemq 发送消息。它只是挂起并导致我的事务超时(40 秒)。当我在 http://localhost:8161/admin/topics.jsp 管理页面删除所有主题的消息时,它得到了解决。

能否请您指出我应该为我的案例使用的正确 actviemq 配置?

我面临的问题可能是什么原因?

也欢迎任何总体建议!

【问题讨论】:

    标签: c# activemq persistent


    【解决方案1】:

    听起来你好像遇到了Producer Flow Control。如果您打算保留大量持久消息,那么您可能需要为代理配置更多空间,否则它将限制生产者,直到一些消费者出现来消费消息并释放空间。有关更多信息,请参阅上面的链接。

    【讨论】:

    • 嗨蒂姆,你是对的 - 这是由 FlowControl 限制引起的。如果需要存储大量消息,如何配置队列?消费者是持久的,这意味着一个人可以在今天注册并停机一个月,然后在重新上线时期待该主题的所有消息。这是否意味着我应该在配置中设置用于存储消息的上限,仅此而已?另一个问题是 - 我如何删除消息 - 假设 1 个月后?
    • 您可能希望查看此应用程序的虚拟主题而不是持久订阅,因为 JMS 中的持久订阅者模型有点糟糕。见activemq.apache.org/virtual-destinations.html
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 2015-08-22
    • 2011-06-30
    • 2012-05-22
    • 1970-01-01
    • 2016-03-22
    相关资源
    最近更新 更多