android 接受rabbitmq消息 rabbitmq接收消息很慢_消息通信


这次小编为大家带来的是RabbitMQ,由于专业性过强,小编不建议零基础小白阅读。本文主要面向从事互联网行业中各种分布式和服务化系统开发的研究人员、高等院校计算机相关专业的研究生和本科生,以及广大的 IT 爱好者。

以熟悉的电商场景为例,如果商品服务和订单服务是两个不同的微服务,在下单的过程中订单服务需要调用商品服务进行扣库存操作。按照传统的方式,下单过程要等到调用完毕之后才能返回下单成功,如果网络产生波动等原因使得商品服务扣库存延迟或者失败,会带来较差的用户体验,如果在高并发的场景下,这样的处理显然是不合适的,那怎么进行优化呢?这就需要消息队列登场了。

消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。RabbitMQ就是这样一款我们苦苦追寻的消息队列。

RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。Erlang语言在数据交互方面性能优秀,有着和原生Socket一样的延迟,这也是RabbitMQ高性能的原因所在。可谓“人如其名”,RabbitMQ像兔子一样迅速。

今天我们就借由《深入RabbitMQ》来看看它到底有何神秘之处!


android 接受rabbitmq消息 rabbitmq接收消息很慢_消息队列_02


刚刚也说到消息通信机制负责处理网络通信,在消息发送方和消息接收方之间添加了存储转发( Store and Forward )功能。通过存储转发功能,消息发送方和消息接收方之间并不需要知晓对方的存在,也不需要同时在线,更不会限制必须采用同样的实现技术,技术、空间和时间上的约束凭借中间层得到显著缓解。

然而消息通信机制并没有想象的那么简单 我们需要在消息的生产者和消费者之间建立有效的通信链路并确定双方的通信协议。消息的消费者通常采取主动拉取和被动消费这两种模式实现消息消费;同时,出于稳定性的考虑,消费者还需要提供限流的能力。消息发送方的逻辑则相对简单, 一旦消息发送出去之后 ,它将依赖路由规则,最终投递给符合条件的一个或多个消费者。这些构成了消息通信机制所应该具备的核心组件。

围绕消息通信机制的这些核心组件,业界存在批关于消息通信的设计规范基于这些规范,不同厂商也提供了多种消息通信系统实现方案。本书所介绍的是基于高级消息队列协议(Advanced Message Queuing Protocol, AMQP )规范的 RabbitMQ ,在内容上详细阐述了 RabbitMQ 的以下几个主题:

1. AMQP 规范以及消息定义

2. 消息发送的过程以及可靠消息投递机制

3. 消息消费的过程以及消费者性能优化方法

4. 交换器组件以及消息路由机制。

5. RabbitMQ 分布式集群构建。

6. RabbitMQ 在系统集成上的具体应用。

目前,RabbitMQ在各大互联网公司中应用十分广泛。通过 RabbitMQ 所提供的丰富的交互API 、友好的管理界面以及与生俱来的分布式特性,我们可以轻松构建一个强大的消息通信系统。然而消息通信系统的构建一方面降低了藕合性,另一方面也不可避免地引入了使用不当引发的各种问题。本书深入分析消息通信的各个方面,不仅介绍RabbitMQ的各项基本功能,更为重要的是提供了系列面向实战的最佳实践,可以作为广大技术人员的开发指南。

本书从AMQP协议出发,深入介绍各种消息属性,给出 RabbitMQ在发送和消费消息上的特性和最佳实践,并阐述基于 RabbitMQ 所特有交换器组件实现灵活的消息路由机制同时,本书也时论了如何利用 bbitMQ 强大的集群机制实现分布式环境下的消息通信,并展示了如何在RabbitMQ中,使用其他传输协议以及数据库集成等功能来实现各种定制需求。

附:

RabbitMQ服务支持下列操作系统:Linux、WindowsNT 到 10、Windows Server2003-2016、macOS、Solaris、FreeBSD、TRU64、VxWorks。

RabbitMQ支持下列编程语言:Python、Java、by、PHP、C#、JavaScript、Go、Elixir、Objective-C、Swift。