好久没来写博客了,感觉自己堕落了,哈哈,LZ糊里糊涂的又换了家单位,空余时间研究了一下nodejs,顺势搞了这个demo,今天来聊聊基于nodejs和activeMQ的消息推送,内容不算复杂,新手也能一看即会。
首先介绍下一点背景,为什么搞这个东西,LZ上家公司是做监控项目的,很多告警都要实时推送到web端,以前的技术架构是flex+corba+mq(自己封装的),早期B/S架构的实时推送无非就两种,一个是基于插件的长连接,另外一个就是轮训或者Comet,前者受限于flash技术的衰败肯定会逐渐退出历史舞台,后者的低效率在数据量较大的情况下有随时崩溃的可能。随着html5的web socket技术的产生,很多前端socket技术,例如socket.io逐步得到重用,配合nodejs使用,一个前后端socket连接就可以很轻松地解决问题。
本篇使用技术socket.io+nodeJs+stomp+activeMQ,具体的技术简介就不贴了,各位可以在网络上轻松找到,这里直接代码开路。首先是页面index.htm
<html> <head> <style type="text/css"> #messages { padding: 0px; list-style-type: none;} #messages li { padding: 2px 0px; border-bottom: 1px solid #ccc; } </style> <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script> $(function() { var socket = io.connect(); socket.on('connect', function() { // }); socket.on('message', function(message) { $('#messages').append($('<li></li>').text(message)); }); socket.on('disconnect', function() { $('#messages').append('<li>Disconnected</li>'); }); }); </script> </head> <body> <ul id="messages"></ul> <hr> </body> </html>
代码中的/socket.io/socket.io.js,不是真实存在的,是nodejs加载的socket.io模块,这个插件需要在nodejs中进行添加,命令如下:
npm install socket.io
接下来是nodejs端代码,运行该代码前,要首先启动activeMQ,保证activeMQ,监听了stomp协议和61613端口,LZ在这方面吃了亏,浪费了好长时间,配置文件目录:apache-activemq-5.8.0\conf\activemq.xml
<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"/> </transportConnectors>
var Stomp = require('stomp-client'); var destination = '/topic/myTopic'; var client = new Stomp('127.0.0.1', 61613, 'user', 'pass'); var fs = require('fs'), http = require('http'), sio = require('socket.io'); var server = http.createServer(function(req, res) { res.writeHead(200, { 'Content-type': 'text/html' }); res.end(fs.readFileSync('./index.htm')); }); server.listen(8888, function() { console.log('Server listening at http://localhost:8888/'); }); // Attach the socket.io server io = sio.listen(server); var tempSockets = []; io.sockets.on('connection', function(socket) { console.log('socket connection success!!!'); tempSockets.push(socket); socket.on('disconnect',function(){ }); }); client.connect(function(sessionId) { client.subscribe(destination, function(body, headers) { console.log('From MQ:', body); //tempSocket.broadcast.emit('message', body); tempSockets.forEach(function(socket) { if(socket.connected) { socket.send(body); } }) }); var i = 0; function publish(){ setTimeout(function(){ client.publish(destination, 'Hello World!'+(i++)); //publish(); },1000); } publish(); });
文中的stomp-client模块也需要nodejs添加
npm install stomp-client
上面代码中,client.publish(destination, 'Hello World!'+(i++)),是nodejs作为提供者向activeMQ发送消息,实际应用中是java端的提供者,代码如下:
package com.feng.activemq; import javax.jms.Connection; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; /** * @author songfeng * @version 1.0. */ public class SendMessage { private static final String url = "tcp://localhost:61616"; private static final String QUEUE_NAME = "choice.queue"; private static final String TOPIC_NAME = "myTopic"; protected String expectedBody = "<hello>world!</hello>"; public void sendMessage() throws JMSException { Connection connection = null; MessageProducer producer = null; Session session = null; try { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); connection = (Connection) connectionFactory.createConnection(); connection.start(); session = (Session) connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //Destination destination = session.createQueue(QUEUE_NAME); Destination destination = session.createTopic(TOPIC_NAME); producer = session.createProducer(destination); for(int i = 1 ; i <= 20; i++) { TextMessage message = session.createTextMessage(expectedBody+i); message.setStringProperty("headname", "remoteB"); producer.send(message); Thread.sleep(1000l); } } catch (Exception e) { e.printStackTrace(); } finally { producer.close(); session.close(); connection.close(); } } public static void main(String[] args) { SendMessage sendMsg = new SendMessage(); try { sendMsg.sendMessage(); } catch (Exception ex) { System.out.println(ex.toString()); } } }
是不是很简单,重要的是研究的过程,哈哈,继续撸码。。。
相关推荐
基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码...
标题 "Node.js-基于nodejs的苹果推送测试工具" 暗示了这是一个利用Node.js构建的用于测试苹果(Apple)推送通知服务(APNS, Apple Push Notification service)的应用。Node.js是一个基于Chrome V8引擎的JavaScript运行...
基于Nodejs和html实现webrtc通信项目源码(代码精简好用).zip基于Nodejs和html实现webrtc通信项目源码(代码精简好用).zip基于Nodejs和html实现webrtc通信项目源码(代码精简好用).zip基于Nodejs和html实现webrtc通信...
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用! 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术...微信小程序基于Nodejs和Vue3开发的外卖点餐系统源码+sql数据库(课程设计).zip
基于Nodejs的智慧果园数据采控系统源代码基于Nodejs的智慧果园数据采控系统源代码基于Nodejs的智慧果园数据采控系统源代码基于Nodejs的智慧果园数据采控系统源代码基于Nodejs的智慧果园数据采控系统源代码。基于...
大型企业的业务流程因每个单位或部门的工作性质而或多或少有差异,因此流程管理也成为难题,本设计实现开发人员在程序...技术以Nodejs为服务端,MySQL为数据库,以请求的方式调用引擎提供的接口,返回JSON,方便系统处理。
基于NodeJS和Express的简单购物系统设计源码,该项目包含362个文件,主要文件类型有155个gif图像文件,73个javascript文件,以及51个png图像文件。此外,还包括29个html页面文件,24个css样式文件,以及9个jpg图像...
本框架是基于nodejs express框架二次开发的,本框架包含数据库操作示例和注解。 适合nodejs入门学习或者nodejs开发人员开发中小型web项目。直接在命令窗口运行:npm start,就可启动程序!访问地址:...
基于nodejs的云转码系统源码(毕业设计).zip基于nodejs的云转码系统源码(毕业设计).zip基于nodejs的云转码系统源码(毕业设计).zip基于nodejs的云转码系统源码(毕业设计).zip基于nodejs的云转码系统源码(毕业...
基于NodeJS和Vue的停车场点位系统设计源码,该项目包含178个文件,主要文件类型有91个TypeScript源文件,44个Vue前端文件,以及21个json配置文件。此外,还包括4个gitignore文件用于版本控制,3个Markdown文档用于...
论文+远程调试+毕业设计+重复率低+源码基于nodejs人事管理系统的设计与实现(论文+源码)_kaic.rar基于nodejs人事管理系统的设计与实现(论文+源码)_kaic.rar基于nodejs人事管理系统的设计与实现(论文+源码)_kaic.rar...
基于Nodejs的北京旅游服务系统源码+项目说明+数据库.zip基于Nodejs的北京旅游服务系统源码+项目说明+数据库.zip基于Nodejs的北京旅游服务系统源码+项目说明+数据库.zip基于Nodejs的北京旅游服务系统源码+项目说明+...
(基于nodejs的项目)学院会议纪要管理系统 (源码+说明+演示视频)(基于nodejs的项目)学院会议纪要管理系统 (源码+说明+演示视频)(基于nodejs的项目)学院会议纪要管理系统 (源码+说明+演示视频)(基于nodejs的项目)学院...
基于Nodejs+eggjs+mongodb编写的一套内容管理系统,结构简单,较目前一些开源的cms,doracms易于拓展,特别适合前端开发工程师做二次开发。 基于Nodejs+eggjs+mongodb编写的一套内容管理系统,结构简单,较目前一些...
基于Nodejs+socketio的消息转发服务
本源码项目是基于NodeJs和Vue的WebSocket网络聊天室设计,包含41个文件,主要使用JavaScript、Vue和HTML编程语言。该项目实现了基于websocket网络协议的网络聊天室,提供了实时通信的功能。系统界面友好,易于操作,...
5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于Nodejs实现的简单记账本案例源码(含登录注册功能).zip基于Nodejs实现的简单记账本案例源码(含登录注册功能).zip基于Nodejs实现的简单...
Java企业级快速开发平台 前后端分离基于nodejs+vue2+webpack+springboot.zipJava企业级快速开发平台 前后端分离基于nodejs+vue2+webpack+springboot.zipJava企业级快速开发平台 前后端分离基于nodejs+vue2+webpack+...