activemq推数据给前端的方式

devtools/2024/10/18 14:22:06/

文章目录

    • 消费者程序接收消息并通过 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<>();@OnOpenpublic void onOpen(Session session) {sessions.add(session);}@OnClosepublic 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() {@Overridepublic 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 并订阅相应的主题,以接收并显示消息。


    http://www.ppmy.cn/devtools/57907.html

    相关文章

    如何检测和处理Android应用程序中的内存泄漏问题。

    在Android开发中&#xff0c;内存泄漏是一个常见问题&#xff0c;它会导致应用程序占用过多的内存资源&#xff0c;影响性能&#xff0c;甚至引发应用崩溃。检测和处理内存泄漏是确保应用稳定性和用户体验的重要环节。以下从技术难点、面试官关注点、回答吸引力及代码举例四个方…

    白话负载均衡、正反向代理(入门科普版)

    什么是负载均衡&#xff1f;为什么需要负载均衡 从字面上理解&#xff0c;什么是负载&#xff0c;服务器承受访问量的大小是负载&#xff0c;但是单台服务器的访问性能是有限的&#xff0c;最典型的例子就是双十一、春运抢票这种&#xff0c;这时候就需要一种方案来解决这类问…

    人工智能--循环神经网络

    个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;引言 &#x1f349;概述 &#x1f348;基本概念 &#x1f34d;定义 &#x1f34d;结构 &#x1f34c;输入层 &#…

    90元搭建渗透/攻防利器盒子!【硬件篇】

    前言 以下内容请自行思考后进行实践。 使用场景 在某些情况下开软件进行IP代理很麻烦&#xff0c;并不能实现真正全局&#xff0c;而且还老容易忘记&#xff0c;那么为了在实景工作中&#xff0c;防止蓝队猴子封IP&#xff0c;此文正现。 正文 先说一下实验效果&#xff1…

    机器学习Day9:集成学习

    概念 集成学习通过构建并结合多个学习器来完成学习任务 模型 集成学习的结果通过投票法&#xff08;少数服从多数&#xff09;产生&#xff0c;所以学习器要有多样性&#xff0c;精度高不一定是好事 1.Bagging模型&#xff1a;并行训练多个学习器 典型代表&#xff1a;随机…

    栈和队列---循环队列

    1.循环队列的出现 &#xff08;1&#xff09;上面的这个就是一个普通的数据的入队和出队的过程我们正常情况下去实现这个入队和出队的过程&#xff0c;就是这个数据从这个队尾进入&#xff0c;从队头离开&#xff0c;但是这个加入的时候肯定是没有其他的问题的&#xff0c;直接…

    无人机便携式侦测干扰设备(定全向)技术详解

    无人机便携式侦测干扰设备&#xff08;定全向&#xff09;是一种专门针对无人机进行侦测和干扰的设备。它具备定向和全向两种工作模式&#xff0c;能够覆盖较宽的频率范围&#xff0c;有效侦测并干扰无人机与遥控器之间的通信信号&#xff0c;从而达到控制或驱离无人机的目的。…

    AI绘画Stable Diffusion【图生图教程】:图片高清修复的三种方案详解,你一定能用上!(附资料)

    大家好&#xff0c;我是画画的小强 今天给大家分享一下用AI绘画Stable Diffusion 进行 高清修复&#xff08;Hi-Res Fix&#xff09;&#xff0c;这是用于提升图像分辨率和细节的技术。在生成图像时&#xff0c;初始的低分辨率图像会通过放大算法和细节增强技术被转换为高分辨…