我将RabbitMQ设计到我们的解决方案中,我很好奇如何有效地处理和确认消息,同时仍然执行"真实"消费者代码中的工作范围为5-10秒。 (比samples所研究的工作更多。)
以上是我打算处理的一个例子。我的twitter.tweet_cmd_q
队列中的消息,其中包含消息正文中所需的所有参数,供消费者发出实际的Twitter API请求,并将这些结果保存到数据库中。
但是,我在这里遇到两个问题:
RPC calls会对我有什么好处,在这种情况下需要查询数据并将其保存到数据库中吗?
处理这种可扩展性的最佳方法是创建更多用于循环处理的工作程序实例吗?
答案 0 :(得分:3)
是的,消费者代码在执行此操作之前,通过消息执行所需的一切是正常的。这就是你如何管理其他员工的消息可见性。
不,保持简单,只需在工人身上做你需要做的事。
排序,它不是真正的循环,只是创建更多的工作人员,并让他们订阅队列。每个工作人员将轮询队列,查找消息并对其执行。
答案 1 :(得分:2)
RabbitMQ团队监控the rabbitmq-users
mailing list,有时只回答StackOverflow上的问题。
Rob的答案很棒,我只想补充一点:
消费者代码在确认消息之前处理所有需要的工作是否“正常”?
如果您在处理之前确认该消息,并且您的消费者崩溃或无法完成其任务,则该消息将丢失。这是在你的工作完成时才开始的主要原因。您可以在此处找到相关文档:https://www.rabbitmq.com/confirms.html