transfer_middleware/until/mq/README.md

77 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 事件总线
统一的事件总线低层使用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