题外话
设计并实现了一个消息投递平台,可以实现对不同业务场景的消息进行订阅,并将这些接收的消息根据业务场景需要,将其转投递到外部的ES、RocketMQ、Get API、Post API以及Spring Cloud类型的API,让应用以最小的接入及改造成本,实现应用的解耦。
问题
本次发现的问题为源消息中间为阿里云的RocketMQ,当我们在针对同一个Topic的不同Tag进行消息订阅的时候,发现最终都只能够订阅一个Tag,其它Tag的消息不能够订阅,以下代码是组装消息订阅的Map实现:

如此时config对像中包括了两个记录,他们的Topic名称都相同,只是Tag不同,但是最终生成的Map<Subscription,MessageListener>却只有一条记录,跟踪其原因发现问题出现在对像com.aliyun.openservices.ons.api.bean.Subscription的Hashcode的设计实现,如下所示:

其Hashcode的生成只与topic有关,与tag没有一毛钱的关系,这就是为什么针对相同的Topic订单不同的tag时,只最终只能够订阅一个tag的原因。
Subscription的equals()方法也只与topic有关:

最低0.47元/天 解锁文章
2308





