2023-09-20 00:01:35 +08:00
2023-01-03 22:01:17 +08:00
2023-09-20 00:01:35 +08:00
2023-07-28 17:00:59 +08:00
2023-07-27 22:55:54 +08:00
2022-12-06 20:18:25 +08:00
2023-03-07 17:33:34 +08:00
2023-02-08 01:51:21 +08:00
2023-01-03 22:01:51 +08:00
2023-02-08 01:51:21 +08:00
2023-02-08 01:51:21 +08:00
2023-07-27 22:55:54 +08:00

eventBus 事件总线

包:"github.com/farseer-go/eventBus"

模块:eventBus.Module

codecov Build

概述

以事件驱动的方式来解耦业务逻辑,在DDD中,事件总线是必然用到的技术。

当两个业务模块相互之间有业务关联,但又不希望在代码结构上直接依赖。

则可以使用事件驱动的方式来解耦相互之间的依赖。

1、发布事件

本着farseer-go极简、优雅风格使用eventBus组件也是非常简单的

函数定义

// 发布事件(同步、阻塞)
func PublishEvent(eventName string, message any)

// 发布事件(异步)
func PublishEventAsync(eventName string, message any)
  • eventName:事件名称
  • message:事件消息

演示:

type newUser struct {
    UserName string
}

func main() {
    fs.Initialize[eventBus.Module]("queue生产消息演示")

    // 同步(阻塞)
    eventBus.PublishEvent("new_user_event", newUser{UserName: "steden"})

    // or 异步(非阻塞)
    eventBus.PublishEventAsync("new_user_event", newUser{UserName: "steden"})
}

2、订阅事件

函数定义

// 订阅
func Subscribe(eventName string, fn consumerFunc)
// 回调函数
type consumerFunc func(message any, ea EventArgs)
  • eventName:事件名称
  • fn:事件回调函数
  • message:事件消息
  • ea:事件参数

演示:

type newUser struct {
    UserName string
}

func main() {
    fs.Initialize[eventBus.Module]("queue生产消息演示")

    eventBus.Subscribe("new_user_event", func (message any, ea EventArgs) {
        user := message.(NewUser)
        // do.....
    })
}
Description
eventBus local event
Readme MIT 194 KiB
Languages
Go 100%