阿里云RocketMQ的订阅类Subscription的HashCode及Equals的设计问题

题外话

设计并实现了一个消息投递平台,可以实现对不同业务场景的消息进行订阅,并将这些接收的消息根据业务场景需要,将其转投递到外部的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有关:

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值