2012-03-05 206 views
7

我在寻找如何加速通过RabbitMQ的消息传输的想法。RabbitMQ传输速度加快?

我在Windows 64位上安装了最新版本,在本地机器上运行服务器,我也通过C#实现发布和使用服务器。我最初以每秒40,000条消息出现,这是令人印象深刻的,但不符合我的需要(我与一个自定义二进制读取器竞争,每秒可处理2400万个未分类的16字节大字节数组;显然,我不期望接近那个,但我试图至少改善)。我需要尽可能快地发送大约115,000,000条消息。我不想坚持数据,连接将直接面向单个消费者。然后我构建了16B字节数组的大块,并且没有任何改进地发布到总线上。传输速率最高为45mb /秒。我发现这非常缓慢,因为最终它应该归结为原始传输速度,因为我可以创建几兆字节的字节数组,其中交换机的路由效率与原始传输速度相比可以忽略不计。为什么我的信息总线最大传输速度为45mb /秒?

+0

如果只有1个消费者,为什么不直接通过TCP发送?你不需要消息总线。 – 2012-03-05 16:09:02

+0

在这些测试过程中,您的IO(网络,磁盘)和CPU的外观如何? – Xailor 2012-03-05 16:13:05

+0

可能你应该看看zeromq而不是rabbitmq。你的任务似乎适合0mq。至少他们声称在该消息大小(16字节)上每秒发送约3_000_000条消息。 http://www.zeromq.org/results:0mq-tests-v03 – 2012-03-06 05:05:12

回答

1

Bump ...和更新:在较长时间内没有看到任何对此问题的答案。我有点惊讶,没有一个RabbitMQ开发人员插话。我与RabbitMQ和ZeroMQ进行了广泛的合作。我决定在查看高吞吐量进程内消息解决方案时,RabbitMQ不能胜任这项任务。代理实现,尤其是解析逻辑是提高吞吐量的主要瓶颈。我从可能的选项列表中删除了RabbitMQ。

有一篇白皮书介绍了他们如何提供解决方案来管理低延迟,高吞吐量的金融数据流选项,但听起来他们所做的只是抛硬件而不是提供针对低延迟的解决方案,高吞吐量要求。

ZeroMQ,在我更深入地研究文档之后,做了一项出色的工作。我可以在进程中运行通信,它提供足够稳定的推/拉,pub/sub,req/rep以及我需要的pair/pair模式。我正在寻找ZeroMQ不提供的pub/sub模式内的阻塞逻辑(当超过高水位时它会丢弃消息),但推/拉模式提供阻塞。所以,我所需要的几乎全部都是提供的。我唯一抱怨的是对事件处理的理解;通过轮询/多路复用实现的事件结构不是很理想。