首先在聊天室的代码中引入redis的pub/sub
这个可以点击下面的的链接来参考实现
spring boot 集成redis的发布订阅机制
先抛出结论
1.StringRedisTemplate的converAndSend()方法的第二个参数只能传byte类型的数组或者String。
2.StringRedisTemplate中的StringRedisSerializer类继承了RedisSerializer<String>这个泛型接口,只支持String类型。
1.创建消息适配器(即消息处理的方法类)

2.创建监听容器并绑定消息适配器

3.在业务代码中把需要发布到频道里的消息写进来(注意上图中红框的部分与参考的网站不同,他用的是String 在这里我想直接传Message对象 ,而后把适配器里的接收类型也换成Message,岂不是省了转成json再转回来的操作,实际上哪有这么简单)。注意这里的redisTemplate是StringRedisTemplate类。


4.开始发消息测试,报系统错误。

5.看看后台怎么说,很明显的类型转换异常,难道里面需要把message强转成String?到这里我已经意识到不能随便传类型了,但是为什么?

6.可以看到方法是可以传Object类的,我当时的理解就是所有类型应该都是可以的,反正都能向上转型成Object类。

7.别急,先定位到这个方法打个断点,进去看看里面是什么(当时我也在担心里面会不会有一堆弯弯绕绕的东西把自己搞晕,不过先看了再说)

8.按F5进这个方法看实现(这里我用的是eclipse,不同IDE可能快捷键不同),很明显需要把message转成byte[]数组,上面说的是Message的转型错误 一路F6下来到这一行 再F5进去看看是什么

9.rawValue又return了个叫serialize的方法,这是个RedisSerializer类对象,听名字就知道跟序列化有关系,进去看看


10.String泛型的接口的实现类,也就是说这个接口的实现类传的参数只能是String,往下找到方法

11.应该是就到这一步,发现需要传的参数是String,而我传了一个自己创的实体类,Message对象,他自动强转成String类型失败,导致报错。

13.把方法中传的参数改成Message的json字符串,问题得以解决。
