您的位置:首页 > Web前端 > Node.js

nodejs一个函数实现消息队列中间件

2018-02-07 13:09 537 查看
消息队列中间件(Message Queue)相信大家不会陌生,如Kafka、RabbitMQ、RocketMQ等,已经非常成熟,在大大小小的公司和项目中也已经广泛使用。

有些项目中,如果是只使用初步的消息队列功能(比如少量客户端和简单的消息中转),对于追求“简洁美”的程序猿、攻城狮们,实在不愿意部署、维护一个消息队列中间件,那么就自己动手吧,编写几十行代码,嵌入到现有的模块,消息队列功能就能正常运转起来,是不是很有成就感呢?

下面我抛砖引玉,使用nodejs+UDP实现一个简单的消息队列。你可以用C++、JAVA、C#等其它语言,UDP也可以换成TCP、web api等。当然,如果在正式项目中使用,还得完善逻辑、添加异常处理。

*******************************udpmq.js*****************************

const udpClient = require('dgram').createSocket('udp4');
var clients= {};
 
udpClient.on('message', (message, socket) => {
   var repMsg="";
   var msgObj= JSON.parse(message.toString());
   if(msgObj["id"] !=
null) {
       if(clients[msgObj["id"]] !=
null &&clients[msgObj["id"]].length> 0) {
            repMsg = clients[msgObj["id"]].shift();
       }
   }
   else {
       var from =msgObj["from"];
       var to =msgObj["to"];
       var msg =msgObj["msg"];
 
       if(clients[to] ==
null) {
            clients[to] = new Array();
       }
       clients[to].push(message.toString());
 
       repMsg = "1";
   }
 
   var buf =
new Buffer(repMsg);
   udpClient.send(buf, 0, buf.length, socket.port, socket.address);
});
 
udpClient.bind(5555);

 

************************************************************

测试步骤:

1)       启动服务: node udpmq.js

2)       打开两个UDP测试工具,如下图。左边是发送消息(json格式),客户端 “aa”发送给”bb”,

右图是接收消息,客户端”bb”发送自己的id给消息队列服务,服务查找“bb”的消息数组,并按FIFO的方式返回“bb”一条消息。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐