springboot集成redis实现消息发布订阅模式-双通道(跨多服务器)

基础配置参考
https://blog.csdn.net/llll234/article/details/80966952

 

查看了基础配置那么会遇到一下几个问题:

1.实际应用中可能会订阅多个通道,而一下这种写法不太通用
container.addMessageListener(listenerAdapter(new RedisPmpSub()),new PatternTopic("pmp"));

2.使用过程中使用new RedisPmpSub()配置消息接收对象会有问题。
如果RedisPmpSub既是消息接收类,也是消息处理类。那么如果此时需要注入Bean,会成功吗?

3.考虑后期的扩展性是否能尽量不改变原有代码的基础上,进行扩展

发布者 枚举定义

考虑到可维护性,采用枚举的方式定义管道RedisChannelEnums

1 public enum RedisChannelEnums { 2 3 /**redis频道code定义 需要与发布者一致*/ 4 LIVE_INFO_CHANGE("LIVE_INFO_CHANGE","直播信息改变"), 5 6 ; 7 /** 枚举定义+描述 */ 8 private String code; 9 private String description; 10 11 RedisChannelEnums(String code, String description) { 12 this.code = code; 13 this.description = description; 14 } 15 16 17 /** 根据code获取对应的枚举对象 */ 18 public static RedisChannelEnums getEnum(String code) { 19 RedisChannelEnums[] values = RedisChannelEnums.values(); 20 if (null != code && values.length > 0) { 21 for (RedisChannelEnums value : values) { 22 if (value.code == code) { 23 return value; 24 } 25 } 26 } 27 return null; 28 } 29 30 /** 该code在枚举列表code属性是否存在 */ 31 public static boolean containsCode(String code) { 32 RedisChannelEnums anEnum = getEnum(code); 33 return anEnum != null; 34 } 35 36 /** 判断code与枚举中的code是否相同 */ 37 public static boolean equals(String code, RedisChannelEnums calendarSourceEnum) { 38 return calendarSourceEnum.code == code; 39 } 40 41 42 public String getCode() { 43 return code; 44 } 45 46 public String getDescription() { 47 return description; 48 } 49 50 51 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfgyg.html