transfer_middleware/until/mq/README.md

77 lines
2.3 KiB
Markdown
Raw Normal View History

2024-06-18 16:34:14 +08:00
# 事件总线
统一的事件总线低层使用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