vue3连接rabbitmq做实时推送消息。rabbitmq使用了apache服务器做代理,项目运行在本地可以连接成功,部署到服务器上连接失败。
运行在本地可以正常连接。感觉像是服务器代理没做好
如有问题及时沟通
如有帮助欢迎采纳
【相关推荐】
// 绑定交换机:exchange_pushmsg是交换机的名字;rk_pushmsg是绑定的路由key
// exchange_pushmsg就是我们制定的快递员,rk_pushmsg就是让快递员快递东西的地址
var exchange = "/exchange/exchange_pushmsg/rk_pushmsg";
//创建随机队列用上面的路由key绑定交换机,放入收到消息后的回调函数和失败的回调函数
this.client.subscribe(exchange, this.responseCallback, this.onFailed);
console.log(frame)
this.client.send("/exchange/exchange_pushmsg/rk_recivemsg", {"content-type":"text/plain"}, frame.body);
import Stomp from 'stompjs'
export default {
name: 'messageNotice',
data () {
return {
client: null
}
},
created() {
//初始化连接
this.connect();
},
methods: {
//webSocket连接成功后回调函数
onConnected(frame) {
console.log("Connected: " + frame);
// 绑定交换机:exchange_pushmsg是交换机的名字;rk_pushmsg是绑定的路由key
// exchange_pushmsg就是我们制定的快递员,rk_pushmsg就是让快递员快递东西的地址
var exchange = "/exchange/exchange_pushmsg/rk_pushmsg";
//创建随机队列用上面的路由key绑定交换机,放入收到消息后的回调函数和失败的回调函数
this.client.subscribe(exchange, this.responseCallback, this.onFailed);
console.log(frame)
},
onFailed(frame) {
console.log("Failed: " + frame);
},
responseCallback(frame) {
console.log("得到的消息 msg=>" + frame.body);
console.log(frame)
//接收到服务器推送消息,向服务器定义的接收消息routekey路由rk_recivemsg发送确认消息
// 这句话是往交换机发送信息,对应快递员exchange_pushmsg,对应地址rk_recivemsg
this.client.send("/exchange/exchange_pushmsg/rk_recivemsg", {"content-type":"text/plain"}, frame.body);
},
connect() {
//这里填你rabbitMQ的连接ip地址直接替换localhost:15674就好其它的不用改
this.client= Stomp.client("ws://localhost:15674/ws")
//填写你rabbitMQ登录的用户名和密码
var headers = {
"login": "admin",
"passcode": "admin",
//虚拟主机,默认“/”
"host": "/"
};
//创建连接,放入连接成功和失败回调函数
this.client.connect(headers, this.onConnected, this.onFailed);
},
}
服务器要做转发配置
🔋 问题分析:
1、防火墙或代理问题:防火墙或代理设置可能会阻止 WebSocket 连接。检查下防火墙,关了它,另外可以使用命令看看网络连接是否正常:
telnet 192.168.101.116 10009
如果网络正常:你是不是用了nginx做了转发?
如果使用Nginx代理后端服务器处理请求,看看Nginx设置了proxy_read_timeout 这个参数值是多少?
(这个参数代表-连接成功后,等候后端服务器响应时间),这个参数会导致websocket连接后没有得到后端返回,从而timeout断开连接。
你可以通过在Nginx配置文件中的location块内设置proxy_read_timeout来修改该值。例如:
location / {
proxy_pass http://backend;
proxy_read_timeout 60s; // 设置为60秒
}
这样会将proxy_read_timeout设置为60秒。你可以根据需要调整超时时间。默认情况下,该值是60秒。
本地时因为你做了代理, 打包之后部署了是不会走代理的,所以你的请求地址要直接请求你所代理的地址
vue使用AMQP协议的Rabbit发送消息直接报错 TypeError: webpack_require(...).connect is not a function
问题可能出在服务器上的网络配置或代理设置上。确保你的服务器能够与RabbitMQ服务器正常连接。可以尝试在服务器上直接配置RabbitMQ,而不是通过代理服务器进行连接。
检查代理服务器的网络地址、端口号以及任何必要的身份验证信息是否正确。
检查服务器上的防火墙设置,确保RabbitMQ服务器和代理服务器之间的通信没有被阻止。