官方文档: https://www.rabbitmq.com/web-stomp.html
我这里是直接消费mq队列的消息。 也可以在服务端代码发送消息给stomp的。
第一步首先在rabbitmq 服务器启动插件: 无需重启服务器
rabbitmq-plugins enable rabbitmq_stomp
rabbitmq-plugins enable rabbitmq_web_stomp
js :
https://www.bootcdn.cn/stomp.js/
https://cdn.bootcss.com/sockjs-client/1.1.4/sockjs.js
第二步: 前端代码:
var client = null;
var mqurl = "ws://IP:15674/ws"; //端口有15674,
调用如下连接和关闭方法就行了。
//连接
function connectClient()
{
var ws = new WebSocket(mqurl);
client = Stomp.over(ws);
//连接
var on_connect = function(x)
{
console.log("连接s成功!");
// queue 代表队列, exchange代表交换机
// pdtgps:pdt:gps.pos-ksh-2 代表队列名, 会自动创建
// subscribe 接收消息
//queue 可以是队列, 也可以是exchange交换机
client.subscribe('/queue/pdtgps:pdt:gps.pos-ksh-2', function (data) {
//console.log(data.body);
//changePdtPosition 处理消息的方法名
changePdtPosition(JSON.parse(data.body));
//x-message-ttl ttl
}, {durable:true,'auto-delete':false,'x-message-ttl':30000,exclusive:false});
};
var on_error = function(err)
{
console.log("连接s错误: " + err);
}
//admin-pdt 新建的用户, 默认的是guest, pdt是虚拟空间
client.connect('admin-xx','admin-xx' , on_connect, on_error, 'pdt');
}
//关闭连接
function closeClient()
{
client.disconnect(function(){
console.log("关闭s连接!");
});
}
如图是连接成功了。 如果报错就根据报错信息解决, 默认用户为 guest, 虚拟空间 为 /
我碰到两个错误: 1: 使用其他用户没有权限, 拒绝登录。 2: 对列在mq中已存在。 队列会自动创建的。
stomp.js 134行这里会打印收到的信息。 很烦, 把这个message 去掉就好了。
参考博客:
https://blog.csdn.net/weixin_40461281/article/details/81806921
https://www.cnblogs.com/selwynHome/p/9609298.html
https://blog.csdn.net/m0_37542889/article/details/83750665