读书笔记《RabbitMQ实战指南》(二)

2020-05-23  本文已影响0人  心似南风

书中以java语言作为示例代码,我以go语言来实现有必要记录的示例

rabbitmq模型架构图.png

一、生产者(Producer)和消费者(Consumer)

生产者生产数据存入Broker,消费者从Broker中消费数据的整个流程:


消息队列的运转过程.png

二、队列Queue

queueDeclare的方法详解

三、交换器(Exchange)、路由键(RoutingKey)、绑定(Binding)

  1. 交换器:将生产者的消息路由队列中,如果路由不到会返回给生产者或直接丢掉
ExchangeDeclare方法参数:
备份交换器.png
  1. 路由键:routingKey用来指定消息的路由规则,与交换器类型和bingKey联合使用才能生效。
  2. Binding:将交换器与队列关联起来,绑定时指定RoutingKey,当Routing与BindingKey相匹配时,消息会路由到对应的队列中。
# 发送消息到队列中
err = r.channel.Publish(
    r.ExchangeName,
    // 如果为true, 根据exchange类型和routkey规则,如果无法找到符合条件的队列,那么会把发送的消息返回给发送者
    r.RoutingKey,
    false,
    // 如果为true, 当exchange发送消息到队列后发现队列上没有绑定消费者,则会把消息发还给发送者(RabbitMq3.0去掉了该参数的支持,官方解释为该参数影响镜像队列的新能,增加了代码的复杂度建议采用TTL和DLX方法替代)
    false,
    amqp.Publishing{
        ContentType: "text/plain",
        Body:        []byte(message),
    })
# 绑定队列到 exchange 中
    err = r.channel.QueueBind(
        q.Name,
        //需要绑定key
        r.RoutingKey, // 此处为BindingKey需与RoutingKey相同
        r.ExchangeName,
        false,
        nil)
    r.checkError(err, "Failed to bind a queue")
}

四、AMQP协议

生产者将消息发送给交换器,交换器和队列绑定,生产者发送消息携带的RoutingKey和绑定的BindingKey相匹配时,消息即被存入相应的队列之中。消费者可以订阅相应的队列获取信息。

AMQPx协议包括三层:
上一篇 下一篇

猜你喜欢

热点阅读