websocket连接activemq指定连接名

如果使用浏览器连接activemq,那么大家会用到websocket技术以及stomp协议,具体的连接操作以及各种详细解释,在下面的网站中,是stomp协议的官方介绍。

链接:github上的官方文档 链接:websocket-stomp的使用

大家都是知道,stomp协议就是对websocket的封装使用。

使用stomp时,使用client.connect()方法连接到activemq,但是该方法并不能指定连接名或者其他参数,它没有重载方法,他的第一个参数一定是登录名,第二个参数一定是密码,第三个是连接成功后的回调函数,第四个是连接失败后的回调函数,第五个是连接的虚拟主机名。

前端连接activemq推送消息 activemq web_连接失败


这样我们就根本无法加其他的连接头,比如连接名。笔者也试过其他方法,比如使用_transmit(command, headers, body)这个方法,这个方法就是发送数据帧的方法,第一个参数是指定这个帧的类型,第二个是消息头,第三个是消息体。但是这个方法不可以。

因为stomp是对websocket的一个封装使用,本质上还是通过websocket发送帧到消息队列上,websocket的各种回调函数绑定都是在connect方法中,比如onopen、onMessage等方法,如果我们不调用connect法法,那么根本就使用不了stomp协议。

笔者的解决方法是修改源码。

前端连接activemq推送消息 activemq web_前端连接activemq推送消息_02


Client.prototype._parseConnect = function() {
 var args, connectCallback, errorCallback, headers;
 args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
 headers = {};
 switch (args.length) {
 case 2:
 headers = args[0], connectCallback = args[1];
 break;
 case 3:
 if (args[1] instanceof Function) {
 headers = args[0], connectCallback = args[1], errorCallback = args[2];
 } else {
 headers.login = args[0], headers.passcode = args[1], connectCallback = args[2];
 }
 break;
 case 4:
 headers.login = args[0], headers.passcode = args[1], connectCallback = args[2], errorCallback = args[3];
 break;
 default:
 headers.login = args[0], headers.passcode = args[1], connectCallback = args[2], errorCallback = args[3], headers.host = args[4];
 }
 /-------------------------------/
 /* 第一个参数为header,第二个为连接成功后的回调函数,第三个为连接失败后的回调函数,最后一个为主机名 /
 headers=args[0];
 cnotallow=args[1];
 errorCallback=args[2];
 headers.host=args[3];
 /------------------------------*/
 return [headers, connectCallback, errorCallback];
 };

在parseConnect 方法中,修改源码。使得connect方法的第一个参数,就是消息头。这样就可以传入一个json对象,表示一个消息头,这个json对象中就可以放连接名以及这种消息头。

可以使用的消息头,需要到activemq的官网去查看,爷看过一次就忘了具体在官网哪个地方看到的了,就不贴网址了^ _ ^ ,你们慢慢找,找到了回复爷。