一架梯子,一头程序猿,仰望星空!
RabbitMQ教程 > 内容正文

Golang RabbitMQ路由模式(Direct)


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)
    }

推荐教程