【发布时间】:2011-11-17 14:32:08
【问题描述】:
我计划在我的 Web 应用程序中集成消息传递中间件。现在我正在测试不同的消息中间件软件,如 RabbitMQ、JMS、HornetQ 等。
该软件提供的示例正在运行,但没有提供预期的结果。
那么,我想知道哪些是提高性能的因素应该引起人们的注意?
开发人员应该注意哪些方面来提高中间件消息传递软件的性能?
【问题讨论】:
标签: jms messaging rabbitmq middleware hornetq
我计划在我的 Web 应用程序中集成消息传递中间件。现在我正在测试不同的消息中间件软件,如 RabbitMQ、JMS、HornetQ 等。
该软件提供的示例正在运行,但没有提供预期的结果。
那么,我想知道哪些是提高性能的因素应该引起人们的注意?
开发人员应该注意哪些方面来提高中间件消息传递软件的性能?
【问题讨论】:
标签: jms messaging rabbitmq middleware hornetq
我是 HornetQ 的项目负责人,但我会尽量给你一个通用的答案,可以应用于你选择的任何消息系统。
我看到的一个常见问题是人们问为什么单个生产者/单个消费者不会给您预期的性能。
当您发送消息并立即要求确认时,您需要等待:
类似地,当您收到一条消息时,您会向服务器确认:
如果您需要对所有消息发送和消息确认进行确认,则需要等待这些步骤,因为您有一个硬件涉及持久化磁盘和在网络上发送比特。
消息系统将尝试与许多生产者和消费者一起扩大规模。也就是说,如果许多生产者都应该使用服务器上为所有消费者共享的可用资源。
有一些方法可以加速单个生产者或单个消费者:
一个是使用事务。因此,您可以最大限度地减少在磁盘上执行的块和同步,同时在服务器上持久化并在网络上往返。 (这实际上在任何数据库上都是一样的)
另一种方法是使用回调而不是阻塞消费者。 (JMS 2 提出了一个类似于 HornetQ 上的 ConfirmationHandler 的回调)。
另外:我认识的大多数供应商都会在他们的文档中有一个性能部分,其中包含对该特定产品的要求和建议。您应该单独查看每个产品
【讨论】: