为了账号安全,请及时绑定邮箱和手机立即绑定

这是基于消息总线的发布-订阅模式吗?

这是基于消息总线的发布-订阅模式吗?

Go
MM们 2022-06-06 17:41:41
根据这个答案,消息总线是一种消息基础设施,允许不同的系统通过一组共享的接口(消息总线)进行通信。type PubHub struct {    subscribers map[*subscriptionmediator.HandlerSubscription]struct{}    Register    chan *subscriptionmediator.HandlerSubscription    Unregister  chan *subscriptionmediator.HandlerSubscription    Broadcast   chan *events.Env}func createHub() *PubHub {    return &PubHub{        subscribers: map[*subscriptionmediator.HandlerSubscription]struct{}{},        Register:    make(chan *subscriptionmediator.HandlerSubscription),        Unregister:  make(chan *subscriptionmediator.HandlerSubscription),        Broadcast:   make(chan *events.Envelope),    }}func (h *PubHub) Run() {    for {        select {        case subscriber := <-h.Register:            h.subscribers[subscriber] = struct{}{}        case subscriber := <-h.Unregister:            if _, ok := h.subscribers[subscriber]; ok {                delete(h.subscribers, subscriber)            }        case message := <-h.Broadcast:            for subscriber := range h.subscribers {                subscriber.DataChannel <- message            }        }    }}每个订阅者注册的地方,如下图:    subscription := &subscriptionmediator.HandlerSubscription{        conn,        make(chan *events.Envelope),    }    hub.Register <- subscriptionDataChannel用于发布者和多个订阅者之间的通信type HandlerSubscription struct {    ConnInstance *websocket.Conn    DataChannel  chan *events.Envelope}1) 上面的代码可以考虑遵循基于消息总线的发布-订阅模式吗?2)如何避免一个订阅者阻止所有订阅者在频道上发信号?subscriber.DataChannel <- message以下是创建消息中心以将发布者与多个订阅者通信的createHub()函数和Run()方法:main()
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

上面的代码可以考虑遵循基于消息总线的发布-订阅模式吗?

是的。


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号