Skip to content

farseer-go/eventBus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.....
    })
}