# rabbitmq-pool-router-path-go
**Repository Path**: tym_hmm/rabbitmq-pool-router-path-go
## Basic Information
- **Project Name**: rabbitmq-pool-router-path-go
- **Description**: 基于rabbbitmq 连接池 任务消费路由器
一个消息队列可根据自定义路由处响应不通事件。
支持不同队列不同路由处理,
基于rabbitmq连接池
- **Primary Language**: Go
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 9
- **Forks**: 1
- **Created**: 2021-10-25
- **Last Updated**: 2023-08-20
## Categories & Tags
**Categories**: message-server
**Tags**: None
## README
### go rabbitMq 队列路由处理
#### 最新版本 v1.1.8
#### 描述
1、rabbitmq 使用同一交换机,队列, routekey, 监听队列后通过消息路由routePath 进行区分任务逻辑
一个消息队列可根据自定义路由处响应不通事件。 支持不同队列不同路由处理, 基于rabbitmq连接池
2、兼容rabbitmq链接池自定义 VirtualHosts
#### 使用案例
生产项目已使用,每日处理上亿数据,每秒可处理1000+队列消息,rabbitmq集群及服务应用未出现较高压力
#### 组件说明
[基于rabbitmq连接池工具=>](https://gitee.com/tym_hmm/rabbitmq-pool-go.git)
#### 接入说明
```cgo
go get -u gitee.com/tym_hmm/rabbitmq-pool-router-path-go
```
#### 生产者声明
```cgo
var wg sync.WaitGroup
exchangeName := "test-data-center-exchange-name"
exchangeType := RabbitmqPool.EXCHANGE_TYPE_TOPIC
queueName := "test-data-center-queue-name"
routeKey := "test-data"
routePath := "/test/a"
wg.Add(2)
go func() {
defer wg.Done()
data:="这是一个数据test/a"
//使用默认VirtualHosts 发送
//product:=RabbitmqRoute.NewProductClient(host, port, user, pwd)
//使用自定义VirtualHosts 发送
product:=RabbitmqRoute.NewProductClientVirtualHosts(host, port, user, pwd, "/temptest1")
err:=product.Publish(exchangeName, exchangeType, queueName, routeKey, routePath, data)
if err !=nil{
fmt.Println(err)
}
}()
go func() {
defer wg.Done()
routePatsh := "/testaa"
datas:="这是一个数据test"
//使用默认VirtualHosts 发送
//products:=RabbitmqRoute.NewProductClient(host, port, user, pwd)
//使用自定义VirtualHosts 发送
products:=RabbitmqRoute.NewProductClientVirtualHosts(host, port, user, pwd, "/temptest1")
errs:=products.Publish(exchangeName, exchangeType, queueName, routeKey, routePatsh, datas)
if errs !=nil{
fmt.Println(errs)
}
}()
wg.Wait()
```
#### 消费者声明
```cgo
consumer := RabbitmqRoute.NewTask(host, port, user, pwd)
//设置加载的节点信息(暂时只支持单节点加入)
consumer.SetHandleNode(&RabbitmqRoute.NodeInfo{
NodeName: "dataCenter",
ExchangeName: "test-data-center-exchange-name",
ExchangeType: RabbitmqPool.EXCHANGE_TYPE_TOPIC,
Route: "test-data",
QueueName: "test-data-center-queue-name",
IsTry: false,
MaxReTry: 1,
})
//注册加载的路由
consumer.RouteRegister(func(engine *RabbitmqRoute.TaskEngine) {
//fmt.Println(engine)
engine.AddRoute("/test", func(c *RabbitmqRoute.TaskContext) {
fmt.Println(c.Request.Data)
//c.Request.Data
})
engine.AddRoute("/test/a", func(c *RabbitmqRoute.TaskContext) {
fmt.Println(c.Request.Data)
})
})
err := consumer.Enter()
if err != nil {
fmt.Println(err)
}
```
