使用Websocket连接Stomp和ActiveMQ

3

我正在使用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&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://0.0.0.0:61623?maximumConnections=1000&amp;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类进行WS连接的示例,但只有使用tcp连接的示例。

是否已经有人实现了类似于这样的东西?

谢谢


我认为StompJMS不支持WebSocket连接。无论如何,为什么要在Java客户端上使用WebSockets? - Tim Bish
1个回答

2

我曾使用ActiveMQ和Stomp/WebSockets从浏览器中获取数据。我的配置与现在略有不同:

  1. In my code I used String protocol = "tcp://";. It's the message broker that communicates with WebSockets (to a browser ?). Your java application communicates with the message broker through tcp.

  2. I used the Apollo message broker engine with this configuration

    <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>
    
  3. I called connection.start(); at the end after the MessageConsumer had been created


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接