我tomcat 已经删掉 appBase="webapps" 也重启了服务器 运行之后 rabbitmq有五条链接,,,web给app发消息 收一条丢一条。。怎么解 |
遇到同样问题,查半天,发现是tomcat配置问题,导致实例被加载两次 配置虚拟目录引起,如下配置: <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="d:\myapp"/> </Host> 我们在Host标签里配置了appBase="webapps",tomcat会去加载一次应用。 在<Context>里配置了一次docBase,tomcat会又去加载一次引用。 导致项目会加载二次。 解决: <Host name="localhost" debug="0" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="d:\myapp"/> </Host> 去掉appBase="webapps"即可! |
引用:sanzhimayi 发表于 2019-04-14 16:18 你理解了问题的原因,并解决了问题,是个好消息。 但是就像你图中截的这样,按MQ中的连接数来判定,这就涉及到具体的技术细节,除非对技术实现很了解,不然这个还是不能第一眼就能看出问题所在。比如下图中,RainbowChat和RainbowChat-Web互通时,正常情况下一共4个MQ连接。但重复运行的实例是加了一个还是2个,这个普通开发者不了解具体的实现细节的话,看这里的连接数其实也没多大的参考性。 |
引用:sanzhimayi 发表于 2019-04-13 18:11 这是mq的技术细节,你不用管这此。你只要自已心里清楚,不要多个实例同时跑就行了。一切一实际运行情况为准。记得及时反馈。但前提是,你要理解我在3楼写的是什么意思 |
好了,这个现实很有趣,但原因很简单:就是你的服务器环境下,可能同一个服务端可能还运行了另外的实例忘记了关闭(因为不只你一个人出现过这样的疏忽。。。。)。 很容易排查:就是把所有服务端关闭(最好是把物理服务器重启),然后确保只打开了唯一一个APP服务端、和唯一一个Web服务端。 交替出现收不到消息的原因是:如果同一个服务端存在两个或多个实例在运行的话,因为它们内部在MQ的消费者代码,所以交替从MQ里拿到了消息,而对于客户端而言,它只能实时收到它当前所登陆的实例的消息(另一个实例的消息就进入了离线逻辑了)。 你仔细体会一下我上面的回复,然后,按照我的说的,来排查。你及时反馈结果哦! |
这个现象退出app后重新登陆就会受到之前丢掉的消息 做了离线处理了 |