activemq推数据给前端的方式

文章目录

    • [消费者程序接收消息并通过 WebSocket 将消息传递给前端](#消费者程序接收消息并通过 WebSocket 将消息传递给前端)

消费者程序接收消息并通过 WebSocket 将消息传递给前端

ActiveMQ 是一个开源的消息代理服务,可以用来实现各种消息传递模式,包括点对点和发布/订阅模型。要将数据从 ActiveMQ 推送到前端,通常可以通过以下步骤实现:

  1. 配置 ActiveMQ 服务器:首先确保 ActiveMQ 服务器已经正确配置和运行。

  2. 生产者发送消息:生产者程序将数据发送到 ActiveMQ 队列或主题中。

  3. 消费者接收消息:消费者程序从 ActiveMQ 队列或主题中接收消息,并将其传递给前端。

  4. 前端接收消息:前端通过 WebSocket 或者其他方式接收从消费者程序传递过来的消息。
    下面是一个具体的实现方案:
    步骤 1:配置 ActiveMQ 服务器
    确保 ActiveMQ 服务器已经正确配置和运行。可以下载 ActiveMQ 的二进制文件并启动服务。
    ./bin/activemq start
    步骤 2:生产者发送消息
    使用 Java 作为示例,生产者代码如下:

    import org.apache.activemq.ActiveMQConnectionFactory;

    import javax.jms.*;

    public class Producer {
    public static void main(String[] args) throws JMSException {
    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
    Connection connection = factory.createConnection();
    connection.start();

    复制代码
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         Destination destination = session.createQueue("TEST.QUEUE");
    
         MessageProducer producer = session.createProducer(destination);
         TextMessage message = session.createTextMessage("Hello, World!");
    
         producer.send(message);
         session.close();
         connection.close();
     }

    }

步骤 3:消费者接收消息

消费者程序接收消息并通过 WebSocket 将消息传递给前端。

复制代码
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/websocket")
public class Consumer {
    private static CopyOnWriteArraySet<Session> sessions = new CopyOnWriteArraySet<>();

    @OnOpen
    public void onOpen(Session session) {
        sessions.add(session);
    }

    @OnClose
    public void onClose(Session session) {
        sessions.remove(session);
    }

    public static void main(String[] args) throws JMSException {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = factory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("TEST.QUEUE");

        MessageConsumer consumer = session.createConsumer(destination);
        consumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                if (message instanceof TextMessage) {
                    try {
                        String text = ((TextMessage) message).getText();
                        for (Session s : sessions) {
                            s.getBasicRemote().sendText(text);
                        }
                    } catch (JMSException | IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
}

步骤 4:前端接收消息

前端代码(例如,HTML + JavaScript):
ActiveMQ WebSocket Demo

Messages

复制代码
<script>
    var socket = new WebSocket("ws://localhost:8080/websocket");

    socket.onmessage = function(event) {
        var messages = document.getElementById('messages');
        var message = document.createElement('li');
        message.textContent = event.data;
        messages.appendChild(message);
    };
</script>

通过以上步骤,数据可以从 ActiveMQ 推送到前端。生产者将消息发送到 ActiveMQ 队列,消费者从队列中接收消息并通过 WebSocket 将消息传递给前端,前端通过 WebSocket 接收并显示消息。 ## 使用 MQTT 协议将数据推送到前端 ActiveMQ 也支持 MQTT 协议,可以使用 MQTT 协议将数据推送到前端。以下是一个使用 ActiveMQ 和 MQTT 将数据推送到前端的示例。 步骤 1:配置 ActiveMQ 以支持 MQTT 首先,确保 ActiveMQ 服务器已经正确配置和运行。ActiveMQ 默认支持 MQTT,但需要确保相关的 MQTT 连接器已启用。在 conf/activemq.xml 文件中,确认以下配置已存在: 启动 ActiveMQ 服务器: ./bin/activemq start 步骤 2:生产者发送消息(使用 MQTT 协议) 生产者代码可以使用任意支持 MQTT 的库,例如 Eclipse Paho MQTT 客户端库。以下是一个使用 Java 的示例:

复制代码
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;

public class MqttProducer {
    public static void main(String[] args) {
        String broker = "tcp://localhost:1883";
        String topic = "test/topic";
        String content = "Hello, MQTT!";
        int qos = 2;
        String clientId = "JavaProducer";

        try {
            MqttClient client = new MqttClient(broker, clientId);
            client.connect();
            MqttMessage message = new MqttMessage(content.getBytes());
            message.setQos(qos);
            client.publish(topic, message);
            client.disconnect();
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
}

步骤 3:前端接收消息(使用 MQTT 协议)

前端可以使用 MQTT.js 库,通过 WebSocket 连接到 ActiveMQ 服务器并接收消息。需要确保 ActiveMQ 服务器支持 MQTT over WebSocket。可以在 conf/jetty.xml 文件中添加以下配置:

复制代码
<bean id="mqttWS" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
    <property name="host" value="0.0.0.0"/>
    <property name="port" value="1884"/>
    <property name="acceptors" value="2"/>
    <property name="maxIdleTime" value="30000"/>
    <property name="lowResourcesMaxIdleTime" value="1500"/>
    <property name="lowResourcesConnections" value="50"/>
    <property name="statsOn" value="false"/>
    <property name="confidential" value="false"/>
    <property name="lowResourcesMaxIdleTime" value="30000"/>
    <property name="acceptQueueSize" value="100"/>
    <property name="maxBuffers" value="2048"/>
    <property name="requestHeaderSize" value="8192"/>
    <property name="responseHeaderSize" value="8192"/>
</bean>
在前端 HTML 中使用 MQTT.js 库:
<!DOCTYPE html>
<html>
<head>
    <title>ActiveMQ MQTT WebSocket Demo</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"></script>
</head>
<body>
    <h1>Messages</h1>
    <ul id="messages"></ul>

    <script>
        var client = new Paho.MQTT.Client("localhost", 1884, "webClient");

        client.onMessageArrived = function(message) {
            var messages = document.getElementById('messages');
            var msg = document.createElement('li');
            msg.textContent = message.payloadString;
            messages.appendChild(msg);
        };

        client.connect({onSuccess: function() {
            client.subscribe("test/topic");
        }});
    </script>
</body>
</html>

通过以上步骤,数据可以通过 MQTT 协议从 ActiveMQ 推送到前端。生产者将消息发布到 MQTT 主题,前端通过 MQTT over WebSocket 连接到 ActiveMQ 并订阅相应的主题,以接收并显示消息。

相关推荐
阿昌喜欢吃黄桃14 天前
RocketMq事务消息原理
java·中间件·消息队列·rocketmq·mq
半夜修仙15 天前
延迟队列的介绍及常见问题
java·数据库·中间件·rabbitmq
手握风云-15 天前
一条消息的旅程:RabbitMQ 学习与实践(一)
中间件·rabbitmq
RH23121116 天前
2026.6.8Linux
java·数据库·中间件
理人综艺好会17 天前
双Token机制在实际项目中的应用与实践
中间件·token
番茄去哪了17 天前
神领物流面试题(一)
java·大数据·中间件
念何架构之路17 天前
消息中间件
中间件
都说名字长不会被发现17 天前
Spring Boot Starter 中间件账号密码加密方案设计与实现
java·spring boot·后端·中间件
瀚高PG实验室18 天前
java中间件无法连接数据库
java·数据库·中间件·瀚高数据库
之歆18 天前
Day11_Express 深入解析:从中间件到项目实战
中间件·express