77 lines
2.3 KiB
Markdown
77 lines
2.3 KiB
Markdown
|
# 事件总线
|
|||
|
统一的事件总线,低层使用RocketMQ,进一步封装:约束命名规范、权限验证、链路追踪等
|
|||
|
|
|||
|
## 发送
|
|||
|
[参考:](/event/producer_test.go)
|
|||
|
1. 生成发送实例
|
|||
|
```go
|
|||
|
producer, err := event.NewProducer("192.168.6.107:9876")
|
|||
|
|
|||
|
// 带有验证凭证的示例
|
|||
|
producer, err := NewProducer("192.168.6.107:9876", producer.WithProducerCredentials("accessKey", "secretKey", "securityToken"))
|
|||
|
```
|
|||
|
生成时可选的配置项有:
|
|||
|
* event.WithProducerCredentials 设置生产者的凭证
|
|||
|
2. 在Data层中注入生成的实例
|
|||
|
|
|||
|
3. 在biz中声明event的interface
|
|||
|
|
|||
|
4. 在data层中实现biz声明的interface,同repository类似
|
|||
|
|
|||
|
5. 使用的方法:
|
|||
|
* SendSync 同步发送
|
|||
|
* SendAsync 异步发送
|
|||
|
* BatchSendSync 批量同步发送
|
|||
|
* BatchSendAsync 批量异步发送
|
|||
|
|
|||
|
6. 默认支持链路追踪,如要关闭,请调用DisableTraceTelemetry方法
|
|||
|
|
|||
|
## 消费
|
|||
|
[参考:](/event/producer_test.go)
|
|||
|
### 一、随着Kratos服务一起启动
|
|||
|
1. 在server中新增consumer.go
|
|||
|
```go
|
|||
|
// ConsumerServer 消费者Server
|
|||
|
type ConsumerServer struct {
|
|||
|
manager *event.ConsumerManager
|
|||
|
}
|
|||
|
|
|||
|
// NewConsumerServer 工厂方法
|
|||
|
func NewConsumerServer(
|
|||
|
//注入一些依赖的对象(包括biz,同http、grpc的Sever类似)
|
|||
|
) *ConsumerServer {
|
|||
|
manager := event.NewConsumerManager()
|
|||
|
|
|||
|
// 添加一些订阅方法,示例:
|
|||
|
_ = manager.Subscribe(ctx, connConf, consumerConf, func(message *ConsumerMessage) error {
|
|||
|
// mock 业务耗时
|
|||
|
time.Sleep(10 * time.Second)
|
|||
|
// 返回nil才会commit,否则会重试
|
|||
|
return nil
|
|||
|
})
|
|||
|
|
|||
|
return &ConsumerServer{manager:manager}
|
|||
|
}
|
|||
|
|
|||
|
func (c *ConsumerServer) Start(ctx context.Context) error {
|
|||
|
return c.manager.Start()
|
|||
|
}
|
|||
|
|
|||
|
func (c *ConsumerServer) Stop(ctx context.Context) error {
|
|||
|
return c.manager.Stop()
|
|||
|
}
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
2. 添加进provider_set.go
|
|||
|
3. 打开main.go
|
|||
|
```go
|
|||
|
// 在newApp方法中注入ConsumerServer,并添加到
|
|||
|
serverOption := kratos.Server(
|
|||
|
//在这里面添加ConsumerServer的实例
|
|||
|
)
|
|||
|
```
|
|||
|
### 二、使用cli模式启动
|
|||
|
参考上面的启动方式,顺序为:subscribe -> start -> stop
|
|||
|
|