我已经通过this启用了RabbitMQ的Web-Stomp插件,因为我们需要通过WebSockets实现STOMP,并且它可以工作。现在我需要的是一个Nginx服务器作为我的RabbtMQ服务器前面的反向代理。 以下是Nginx服务器的配置部分。
http {
upstrem websocket {
# this is the actual rabbitmq server address
server 15.15.181.73:15674
}
server {
# the nginx server addres is 15.15.182.108
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
location /ws/ {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection upgrade;
}
}
}
这是用于访问服务器的JavaScript代码
var WebSocket = require('ws');
var Stomp = require('stompjs');
var ws = new WebSocket('ws://15.15.182.108/ws', {
protocolVersion: 8,
origin: 'http://15.15.182.108/ws',
rejectUnauthorized: false
});
var client = Stomp.over(ws);
var on_connect = function(){
client.send("/queue/test", {priority: 9}, "Hello, STOMP for /queue/test");
};
var on_error = function(error){
console.log("error");
console.log(error.headers.message);
};
client.connect('test','test',on_connect,on_error,'/');
现在让我感到困惑的是,如果我需要通过Websockets访问rabbitmq服务器,那么我应该在ip地址后附加/ws
,如果我直接访问它,它就可以工作。但是,我似乎无法将/ws
放在Nginx配置文件中的IP地址之后的upstream
部分中。那么,如果我需要做这项工作,我该怎么办?感谢。
答案 0 :(得分:1)
您可以尝试nginx stomp,它支持Rabbit mq等。它是nginx模块
# nginx.conf
server {
....
location /sendqueue {
stomp_pass stomp;
stomp_command SEND;
stomp_headers "destination:/amq/queue/stompqueue
persistent:false
content-type:text/plain
content-length:38";
stomp_body "This is new message sending from stomp";
}
}
答案 1 :(得分:0)
我不确定这是否有帮助,但是您已经附加的片段拼错了上游。
upstrem websocket {
# this is the actual rabbitmq server address
server 15.15.181.73:15674
}
应该是:
upstream websocket {
# this is the actual rabbitmq server address
server 15.15.181.73:15674
}
快乐的编码!