0

我有一个从队列中提取消息的脚本,它执行其他进程工作所需的预处理。

现在,必须传递这些消息,所以我需要确认这些消息,如果其中一个侦听消息的服务出现故障,那么它应该在重新联机时收到它错过的消息。

几个问题:

1/每次预处理运行时添加每个后处理服务的队列是否有意义?(所以我可能会在每个进程之后同时添加到 8 个不同的队列 - 这将是大量消息(每天数十万条消息)。

2/ 将消息添加到队列中有多快?添加到 8-10 个队列会减慢我的软件速度吗?

3/我可以使用主题交换来通过扇出来做到这一点吗?我唯一担心的是,如果我的一项服务出现故障,他们会错过消息。

4/有经验的人有什么建议吗?

4

1 回答 1

1

一些想法:

如果您的后处理器每个人都在做不同的“工作”,那么让他们使用队列是有意义的。如果您只有一堆后处理器都在执行相同的任务,那么您只需要有一个队列,它们都可以从中消费消息。

将消息添加到队列中很快,将队列添加到 RabbitMQ 中很快,将队列绑定到交换器中也很快。会减慢系统速度的因素是消息的大小和您可能收到的数量,以及实际需要完成的处理量。

另一个考虑是与消息的持久性有关,如果您的消息在 RabbitMQ 重新启​​动后仍然存在,也就是说,它们有多重要?如果不丢失它们至关重要(从您的问题的声音来看是这样),那么您将需要确保它们被保留。如果您查看 RabbitMQ 文档,您会发现这样做的成本很高。

这取决于您的系统实际在做什么...... Topcis 很好,Fanouts 很好,但是您的系统做什么取决于哪个适用。

强烈推荐阅读 RabbitMQ in Action,它是一个极好的资源,而且物有所值。

于 2012-08-02T22:50:56.523 回答