利用redis的pub/sub功能解耦两个应用

作者:liuguobing   阅读 (4802)  |  收藏 (0)  |  点赞 (0)

摘要

从学习编程方法时就了解到解耦的重要性,也学习了一些解耦的技巧,但那仅限于同应用,不同应用的解耦就可以借助消息中间件了


原文链接:利用redis的pub/sub功能解耦两个应用

    有时候我们系统会有多个应用,在某些功能实现上会进行交互,传统的方式是通过lpc或者rpc来调用对方,但这样一方面需要给两个应用都添加一些rpc接口,rpc实现起来本身就很复杂,涂白增添难度,另外因为两个应用通过rpc交互就需要有一个比较固定的接口,造成耦合度较高,而如果利用消息中间件来处理就很容易了。

    市场上很多成熟的消息中间件,但都太重,安装配置都比较繁杂,其实针对一些仅仅只是为了解耦合而使用,redis其实就够用了。现在很多应用都集成了redis,所以用它也不需要额外在添加什么配置什么。

    我目前就有这样的一个情况,我的一个网站后期我又重新改写了一个,换了语言换了框架,但有个功能实现起来较复杂,不想重新去写,就交给旧版本处理,我就想到了redis的pub/sub,redis使用起来很容易方便,讲一下spring data redis怎么去配置subscribe,publish很容易,大部分框架都有这个方法,直接client去调用这个方法就行。

    subscribe就是去消费特定topic的消息,这样的东西往往就是使用轮询方式不断地去检查有没有新消息,所以自然用到了多线程的东西,自己写起来还是有点复杂的,还好在spring data redis中不算复杂。spring date redis官方的文档写了配置方式,但那是基于xml文件的,有一个redis的tag,不完全都是bean,这样的就是特殊处理过的,所以使用annotation方式不是很容易,但经过我摸索,只需要配置一个RedisMessageListenerContainer即可,然后在这里对需要处理的消息来处理,container有一个addMessageListener,接受的是一个MessageListener,和Topic(注意下Topic如果是匿名内部类我测试是失败了,改用了ChannelTopic)。

分类   默认分组
字数   810

博客标签    redis   pub/sub  

评论