首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局EventBus in GoLang

全局EventBus in GoLang
EN

Stack Overflow用户
提问于 2022-04-24 10:29:13
回答 1查看 297关注 0票数 1

我试着学习GO,在这样做的过程中尝试不同的概念。现在,我正在尝试一种PubSub方法,但在应用程序中。我有一个EventBus,并试图通过依赖项注入传递实例。但是,当我运行应用程序时,什么都不会发生。

main

代码语言:javascript
复制
package main

import (
    "github.com/asaskevich/EventBus"
    modelA "interfaces/internal/modelA"
    modelB "interfaces/internal/modelB"
)

func main() {
    bus := EventBus.New()

    a := &modelA.Bus{EventBus: bus}
    a.Send()

    b := &modelB.Bus{
        EventBus: bus,
    }
    b.Receive()

}

内部/模型a

代码语言:javascript
复制
package modelA

import (
    "fmt"
    "github.com/asaskevich/EventBus"
)

type Bus struct {
    EventBus EventBus.Bus
}

type ModelAService interface {
    Run()
    Send()
}

func calculator(a int, b int) {
    fmt.Printf("ModelA "+"%d\n", a+b)
}

func (bus *Bus) Receive() {
    err := bus.EventBus.Subscribe("testMessageFromB", calculator)
    if err != nil {
        fmt.Printf("Error Receiving message...")
    }
}

func (bus *Bus) Send() {
    bus.EventBus.Publish("testMessageFromA", 33, 33)
}

内部/模式B

代码语言:javascript
复制
package modelB

import (
    "fmt"
    "github.com/asaskevich/EventBus"
)

type Bus struct {
    EventBus EventBus.Bus
}

type ModelBService interface {
    Run()
    Send()
}

func calculator(a int, b int) {
    fmt.Printf("ModelB "+"%d\n", a+b)
}

func (bus *Bus) Receive() {
    err := bus.EventBus.Subscribe("testMessageFromA", calculator)
    if err != nil {
        fmt.Printf("Error Receiving message...")
    }
}

func (bus *Bus) Send() {
    bus.EventBus.Publish("testMessageFromB", 33, 60)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-24 11:03:56

您需要首先订阅一个主题的。

然后发布(执行为主题定义的回调)。

试着做这样的事情:

代码语言:javascript
复制
func main() {
    bus := EventBus.New()

    a := &modelA.Bus{EventBus: bus}
    b := &modelB.Bus{EventBus: bus}

    b.Receive() // Subscribe
    a.Send()    // Publish
    // Unsubscribe
}

还请参阅示例

代码语言:javascript
复制
func calculator(a int, b int) {
    fmt.Printf("%d\n", a + b)
}

func main() {
    bus := EventBus.New();
    bus.Subscribe("main:calculator", calculator);
    bus.Publish("main:calculator", 20, 40);
    bus.Unsubscribe("main:calculator", calculator);
}

我的调试结构和输出:

脚注:

您可以将b.Receive()重命名为b.Subscribe()

为了清晰起见,a.Send()a.Publish()

另见gRPC

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71987522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档