连接器
启动代理后,您需要将客户端连接到它。因此,让我们从比较 ActiveMQ 和 Artemis 在客户端连接器领域的配置开始。在 ActiveMQ 术语中,它们被称为传输连接器,默认配置看起来像这样(在conf/activemq.xml
中)。
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
在 Artemis 中,客户端连接器被称为接收器,它们在etc/broker.xml
中配置如下
<acceptors>
<acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE</acceptor>
<acceptor name="amqp">tcp://0.0.0.0:5672?protocols=AMQP</acceptor>
<acceptor name="stomp">tcp://0.0.0.0:61613?protocols=STOMP</acceptor>
<acceptor name="hornetq">tcp://0.0.0.0:5445?protocols=HORNETQ,STOMP</acceptor>
<acceptor name="mqtt">tcp://0.0.0.0:1883?protocols=MQTT</acceptor>
</acceptors>
如您所见,语法非常相似,但仍然有一些差异需要我们了解。首先,正如我们之前所说,Artemis 中没有阻塞和非阻塞 (nio) 传输的概念,因此您应该将所有内容都视为非阻塞的。此外,在 Artemis 中,低级传输与构建在其之上的实际消息协议(如 AMQP 或 MQTT)是不同的。一个接收器可以在同一个端口上处理多个消息协议。默认情况下,所有协议都在单个端口上接受,但您可以使用上面的示例中所示的protocols=X,Y
URI 属性模式来限制这一点。
除了tcp 网络协议外,Artemis 还支持InVm 和Web Socket 传输。InVm 传输类似于 ActiveMQ 的vm 传输,用于将客户端连接到嵌入式代理。区别在于您可以在 Artemis 中的InVm 传输之上使用任何消息协议,而 ActiveMQ 中的vm 传输则绑定到 OpenWire。
使用 Netty 进行 IO 层的优势之一是 Web Sockets 能够开箱即用。因此,无需像 ActiveMQ 中那样使用单独的ws 传输,Artemis 中的tcp(Netty)接收器将检测 Web Socket 客户端并相应地处理它们。
为了总结这个主题,这里有一个表格向您展示了如何将您的 ActiveMQ 传输连接器迁移到 Artemis 接收器
ActiveMQ | Artemis(接收器 URL 中的选项) |
---|---|
OpenWire | protocols=OpenWire(版本 10+) |
NIO | - |
AMQP | protocols=AMQP |
STOMP | protocols=STOMP |
VM(仅限 OpenWire) | InVM(所有协议,点对点 tcp) |
HTTP(基于 OpenWire) | - |
MQTT | protocols=MQTT |
WebSocket(STOMP 和 MQTT) | 由 tcp 处理(所有协议) |