一、问题由来

    这两天把github整理了一下,也准备开始写一些工具类以及对他们进行开源讨论。现在主要还是在学习阿里、美团、百度等公司的中间件使用和源码开发思想。学习到Arthas和Dubbo这里的时候发现有些人提的issue问题可以回答,就简单回答了一下,另外发现可以通过watch功能订阅项目。在这个阳光明媚的下午手机邮箱信息便没有停下来休息过了,认证阅读完这些订阅邮件发现一个问题,好几封邮件都是重复的。不难让人思考这些应该都是重复消息问题吧(订阅量这么大,项目又这么多,基本可以肯定是通过消息队列来发送消息进行通知的),刚好前段时间学习了下消息队列,就在这里整理一下,以及分析一下这个问题,以及解决的必要性和如何解决吧。(自己猜测的也未必正确,嘻嘻嘻)

二、为什么会出现消息重复

    有些消息队列为了支持消息的可靠性投递,会将接收到的消息先进行本地化存储,然后再发送给消费者。当消息发送失败或者网络超时等原因不确定是否发送成功,消息的状态则一直会在待发送状态(当收到消息发送成功回答之后会改变为已发送或直接删除),定时任务会不停的轮询所有的待发送消息,最终保证消息的不丢失。不过我觉得就是因为这样导致github一直给我发相同的邮件,让我的体验非常不好,最终我也取消了watch,可以说劝退了我。其实我觉得就算一两个消息丢失,在这里完全没有关系,至少比一直收到重复的消息体验要好。这里应该是因为github国内网络的原因,导致确认超时。

三、问题解决

    可以选择取消可靠性投递方案,至少让我而言体验会好好多。也可以发送消息之后等待的时间适当加长,不过这样会导致性能会有一定的下降。
    具体需要如何来怎么解决这个问题需要看公司的考虑或者需求的考虑吧。