使用 Websocket 连接 stomp 和 ActiveMQ
Connect stomp and ActiveMQ using Websocket
我正在使用 Stomp 和 ActiveMQ 来侦听来自局域网的消息并将其发布到某个应用程序。
为了测试,我使用tcp协议实现连接,需要使用Websocket协议。
我的activeMQ已经配置为使用WebSocket,看下面的代码:
<!--
The transport connectors expose ActiveMQ over a given protocol to
clients and other brokers. For more information, see:
http://activemq.apache.org/configuring-transports.html
-->
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<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:61623?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
但是如果我使用 ws 连接对我不起作用:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH:mm:ss.SSS");
String user = env("ACTIVEMQ_USER", "admin");
String password = env("ACTIVEMQ_PASSWORD", "password");
String host = env("ACTIVEMQ_HOST", "localhost");
int port = Integer.parseInt(env("ACTIVEMQ_PORT", "61623"));
String destination = arg(args, 0, "/topic/event");
String protocol = "ws://";
StompJmsConnectionFactory factory = new StompJmsConnectionFactory();
factory.setBrokerURI(protocol + host + ":" + port);
Connection connection = factory.createConnection(user, password);
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = new StompJmsDestination(destination);
MessageConsumer consumer = session.createConsumer(dest);
我找了一些关于使用 StompJmsConnectionFactory
class 的 WS 连接的例子,但只有 tcp 连接。
有人已经实现了这样的东西?
谢谢
我已经将 ActiveMQ 与 Stomp 和 WebSockets 结合使用来从浏览器获取数据。对我有用的配置非常相似,除了:
在我的代码中我使用了String protocol = "tcp://";
。它是与 WebSockets(与浏览器?)通信的消息代理。您的 java 应用程序通过 tcp
.
与消息代理通信
我使用了具有此配置的 Apollo 消息代理引擎
<connector id="tcp" bind="tcp://0.0.0.0:61613" connection_limit="64">
<detect protocols="openwire stomp" />
</connector>
<connector id="ws" bind="ws://0.0.0.0:61623" connection_limit="16">
<detect protocols="stomp" />
</connector>
我在创建 MessageConsumer
之后最后调用了 connection.start();
我正在使用 Stomp 和 ActiveMQ 来侦听来自局域网的消息并将其发布到某个应用程序。
为了测试,我使用tcp协议实现连接,需要使用Websocket协议。
我的activeMQ已经配置为使用WebSocket,看下面的代码:
<!--
The transport connectors expose ActiveMQ over a given protocol to
clients and other brokers. For more information, see:
http://activemq.apache.org/configuring-transports.html
-->
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<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:61623?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
但是如果我使用 ws 连接对我不起作用:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH:mm:ss.SSS");
String user = env("ACTIVEMQ_USER", "admin");
String password = env("ACTIVEMQ_PASSWORD", "password");
String host = env("ACTIVEMQ_HOST", "localhost");
int port = Integer.parseInt(env("ACTIVEMQ_PORT", "61623"));
String destination = arg(args, 0, "/topic/event");
String protocol = "ws://";
StompJmsConnectionFactory factory = new StompJmsConnectionFactory();
factory.setBrokerURI(protocol + host + ":" + port);
Connection connection = factory.createConnection(user, password);
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = new StompJmsDestination(destination);
MessageConsumer consumer = session.createConsumer(dest);
我找了一些关于使用 StompJmsConnectionFactory
class 的 WS 连接的例子,但只有 tcp 连接。
有人已经实现了这样的东西?
谢谢
我已经将 ActiveMQ 与 Stomp 和 WebSockets 结合使用来从浏览器获取数据。对我有用的配置非常相似,除了:
在我的代码中我使用了
String protocol = "tcp://";
。它是与 WebSockets(与浏览器?)通信的消息代理。您的 java 应用程序通过tcp
. 与消息代理通信
我使用了具有此配置的 Apollo 消息代理引擎
<connector id="tcp" bind="tcp://0.0.0.0:61613" connection_limit="64"> <detect protocols="openwire stomp" /> </connector> <connector id="ws" bind="ws://0.0.0.0:61623" connection_limit="16"> <detect protocols="stomp" /> </connector>
我在创建
MessageConsumer
之后最后调用了connection.start();