vue3连接rabbitmq做实时推送消息。报连接失败

vue3连接rabbitmq做实时推送消息。rabbitmq使用了apache服务器做代理,项目运行在本地可以连接成功,部署到服务器上连接失败。

img


项目运行在本地的,连接成功

img


打包部署到服务器上连接失败。
使用的是apache服务器代理rabbitmq地址的。

img


img

运行在本地可以正常连接。感觉像是服务器代理没做好

解决方法

  • 1、确保对应端口和防火墙开放
  • 2、看下RabbitMQ是否远程配置了 127.0.0.1 修改为 0.0.0.0

如有问题及时沟通
如有帮助欢迎采纳

【相关推荐】



  • 你可以看下这个问题的回答https://ask.csdn.net/questions/709835
  • 这篇博客也不错, 你可以看下Vue 连接rabbitmq实现消息实时通信
  • 除此之外, 这篇博客: 手撸一个一起看电影应用-3-Vue前端信息收发中的 vue页面接通RabbitMQ的信息收发 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 前端监听接收交换机的信息
    // 绑定交换机: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连接失败_普通网友的博客-CSDN博客 今天刚开始学习RabbitMQ,单机远程连接时出现这种错误,是因为当前连接的用户没有Virtual Hosts的访问权限,可以在管理页面配置一下。首先判断Can access virtual hosts下的状态,如若是Noaccess点击红色字体进行配置选择Virtual Host–Set permission就配置完成。如果下拉没有其他虚拟机选项,只有/, 说明没有添加Virtual Hosts,需要手动添加Admin-Virtual Hosts-Add配置完后就可以正常连接。..._rabbitmq连接失败 https://blog.csdn.net/m0_67401660/article/details/124013502

问题可能出在服务器上的网络配置或代理设置上。确保你的服务器能够与RabbitMQ服务器正常连接。可以尝试在服务器上直接配置RabbitMQ,而不是通过代理服务器进行连接。
检查代理服务器的网络地址、端口号以及任何必要的身份验证信息是否正确。
检查服务器上的防火墙设置,确保RabbitMQ服务器和代理服务器之间的通信没有被阻止。