gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:42:34 27 4
gpt4 key购买 nike

据此answer ,

A Message Bus is a messaging infrastructure to allow different systems to communicate through a shared set of interfaces(message bus).



/image/5PkJy.gif

以下是 createHub()功能 & Run() main() 发起的方法创建消息中心以将发布者与多个订阅者进行通信:
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 <- subscription
DataChannel用于发布者和多个订阅者之间的通信
type HandlerSubscription struct {
ConnInstance *websocket.Conn
DataChannel chan *events.Envelope
}

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

2)如何避免一个订阅者阻止所有订阅者在 channel 上发信号? subscriber.DataChannel <- message

最佳答案

Can the above code be considered following message bus based pub-sub pattern?



是的。

关于go - 这是基于消息总线的发布-订阅模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62165129/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com