消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到MQ中而不用管谁来取,消息使用者只管从MQ中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。
消息队列的使用场景异步处理
应用解耦
流量削峰
使用nodejs+UDP实现一个简单的消息队列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);
测试步骤:
启动服务: node udpmq.js
打开两个UDP测试工具,如下图。左边是发送消息(json格式),客户端 “aa”发送给”bb”,
右图是接收消息,客户端”bb”发送自己的id给消息队列服务,服务查找“bb”的消息数组,并按FIFO的方式返回“bb”一条消息。
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。