默认

rabbitmq 貌似一段时间后 会断开跟MobileIMSDK主服务器的连接

查看数: 40940 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-09-09 17:09

正文摘要:

JackJiang ,你好,现在碰到一个问题,查了很多资料没有解决,恳请帮忙看下,不甚感激 我们用了你的web版im服务器和MobileIMSDK主服务器通过rabbitmq进行通信。 现在发现一个问题。MobileIMSDK主服务器运行一段时 ...

评论

963536541 发表于 5 年前
问题解决了,分享一下:

boolean autoAck = false;
resumeChannel.basicQos(1);//加这句就行了
resumeChannel.basicConsume(queueName, autoAck,dc);

不加resumeChannel.basicQos(1);的话 ,一段时间后消费者会收不到消息,要重启,亲测过
963536541 发表于 5 年前
好的。先谢谢了
JackJiang 发表于 5 年前
引用:963536541 发表于 2018-09-09 20:15
那段代码是我蛮加上去的也没什么用。
我是看rabbitmq上面 ready状态的还有56个,但是提示一个消费者都没有 ...

我给你的最佳建议就是:
想尽办法抓到你所观察到的与mq断开连接之前、之后的异常log(你说没有异常信息,那是不可能的,一定会有,没抓到意味着你观察的还不够仔细)。

替代方案就是:
实在不行,你可以写一个守护线程,隔个半分钟或1分钟,向mq队列中放入一条心跳消息(消费者那边读到这个消息心跳的消息类型就扔掉就行了),因为隔这么长时间就一条心跳消息而已,所以性能上等方方面面也没有什么额外的开销,可以忽略不计,在问题找出来之前也算是一个可以接受的方案。
963536541 发表于 5 年前
那段代码是我蛮加上去的也没什么用。
我是看rabbitmq上面 ready状态的还有56个,但是提示一个消费者都没有了。重启后消费者为1
还有什么办法可以跟踪的吗
JackJiang 发表于 5 年前
引用:963536541 发表于 2018-09-09 18:38
我之前就已经做了这个工作,但是没有异常抛出啊,日志里面都没有记录到
我这个问题就是,启动后可能几十 ...

没有异常抛出,那你怎么知道或说它断开了?另外,你贴这段代码是要说明什么吗,这是你自已写的吧,有什么作用?
963536541 发表于 5 年前
im主服务器其他部分都是正常的,包括用户离在线什么的 都正常,就是rabbitmq这块 没连上状态了
JackJiang 发表于 5 年前
不用着急,我来引导你排查问题。

你所遇到的问题,其他客户都没有遇到,是有点费解了。不过,你按照我的思路,来排查问题,应该能找出原因。

首先:MobileIMSDK的RabbitMQ的消费者这边,使用的是RabbitMQ官方的连接库,是每隔30秒有心跳检查的。

所以:如果连接跟RabbitMQ断开,则MobileIMSDK是一定会有异常抛出。

那么:为了抓出有价值的异常信息,建议你服务端什么事也不会,把服务端开着,就等着这个异常发生,然后把这个异常发生的前后10分钟左右的所有日志全部抓出来(一定要完整!)

你抓出完整log后,我来帮你分析分析!

返回顶部