Golang RabbitMQ路由模式在发布订阅模式的基础上,对交换机路由方式进行扩展,路由模式的交换机类型为direct,路由模式也是rabbitmq的默认交换机,前面的章节没有使用明确交换机,底层其实使用的是direct交换机。
提示:不了解路由模式规则,请阅读RabbitMQ路由模式。
1.前置教程
请先阅读Golang RabbitMQ发布订阅模式章节。
RabbitMQ各种工作模式,基本上都是由各种类型的交换机(exchange)实现,代码上几乎一样,主要就是交换机的定义不一样,所以看懂发布订阅模式,其他模式就很简单了。
2.声明direct交换机
err = ch.ExchangeDeclare(
"tizi365_direct", // 交换机名字,需要唯一
"direct", // 交换机类型
true, // 是否持久化
false, // auto-deleted
false, // internal
false, // no-wait
nil, // arguments
)
3.发送消息
// 消息内容
body := "Hello Tizi365.com!"
// 推送消息
err = ch.Publish(
"tizi365_direct", // exchange(交换机名字)
"blog", // 路由参数,关键参数,决定你的消息会发送到那个队列。
false, // mandatory
false, // immediate
amqp.Publishing {
ContentType: "text/plain", // 消息内容类型,这里是普通文本
Body: []byte(body), // 消息内容
})
4.消费者接收消息
4.1.绑定交换机
// 声明需要操作的队列
q, err := ch.QueueDeclare(
"", // 队列名字,不填则随机生成一个
false, // 是否持久化队列
false, // delete when unused
true, // exclusive
false, // no-wait
nil, // arguments
)
// 队列绑定指定的交换机
err = ch.QueueBind(
q.Name, // 队列名
"blog", // 路由参数,关键参数,如果匹配消息发送的时候指定的路由参数,消息就投递到当前队列
"tizi365_direct", // 交换机名字,需要跟消息发送端定义的交换器保持一致
false,
nil)
4.2.消费消息
// 创建消费者
msgs, err := ch.Consume(
q.Name, // 引用前面的队列名
"", // 消费者名字,不填自动生成一个
true, // 自动向队列确认消息已经处理
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
// 循环消费队列中的消息
for d := range msgs {
log.Printf("接收消息=%s", d.Body)
}