发布-订阅消息模式

一、 订阅杂志
我们很多人都订过杂志,其过程很简单。只要告诉邮局我们所要订的杂志名、投递的地址,付了钱就OK。出版社定期会将出版的杂志交给邮局,邮局会根据订阅的列表,将杂志送达消费者手中。这样我们就可以看到每一期精彩的杂志了。

 

仔细思考一下订杂志的过程,我们会发现这样几个特点:
1、 消费者订杂志不需要直接找出版社;
2、 出版社只需要把杂志交给邮局;
3、 邮局将杂志送达消费者。
邮局在整个过程中扮演了非常重要的中转作用,在出版社和消费者相互不需要知道对方的情况下,邮局完成了杂志的投递。

二、 发布-订阅消息模式
刚刚讲了订阅杂志,下面我们会讲传统调用模式演化到发布-订阅消息模式。

有些网站在注册用户成功后发一封激活邮件,用户收到邮件后点击激活链接后才能使用该网站。一般的做法是在注册用户业务逻辑中调用发送邮件的逻辑。这样用户业务就依赖于邮件业务。如果以后改为短信激活,注册用户业务逻辑就必须修改为调用发送短信的逻辑。如果要注册后给用户加点积分,再加一段逻辑。经过多次修改,我们发现很简单的注册用户业务已经越来越复杂,越来越难以维护。相信很多开发者都会有类似痛苦的经历。

 

即使用户业务实现中对其他业务是接口依赖,也避免不了业务变化带来的依赖影响。怎么办?解耦!将注册用户业务逻辑中注册成功后的处理剥离出来。

再回头看看“订阅杂志”,如果没有邮局,出版社就必须自己将杂志送达所有消费者。这种情形就和现在的注册用户业务一样。我们发现问题了,在用户业务和其他业务之间缺少了邮局所扮角色。

我们把邮局抽象成一个管理消息的地方,叫“消息管理器”。注册用户成功后发送一个消息给消息管理器,由消息管理器转发该消息给需要处理的业务。现在,用户业务只依赖于消息管理器了,它再也不会为了注册用户成功后的其他处理而烦恼。

 

注册用户的改造就是借鉴了“订阅杂志”这样原始的模式。我们再进一步抽象,用户业务就是消息的“生产者”,它将消息发布到消息管理器。邮件业务就是消息的“消费者”,它将收到的消息进行处理。邮局可以订阅很多种杂志,杂志都是通过某种编号来区分;消息管理器也可以管理多种消息,每种消息都会有一个“主题”来区分,消费者都是通过主题来订阅的。

 

发布-订阅消息模式已经呈现在我们面前,利用它可以产生更灵活、更松散耦合的系统。

接下来,我会讲解基于该模式在本地系统和分布式系统中的应用,敬请期待!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
发布-订阅模式(Publish-Subscribe Pattern)具有以下特点和优势: 1. 解耦性:通过发布-订阅模式发布者和订阅者之间的关系被解耦。发布者不需要知道谁是订阅者,订阅者也不需要知道谁是发布者。这种解耦性使得系统中的组件可以独立地进行修改、扩展和重用。 2. 异步通信:发布-订阅模式通常采用异步通信方式,即发布者和订阅者之间不需要直接交互。这样可以提高系统的性能和响应速度,因为发布者不需要等待所有订阅者都处理完消息后才能继续执行。 3. 扩展性:发布-订阅模式支持动态添加和移除订阅者,以及新增主题和取消主题订阅的灵活性。这使得系统可以方便地进行扩展和改进,而不需要对已有的组件进行修改。 4. 消息传递机制:发布-订阅模式提供了一种灵活的消息传递机制。发布者可以将消息发送到指定的主题上,而订阅者可以选择订阅感兴趣的主题。这种机制使得系统中的不同组件可以通过消息进行通信,实现松耦合的架构。 5. 可靠性:发布-订阅模式可以提高系统的可靠性。当一个订阅者出现故障或无法处理消息时,不会影响其他订阅者的正常运行。系统可以容错地处理故障,确保消息的可靠传递。 6. 多对多通信:发布-订阅模式支持多对多的通信。一个发布者可以有多个订阅者,一个订阅者也可以订阅多个主题。这种多对多的通信方式能够满足复杂系统中不同组件之间的通信需求。 综上所述,发布-订阅模式具有解耦性、异步通信、扩展性、消息传递机制、可靠性和多对多通信等特点和优势,适用于需要实现解耦和异步通信的应用场景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值