在我的上一个项目中,我正在使用带有RabbitMQ的MassTransit(2.10.1)。 在某些情况下,允许生产者将大量消息发送到队列。
例如 - 用户设置为其联系人列表的批量通知 - 在某些情况下,列表可能大到100000个联系人。这将每个联系人向队列发送一条消息(我需要跟踪每条消息)。现在 - 正如我所理解的那样 - 消息正在按入口顺序处理,该用户正在堵塞队列很长一段时间,而另一个用户可能做了一件简单的事情,例如向自己发送测试消息,等待处理结束。
我考虑过为常规VS批量操作分离队列,但这仍然无法解决小批量(用户有数十个联系人等待数十万用户)并导致额外维护的问题。
对我来说理想的解决方案 - 我认为 - 将涉及操纵路由,以便消费者将处理来自同一用户的x消息,从下一个用户移动X消息,而不是再移回到队列的开头,直到处理完所有消息。
这可能吗?有更好的解决方案吗?
提前致谢。
答案 0 :(得分:1)
您必须自己编写代码来管理它。 RabbitMQ实际上没有任何内置机制来处理这样的场景,没有你的代码参与。
如果您想要从批量处理一次,然后再回到正常状态,然后再回到批量处理,则需要2个队列和代码来管理从中提取哪一个。
答案 1 :(得分:0)
只是我的意见,看看我的知识是如何没有内置的...你是否考虑使用你用来存储通知的任何存储,然后只发布一条消息,带有通知列表,存储它在您的数据库中,然后为用户使用者提供检索通知。响应将是一条消息,它可能有一个巨大的有效负载,但即使它陷入困境,添加一个跳过并将属性带到消息并强制它在0到50之间(或其他)。在什么情况下,您希望一次向用户显示100,000个通知?