【问题标题】:How to choose the right protocol and network connection for using ActiveMQ?如何选择正确的协议和网络连接来使用 ActiveMQ?
【发布时间】:2015-09-14 09:26:20
【问题描述】:
最近在我的新项目中开始使用ActiveMQ作为消息中间件,这是我第一次尝试使用ActiveMQ,之前参与的项目使用了我们之前公司的内部消息框架,如Swallow。所以在开始实施系统之前,我需要明确一些设计要点。
我们系统中将使用 ActiveMQ 的案例包括发送邮件、发送任务到队列和从队列中执行任务、异步请求/响应,那么什么样的协议和网络连接是我们案例的正确选择? 我在这里列出了一些协议和网络连接选项:
ActiveMQ 协议:
MQTT
WS
Openwire
Stomp
Stomp
ActiveMQ 网络连接:
VM
TCP
UDP
HTTP
Failover
Discovery
我也会为我的系统考虑HA和集群的方面,所以任何人都可以给我一些想法来决定如何选择协议和网络连接?
非常感谢。
【问题讨论】:
标签:
java
activemq
protocols
message
【解决方案1】:
Openwire 在历史上一直是默认协议,NIO 传输可以提供优于 TCP 的性能改进,因此如果您使用 ActiveMQ 作为您唯一的代理,请使用其中之一。但是,使用 AMQP 意味着将来您可能会使用另一个流行的消息代理 RabbitMQ。还有其他的,STOMP 或 MQTT 是轻量级的,VM 设计用于当应用程序与代理驻留在同一台机器上时使用,因此可以获得非常高的吞吐量。
由于默认情况下 ActiveMQ 可以启用所有协议,因此可以进行一些快速测试,以了解您正在构建的特定应用程序的吞吐量。然后在做决定时考虑以上几点。
关于 UDP、TCP、HTTP,我会选择 TCP。 UDP 不可靠,而 TCP 在每秒发送 1000 个数据方面绰绰有余。如果您的公司有笨拙的防火墙规则,HTTP 可能会很有用。
我会将其包装在故障转移传输中。我从未使用过发现,但我认为这是更高级的,并且最初不需要,因为它需要发现代理。它的唯一目的是动态发现 ActiveMQ 代理(尽管您仍然必须知道发现代理在哪里)。