最近这一阵子一直在研究activemq的使用,发现也是支持stomp协议的,之前在研究小程序websocket的时候,发现我们可以使用stomp.js配合小程序的websocket也是可以和服务器实现stomp协议通讯,那么我们能不能使用小程序通过stomp.js来操作activemq呢?答案当然是可以的。下面我们就介绍一下如何让微信小程序通过stomp协议来操作activemq。
1,新建小程序项目
2,下载stomp.js,下载完成之后,我们把它发到我们小程序utils目录下。
3、在app.js的onLaunch方法添加组后添加下面的代码。
//socket是否连接
var socketConnected = false;
//待发送的消息队列
var messageQueue = [];
//是否断线重连
var reconnect = true;
//发送消息
function sendSocketMessage(msg) {
// console.log(msg);
// 如果socket已连接则发送消息
if (socketConnected) {
wx.sendSocketMessage({
data: msg
})
} else {
// socket没有连接将消息放入队列中
messageQueue.push(msg);
}
}
// 关闭连接
function close() {
if (socketConnected) {
wx.closeSocket()
}
}
// 定义一个符合WebSocket定义的对象
var ws = {
send: sendSocketMessage,
close: close
}
// 创建一个 WebSocket 连接
function connect() {
wx.connectSocket({
url: 'ws://127.0.0.1:61614/stomp', // activemq的ws端口
protocols: ['stomp'] //指明协议类型,这里很重要,否则客户端会因为报文头缺少协议信息拒绝连接
})
}
connect();
// 监听 WebSocket 连接打开事件
wx.onSocketOpen(function (res) {
console.log("WebSocket 连接成功")
socketConnected = true;
ws.onopen();
// 连接成功后,将队列中的消息发送出去
let queueLength = messageQueue.length
for (let i = 0; i < queueLength; i++) {
const messageQueueElement = messageQueue.shift();
wx.sendSocketMessage({
data: messageQueueElement
})
}
})
// 监听 WebSocket 接受到服务器的消息事件
wx.onSocketMessage(function (res) {
ws.onmessage(res);
})
// 监听 WebSocket 错误事件
wx.onSocketError(function (res) {
console.log("WebSocket 错误事件")
})
// 监听 WebSocket 连接关闭事件
wx.onSocketClose(function (res) {
console.log("WebSocket 连接关闭")
socketConnected = false;
// 断线重连
if (reconnect) {
connect();
}
})
var Stomp = require('/utils/stomp.js').Stomp;
/**
* 定期发送心跳或检测服务器心跳
* The heart-beating is using window.setInterval() to regularly send heart-beats and/or check server heart-beats.
* 可看stomp.js的源码(195,207,489行),由于小程序没有window对象,所以我们要调用小程序的定时器api实现
*/
Stomp.setInterval = function (interval, f) {
return setInterval(f, interval);
};
// 结束定时器的循环调用
Stomp.clearInterval = function (id) {
return clearInterval(id);
};
var stompClient = Stomp.over(ws);
stompClient.connect("guest", "guest", function () {
console.log("************************")
stompClient.subscribe("/queue/tttt", function (message) { //订阅一条消息
console.log(message.body);
});
});
stompClient.send("/queue/test",{},"111111") // 发布一条消息到activemq
上面的代码,我们通过小程序的websocket接口定义了符合ws定义的对象,然后通过stomp.js的over方法创建了一个stomp客户端,上面的注释有些细节需要注意一下。
4.运行小程序,我们登录activemq管理界面,我们可以看到,我们发布和订阅的信息已经可以看到了。
5.我们通过管理界面自带的send功能,给我们订阅的/queue/test发布一条消息。
回到小程序,我们可以看到小程序收到了我们发布的消息。
写完收工。