我的环境中只有一个应用服务器。我有一些消息需要一段时间来服务(比如10秒左右),我想通过配置运行代码的消费者应用程序的多个实例来处理这些消息来增加吞吐量。我已经读过“竞争消费者”模式,并认为在使用MassTransit时应该避免这种情况。根据MassTransit文档here,每个接收端点应具有唯一的队列名称。我很难理解如何将此建议映射到我的环境。 是否可以让N个消费者实例运行,每个实例都收到相同的消息,但实际上只有一个实例会对其进行操作?换句话说,我们是否可以实现“竞争消费者”模式但是跨多个队列而不是一个?
或者我看错了吗?我是否真的需要查看“发送”方法而不是“发布”? “发送”的缺点是它要求发送者直接了解端点的存在,并且我希望我拥有的消费者/端点的数量是动态的。 MassTransit内置了什么可以帮助跟踪有多少消费者实例/队列/端点可以为特定消息类型提供服务?
谢谢, 安迪
答案 0 :(得分:5)
所以"避免竞争消费者"指导是从MSMQ作为主要运输时开始的。如果多个线程从队列中读取,MSMQ将会崩溃。
如果您使用的是RabbitMQ,那么竞争对手的消费者就会非常出色。竞争消费者是正确的答案。每个竞争消费将使用来自端点的相同接收。