根据这个答案,消息总线是一种消息基础设施,允许不同的系统通过一组共享的接口(消息总线)进行通信。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 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消