单线程

四季春风,不厌冬

  1. 观察者模式
  2. 订阅/发布模式

  无意间被问到一个问题:订阅/发布 用的是观察者模式,什么是观察者模式?

  我把这个问题分为两个问题:
1. 什么是观察者模式?
2. 什么是订阅/发布?

观察者模式

  假设有两个服务A和B,为了完成某项功能,A需要调用B服务执行,执行完成之后,B告知A上述操作的结果。在观察者模式中,设计如下:

观察者模式

  不难看出,服务A和B相互依赖!

订阅/发布模式

  订阅/发布模式不在经典的23种设计模式当中,但凡高度抽象的设计即可称为模式。订阅/发布根据观察者模式变形而来,但是发布方与订阅方互不依赖,两者通过调度层解耦,设计如下:

订阅/发布模式

  消息队列就是这种模式,producer生产某个topic的消息,consumer消费指定topic的消息。
  
  甚至可以在A服务中自定义一个队列,该队列存储B、C、D……服务提供的HTTP接口,当A服务发生某项变更时,由A服务循环调用队列,向这些服务发送请求。这个例子中的队列实则为注册器,只要注册过的服务都会收到消息,可以通过配置中心的形式实现注册器,这样就不必让A服务重启。

本文作者 : pengqin.zhou
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://www.zhoupq.com/blog/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F%EF%BC%8C%E7%9C%9F%E7%9A%84%E5%AE%9E%E7%94%A8%E5%90%97%EF%BC%9F/

本文最后更新于 天前,文中所描述的信息可能已发生改变