RabbitMQ学习(二)—— 概念以及AMQP协议

概念

生产者(producer)与消费者(consumer)

  生产者创建消息,发布到broke(rabbitmq服务器),消息包含payload(翻译是有效载荷)和lable(标签)。有效载荷其实就是传输的数据,而标签是描述这条消息的。比如含有交换器名称。生成者如何投递消息到broke呢?其实是建立了一个TCP连接。然后创建一个AMQP信道,每个信道都有一个唯一id,通过信道复用TCP连接,类似NIO,信道传输数据到broke,AMQP的命令也是通过信道进行发送。这里可能有人会问,为什么这么麻烦,不直接通过TCP连接传输呢?其实是因为TCP的连接与销毁开销相对太大。还有就是操作系统对于连接数也是有限制的。
  消费者用来消费消息,他跟生产者一样通过信道进行交互。消费者可以通过订阅(推模式)或者拉模式获取消息,这个后面会细讲的。

队列(queue)

  用来存储消息的,生产者最终投递消息到队列。消费者从队列获取数据。当多个消费者订阅同一个队列,并不是所有的消息都被每一个消费者消费,而是通过轮询只会被消费一次。

交换器(exchange)

  生成者并不会把数据直接投递到queue,而是先投递到交换器,然后交换器与队列通过相应的路由规则进行绑定,把消息存放到queue,等待消费。下一篇会详细介绍路由规则以及代码实现。交换器存在有什么意义呢?如果没有交换器则发生一个消息只能发送到一个队里。被订阅到的其中的一个消费者消费,则不能多个消费者消费。并且交换器和路由规则相对队列更加的灵活。

路由键(Routing key)与绑定键(Binding key)

  当生产者投递消息的时候会指定路由键,当交换器与队列绑定时会通过绑定键与路由规则匹配路由键,匹配则把消息传到队列中,不匹配可以消息不处理和返回给生产者。

AMQP协议

介绍

  AMQP协议的开发其实是与RabbiMQ开发是在同一时间的,当时是RabbitMQ的作者Alexis找到AMQP创始人John O’hara,然后通过AMQP协议进行的实践。前人种树,后人乘凉,在学习技术的同时,我们也应感谢那些开发人员。RabbitMQ就是通过erlang实现AMQP协议的产物。目前支持的是AMQP 0-9-1。可以到RabbitMQ协议参考去了解。

生产者发布过程

消费者消费过程

在这里插入图片描述
这个只是推模式消费,还有拉模式和消息拒绝等等,大体相似,可以自行研究。
AMQP协议还有很多命令,比如交换器的声明,解绑,删除等,队列相关的以及事务的,大家可以自己去官网看。

后话

  学习了RabbitMQ以及AMQP协议的一些流程,为后面代码实现打下了基础。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈大侠在江湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值