包:
"github.com/farseer-go/eventBus"
模块:
eventBus.Module
以事件驱动的方式来解耦业务逻辑,在DDD
中,事件总线是必然用到的技术。
当两个业务模块相互之间有业务关联,但又不希望在代码结构上直接依赖。
则可以使用事件驱动的方式来解耦相互之间的依赖。
本着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"})
}
函数定义
// 订阅
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.....
})
}