引用:JackJiang 发表于 2018-05-31 17:05 好吧,我再好好查查。感谢你的耐心指导,有问题再麻烦您。 |
引用:350933415 发表于 2018-05-31 16:30 好了,既然服务端没有丢,那是在哪个环节丢的,该看接收端的Log了。你按我的思路就这么排查,一定能找出个合理的解释。不管哪种网络系统,消息都不会凭空丢失,一定是在哪个环节出了状况,找出这个状况就能解决问题。需要的是耐心,不要慌,也不要急噪,欲速则不达 |
引用:JackJiang 发表于 2018-05-31 16:17 好的,受教了! 消息过来之后,如果app在线是收到消息,没有丢。 |
引用:350933415 发表于 2018-05-31 16:02 你还是没有理解我回复这么多的目的,我要让你理解的是,消息到底去哪里了,需要一个环节一个环节来核对,就像你这里的描述一样,你仍然没弄明白消息去哪了,这也是你没掌握排错方法的原因。 我要告诉你的排错方法,就是一个环节一节环节的排查,搞网络通信系统就是这样,因为环节太多。所以你先不管你app手机端的表现,现在你只要告诉我,一条消息过来,当app在线的时候,APP 服务端这边这条消息去哪里了?你只需要回答我:丢了?还是没有丢? 先解决我的疑问!(不需要管收机端有没有收到,只要保证能到app server这端就可以,下一个环节是下一个环节要排查的内容,先不用纠结) |
引用:JackJiang 发表于 2018-05-31 15:52 当时app是在线的,我一直没动app,只是保持手机一直点亮防止进入后台导致离线。连续发送的消息,一直都是收到1条,接下来2条收不到,循环反复。这个时候如果app离线,那也不应该之后会收到消息啊。总不会收到1条后自己离线然后再2条再次自己上线吧。。。。而且,还发生了我从app发送一条消息,web同时收到3条一样的消息,fp一样的,消息体也是一模一样。重复消息没一直重现,昨天出现的,后来又好了。 |
引用:350933415 发表于 2018-05-31 15:42 好了,我们来理一下思路,代码走到这里了,是不是意味着消息没有丢,已经被你app server的代码接管对不? 好,上面对web 到app的离线消息没有异议,也没有丢。那就接做在线的情况,把app server和你的app都打开。照着上面的样子,在app这边看一条消息到哪里了,能理解我上面引导你做这些的原因吗。。。 |
引用:350933415 发表于 2018-05-31 15:13 3个连接那个你不用管,对于RabhitMQ的客户端lib或RabbitMQ服务端来说,应该是存在一个复用的连接池的概念。 你的Log里,没看到明显的空指针异常吗,丢消息基本上就是这个原因了,去看看197行的代码,为什么空指针! |
引用:350933415 发表于 2018-05-31 10:57 好,这至少证明web server -> MQ 这个方向,消息是肯定没有丢的,对吧。 那就接着下一步,先把Web Server关掉,再把APP Server打开,看看这几条消息有没有到APP Server这边(一条一条对APP Server这边的MQ消费者打出来的log!)。 |
我看你在qq上跟我聊的,思路比较混乱,追踪问题不够严谨,所以,请照我2楼的回复:先确保你每一条消都已经进入了MQ!然后再说下一步的事,不要跳着玩,否则永远也找不出问题的 |
我觉得你把问题搞复杂了,实际的使用没你这么复杂,你截图上的东西没碰到过,其它客户也一样。 我认为你有必要根据手册,把MQ的配置,以及代码中连接MQ的URL都对着手册再对一遍,注意细节。 我给你看一个商业项目中的配置情况,以web服务端为例(比如这个项目中新建了一个名为js的管理员账号): 这个账号是不是能管理,以能不能登陆进RabbitMQ的后台管理页面为准(不是管理员肯定登不进去) 下一步,就是配置你的Web server中连接MQ的URL(使用刚才这个账号): 1、2、3分别是你这台MQ的连接用户名、密码、ip地址 上一步完成,Web Server中的MQ连接就配好了,不需要任何其它额外的配置,MQ中除了建一个管理员账号外也不需要任何额外配置,就这么简单。 好了,那么我如何跟踪消息到哪了呢?我们继续往下说。。。。。。。 按照我说的步骤来: 第一步:先把APP server关掉; 第二步:在web这边发一条消息,看看消息是否已经进入MQ,MQ中如何查看这条消息是否已存在,如下图所示: (很简单,进入这个队列,点击“get messages”即可看到队列中的消息,注意get的消息数量(默认是1,即只get最新1条消息,你可以改多一点)) 综上:我给你的建议是,先对着我的截图,代码中配置好你连接的mq url,然后再看看你发的每一条消息是否已进入MQ!(注意:现在还不需要管APP那边,先把APP server给关掉!) |