rabbitmq的topic(RabbitMQ的使用介绍)
一 、RabbitMQ是什么
RabbitMQ是一种常用的消息中间件 ,是基于AMQP协议 ,采用erlang语言开发的面向消息服务的中间件 ,是一个独立的系统应用程序 ,可以管理服务器计算资源和网络通信 。一般可作为同构或异构系统间的数据交换平台 ,由于erlang语言的高并发特性 ,使得RabbitMQ的性能较好 。应用较为广泛 。
二 、RabbitMQ的使用场景
举几个例子 ,如果订单系统最多能处理一万次订单 ,这个处理能力应付正常时段的下单时绰绰有余 ,正常时段我们下单一秒后就能返回结果 。但是在高峰期 ,如果有两万次下单操作系统是处理不了的 ,只能限制订单超过一万后不允许用户下单 。而使用消息中间件做缓冲 ,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理 ,这时有些用户可能在下单十几秒后才能收到下单成功的操作 ,但是比不能下单的体验要好 。
简单来说: 就是在访问量剧增的情况下,但是应用依然能够提供服务 ,比如“双十一 ”下单的人多 ,但是淘宝这个应用仍然要运行 ,所以就可以使用消息中间件采用队列的形式减少突然访问的压力 。我们称之为“流量削峰 ” 。第二个例子 ,以电商应用为例 ,应用中有订单系统 、库存系统 、物流系统 、支付系统 。用户创建订单后 ,如果耦合调用库存系统 、物流系统 、支付系统 ,任何一个子系统出了故障 ,都会造成下单操作异常 。当转变成基于消息队列的方式后 ,系统间调用的问题会减少很多 ,比如物流系统因为发生故障 ,需要几分钟来修复 。在这几分钟的时间里 ,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成 。当物流系统恢复后 ,继续处理订单信息即可 ,中间用户感受不到物流系统的故障,降低了系统间的耦合性 ,但是却提高了系统的复杂性 ,一定程度上提高了系统的可用性。我们称之为“应用解耦 ” 。
第三个例子 ,还是以电商应用为例 ,我们下单之后 ,需要调用库存系统 ,查看当前库存余量是否支持订单需要 ,这个时候订单系统在向库存系统发送下单申请后 ,它不能保证能够立马收到库存系统的反馈 ,所以需要在库存系统完成查询后 ,再告诉订单系统下单成功 ,这是一个异步的过程 ,订单系统无需因等待库存系统回复而阻塞 。我们称之为“异步处理 ”。
三 、RabbitMQ的组成
生产者:生产无非就是发送 。发送消息的程序是生产者
队列:队列是 RabbitMQ 中存放消息的结构的名称 。 尽管消息流经 RabbitMQ 和您的应用程序,但它们只能存储在队列中 。 队列仅受主机内存和磁盘限制的约束 ,它本质上是一个大消息缓冲区 。 许多生产者可以将消息发送到一个队列 ,许多消费者可以尝试从一个队列接收数据 。
消费者:消费者是一个主要等待接收消息的程序
交换机:本质上,消息的生产者并不知道自己产生的消息会具体发送至哪个队列 ,生产者将消息传递给交换机 ,由交换机决定将消息发送至哪个队列
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!