观察者模式
观察者和目标相互了解,知道彼此的存在。观察者订阅目标事件,目标发生变化后,调度观察者的更新方法。
╭─────────────╮ Fire Event ╭──────────────╮
│ │─────────────>│ │
│ Subject │ │ Observer │
│ │<─────────────│ │
╰─────────────╯ Subscribe ╰──────────────╯
发布订阅模式
发布者和订阅者都要向注册中心注册,当发布者有新动向,就通知注册中心,由注册中心统一调度订阅者注册到注册中心的调度代码。注册中心避免发布者和订阅者之间产生依赖关系
╭─────────────╮ ╭───────────────╮ Fire Event ╭──────────────╮
│ │ Publish Event │ │───────────────>│ │
│ Publisher │────────────────>│ Event Channel │ │ Subscriber │
│ │ │ │<───────────────│ │
╰─────────────╯ ╰───────────────╯ Subscribe ╰──────────────╯
eg.微服务架构中SpringCloud的服务注册与发现组件,就是典型地使用了发布订阅模式,如图所示
服务提供者和服务调用者都会向注册中心注册,服务提供者改变后,注册中心会通过Eureka Client告知服务调用者。