RabbitMQ总结

RabbitMQ的基础概念

  • ConnectionFactory : ConnectionFactory为Connection的制造工厂
  • Connection : Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑
  • Channel : Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等
  • Queue : Queue(队列)是RabbitMQ的内部对象,用于存储消息。RabbitMQ中的消息都只能存储在Queue中,生产者生产消息并最终投递到Queue中,消费者可以从Queue中获取消息并消费
  • Exchange : 我们感觉生产者将消息投递到Queue中,实际上这在RabbitMQ中这种事情永远都不会发生。实际的情况是,生产者将消息发送到Exchange(交换器),由Exchange将消息路由到一个或多个Queue中(或者丢弃)

消息路由

  • Binding : RabbitMQ中通过Binding将Exchange与Queue关联起来,这样RabbitMQ就知道如何正确地将消息路由到指定的Queue了
  • routing key :
    • 生产者在将消息发送给Exchange的时候,一般会指定一个routing key,来指定这个消息的路由规则,而这个routing key需要与Exchange Type及binding key联合使用才能最终生效。
    • 在Exchange Type与binding key固定的情况下(在正常使用时一般这些内容都是固定配置好的),我们的生产者就可以在发送消息给Exchange时,通过指定routing key来决定消息流向哪里。
    • RabbitMQ为routing key设定的长度限制为255 bytes
  • Binding key
    • 在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key;消费者将消息发送给Exchange时,一般会指定一个routing key;当binding key与routing key相匹配时,消息将会被路由到对应的Queue中
    • 在绑定多个Queue到同一个Exchange的时候,这些Binding允许使用相同的binding key
    • binding key 并不是在所有情况下都生效,它依赖于Exchange Type,比如fanout类型的Exchange就会无视binding key,而是将消息路由到所有绑定到该Exchange的Queue(相当于消息广播)
  • Exchange Types
    常用的Exchange Type有fanout、direct、topic、headers这四种 (AMQP规范里还提到两种Exchange Type,分别为system与自定义,这里不予以描述)
    • fanout : 它会把所有发送到该Exchange的消息,都路由到所有与它绑定的Queue中

    • direct : 它会把消息路由到那些binding key与routing key完全匹配的Queue中

    • topic : 它与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中,但这里的匹配规则有些不同,规则如下:

      • routing key为一个句点号".“分隔的字符串,如"stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”
      • binding key与routing key一样也是句点号"."分隔的字符串
      • binding key中可以存在两种特殊字符"“与”#",用于做模糊匹配,其中"“用于匹配一个单词,”#"用于匹配多个单词(可以是零个)


      例如: 我们可以定义一个queue(Q1)的binding key为 .orange. , 另外一个Queue(Q2)定义两个分别为*.*.rabbit和lazy.#那么routingKey="quick.orange.rabbit"的消息会同时路由到Q1与Q2

    • headers :

      • headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配
      • 在绑定Queue与Exchange时指定一组键值对;当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue与Exchange绑定时指定的键值对
      • 如果完全匹配则消息会路由到该Queue,否则不会路由到该Queue

适用于云计算集群的远程调用(RPC)

  • replyTo : 一个Queue名称,服务器将消息处理完成后,结果从replyTo中返回
  • correlationId : 此次请求的标识号,服务器处理完成后需要将此属性返还,客户端将根据这个id了解哪条请求被成功执行了或执行失败
  • MessageProperties : 消息的属性, 在AMQP协议中定义了14种properties,这些属性会随着消息一起发送
  • RabbitMQ中实现RPC的机制:
    • 客户端发送请求(消息)时,在MessageProperties中设置两个值replyTo和correlationId
    • 服务器端收到消息并处理
    • 服务器端处理完消息后,将生成一条应答消息到replyTo指定的Queue,同时带上correlationId属性
    • 客户端之前已订阅replyTo指定的Queue,从中收到服务器的应答消息后,根据其中的correlationId属性分析哪条请求被执行了,根据执行结果进行后续业务处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值