2025-07-25 06:26:01 +00:00
2024-11-19 14:14:52 +08:00
2024-01-16 15:02:25 +08:00
2024-10-19 20:22:28 +08:00
2025-07-25 06:26:01 +00:00
2022-12-06 20:18:25 +08:00
2024-01-16 15:25:26 +08:00
2025-05-22 23:10:16 +08:00
2024-09-03 01:38:00 +08:00
2024-09-10 12:07:19 +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%