Go 语言中的全局 EventBus
Global EventBus in GoLang
我正在尝试学习围棋,并在此过程中尝试不同的概念。现在我正在尝试 PubSub 方法,但在应用程序中。我有一个 EventBus 并且我正在尝试通过依赖注入传递实例。但是当我 运行 应用程序没有任何反应时。
主要
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()
}
internal/modelA
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)
}
internal/modelB
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)
}
您需要先订阅一个主题
然后 Publish(执行为主题定义的回调)。
尝试这样的事情:
func main() {
bus := EventBus.New()
a := &modelA.Bus{EventBus: bus}
b := &modelB.Bus{EventBus: bus}
b.Receive() // Subscribe
a.Send() // Publish
// Unsubscribe
}
另见 example:
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:
我正在尝试学习围棋,并在此过程中尝试不同的概念。现在我正在尝试 PubSub 方法,但在应用程序中。我有一个 EventBus 并且我正在尝试通过依赖注入传递实例。但是当我 运行 应用程序没有任何反应时。
主要
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()
}
internal/modelA
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)
}
internal/modelB
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)
}
您需要先订阅一个主题
然后 Publish(执行为主题定义的回调)。
尝试这样的事情:
func main() {
bus := EventBus.New()
a := &modelA.Bus{EventBus: bus}
b := &modelB.Bus{EventBus: bus}
b.Receive() // Subscribe
a.Send() // Publish
// Unsubscribe
}
另见 example:
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: