小编给大家分享一下关于RabbitMQ应用场景与实例的详解,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
解决分布式事务的一致性,消息队列、消息中间件,消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。
当下主流的消息中间件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。其能在不同平台之间进行通信,常用来屏蔽各种平台协议之间的特性,实现应用程序之间的协同。优点在于能够在客户端和服务器之间进行同步和异步的连接,并且在任何时刻都可以将消息进行传送和转发,是分布式系统中非常重要的组件,主要用来解决应用耦合、异步通信、流量削峰等问题。
RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。它同时实现了一个Broker构架,这意味着消息在发送给客户端时先在中心队列排队,对路由(Routing)、负载均衡(Load balance)或者数据持久化都有很好的支持。
RabbitMQ从整体上来看是一个典型的生产者消费者模型,主要负责接收、存储和转发消息。
生产者:
生产者连接到RabbitMQ Broker,建立一个连接(Connection)开启一个信道(Channel)
生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等
生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等
生产者通过路由键将交换器和队列绑定起来
生产者发送消息至RabbitMQ Broker,其中包含路由键、交换器等信息
相应的交换器根据接收到的路由键查找相匹配的队列
如果找到,则将从生产者发送过来的消息存入相应的队列中
如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者
关闭信道
关闭连接
消费者:
消费者连接到RabbitMQ Broker ,建立一个连接(Connection),开启一个信道(Channel)
消费者向RabbitMQ Broker请求消费相应队列中的消息,可能会设置相应的回调函数
等待RabbitMQ Broker回应并投递相应队列中的消息,消费者接收消息
消费者确认(ack) 接收到的消息
RabbitMQ从队列中删除相应己经被确认的消息
关闭信道
关闭连接
为什么要有信道:生产者和消费者都要和RabbitMQ Broker 建立连接,这是一条tcp连接,而操作系统对于TCP连接的创建与销毁是非常昂贵的开销。
而高并发的时候,可能每秒有上万条tcp连接,资源浪费的同时也会超过操作系统每秒所能连接的数量,要在一条tcp连接上操作,又能保证各个线程之间的私密性,所以出现信道channel。
信道是虚拟连接,在connection基础上的虚拟连接,在应用程序和Rabbit Broker建立tcp连接时,客户端紧接着建立一个AMQP信道(channel),每个channel有唯一的ID,处理每条AMQP指令都是通过信道完成的。信道就像电缆里的光纤束,一条电缆内含有许多光纤束,允许所有的连接通过多条光线束进行传输和接收。
AMQP,高级消息队列协议,AMQP协议这种降低耦合的机制是基于与上层产品,语言无关的协议。是一种二进制协议,提供客户端应用与消息中间件之间多通道、协商、异步、安全、中立和高效地交互。从整体来看,AMQP协议可划分为两层:
功能层(定义命令,用于实现业务逻辑),传输层(基于二进制数据流传输,将应用程序调用的指令传回服务器,并返回结果)。
以上是关于RabbitMQ应用场景与实例的详解的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。