记录一个redis订阅发布多个系统的问题。
1.需求app后台管理发布文章,因为有多个app,每个app对应一个后台,当发布一篇文章需要同时操作多个后台,重复性工作。(想偷懒,一个后台发布文章,其他后台同步。)
2.解决思路多个app之间有一个公共的redis,利用redis的发布订阅功能。做一个文章的发布,其他app后台订阅同步数据。
3.代码实现就是利用 redis 订阅发布(伪代码)
//方法发布消息,传递文章json串
pubRedisTemplate.convertAndSend()
//监听配置
RedisMessageListenerContainer
//实现监听接口的实现类
ExpertViewListener implements MessageListener
//1.第一步就是发送新增、或者修改的文章json串
//2.第二步配置监听类
//3.第三步配置监听容器对应关系
//4.发布完对应的新增或者修改、监听类得到对应json串解析,操作数据库增加或者修改。
4.上述流程看似很简单开发完成后,发现个问题就是修改的时候是通过主键id,来修改的。各个后台数据库文章的自增id可能不一致。导致修改时候出问题。
5.解决方式,新增的时候生成一个唯一id号,新加一个唯一id字段用来存放。当订阅修改的时候,通过这个唯一的id号来修改,避免修改失败。相当于在分布式当中使用了一个唯一id。