首先让我描述一下我计划将activemq用于我的服务的方式。
该服务为其客户提供API,并保证通知任何对其数据发生变化感兴趣的人。例如,如果创建了新用户,则每个API用户都应该能够收到有关它的通知,并在需要时查询新信息(或以任何其他方式处理通知)。要实现这些通知,我使用activemq。通知作为持久消息发送到相关联的主题,例如, "Service.User"
因此,每个想要保持有关新用户的通知的人都可以简单地实施持久消费者来接收来自该主题的消息。
我需要的主题不多,但是消息量可能非常高 - 我预计一开始每天会有大约100-200k的通知,并且在部署到生产时能够大幅增加这个数字。
实施上述方案后,我似乎面临某种局限性问题。
该服务是在C#.Net
和Apache.NMS
中开发的, ActiveMQ 安装在 Windows Server 计算机上。
我没有时间优化我的代码,我为每个发送的通知创建了一个新的连接/会话/生成器(因为C#中还没有支持pooledconnectionfactory
)。但这不是问题,因为目前我并不担心这种表现。
我遇到的问题是,在运行我的功能测试时,似乎一旦达到大约20k的消息,我就无法向activemq发送消息。它只是挂起并导致我的交易超时(40秒)。当我在http://localhost:8161/admin/topics.jsp管理页面删除所有主题的消息时,它会得到解决。
请您指出我应该使用的actviemq配置吗?
我面临的问题可能是什么原因?
欢迎任何整体建议!
答案 0 :(得分:1)
听起来好像你正在遇到Producer Flow Control。如果你打算保留大量的持久性消息,那么你可能需要为代理配置更多空间,否则会限制生产者,直到某些消费者出现消费消息并释放空间。请参阅上面的链接以获取更多信息。