我有一个从队列中拾取消息的脚本,它执行其他进程工作所需的预处理。
现在,这些消息必须被传递,所以我需要确认这些消息,如果侦听消息的服务之一宕机,那么当它重新联机时,它应该会收到错过的消息。
以下是几个问题:
1/为每次运行预处理时添加到每个后处理服务的队列有意义吗?(因此,我可能会在每个过程之后同时添加8个不同的队列-这将是大量的消息(数十万p/天)。
2/向队列添加消息的速度有多快?添加到8-10个队列会减慢我的软件吗?
3/我可以使用主题交换通过扇出来完成此操作吗?我唯一担心的是,如果我的一个服务宕机了,他们会错过消息。
4/有经验的人有什么建议吗?
发布于 2012-08-03 06:50:57
以下是一些想法:
如果您的后处理器每个都在做不同的“工作”,那么让它们使用队列是有意义的。如果你只有一堆后处理器都在做相同的任务,那么你只需要有一个队列,它们都可以从这个队列中消费消息。
将消息添加到队列的速度很快,将队列添加到RabbitMQ的速度很快,将队列绑定到交换的速度也很快。会使您的系统变慢的是消息的大小和您可能接收的数量,以及实际需要完成多少处理。
另一个考虑因素是消息的持久性,您的消息是否应该在RabbitMQ重启后幸存下来,也就是说,它们有多重要?如果关键是它们不会丢失(根据您的问题的发音,它是丢失的),那么您需要确保它们是持久的。如果您查看RabbitMQ文档,您会发现这样做的成本很高。
这取决于你的系统实际是什么,doing...Topcis是好的,扇出是好的,但你的系统做什么取决于哪一个是适用的。
我强烈推荐阅读RabbitMQ in Action,这是一个很好的资源,非常值得。
https://stackoverflow.com/questions/11786458
复制相似问题