美文网首页
利用发布/订阅来避免紧耦合

利用发布/订阅来避免紧耦合

作者: MontyOak | 来源:发表于2017-07-29 09:48 被阅读100次

    发布订阅模式(pub/sub)是一种设计模式,消息发布者将消息按类别发布,不同订阅者根据自身需求去订阅所需的消息。这种设计思路主要是考虑到功能的解耦与更为动态的网络拓扑。

    对于发布者和订阅者而言,它们并不感知具体的网络拓扑,甚至不必去了解对方的存在形式。大多数情况下,会有一个中间代理人(broker)的角色来处理发布者和订阅者之间消息频道的协调工作。发布者将消息推至中间代理人处,对应的,订阅者从中间代理人处订阅消息。而中间代理人通常是一个消息队列(Message Queue),少数情况下,Redis也可以充当代理人的角色。常见的MQ有:RabbitMQ, RocketMQ,Kafka等等。

    Python中也有相关的模块(blinker, python-message等)实现了较为健全的发布/订阅功能。

    import message
    def foo(msg):
        print 'I get a message from pub:{msg}!'.format(msg=msg)
    msg.sub('msg', foo)
    msg.pub('msg', 'Eureka')
    
    #output
    I get a message from pub:Eureka!
    

    上面是一个最简单的例子。除此之外,python-massage还对订阅者支持取消订阅功能,和在上下文中进行终止消息传递的操作。内部通过队列来保证消息的全局顺序,但在sub时进行插队。

    相关文章

      网友评论

          本文标题:利用发布/订阅来避免紧耦合

          本文链接:https://www.haomeiwen.com/subject/vbuqlxtx.html