一、消息队列之RabbitMQ

1.1、什么是消息队列

消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串、JSON等,也可以很复杂,比如内嵌对象。

消息队列(Message Queue,简称为MQ)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。

消息队列适用于需要可靠的数据传送的分布式环境。采用消息中间件的系统中,不同的对象之间通过传递信息来激活对方的事件,以完成相应的操作。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。

特性:

  • 松耦合

    消息队列提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的消息中间件通信。

  • 冗余(存储)

    有些情况下,处理数据的过程会失败。消息中间件可以把数据持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在把一个消息从消息中间件中删除之前,需要你的处理系统明确的指出该消息已经被处理完成,从而确保你的数据被完全第保存直到你使用完毕。

  • 扩展性

    因为消息中间件解耦了应用的处理过程,所以提高消息入队和处理的效率是很容易的,只要另外增加处理过程即可,不需要改变代码,也不需要调节参数。

  • 削峰

    在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费。使用消息中间件能够使关键组件支撑突发访问压力,不会因为突发的超负荷请求而完全崩溃。

  • 可恢复性

    当系统一部分组件失效时,不会影响到整个系统。消息中间件降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入消息中间件中的消息仍然可以在系统恢复后进行处理。

  • 顺序保证

    在大多数使用场景下,数据处理的顺序很重要,大部分消息中间件支持一定程序上的顺序性。

  • 缓冲

    在任何重要的系统中,都会存在需要不同处理时间的元素。消息中间件通过一个缓冲层来帮助任务最高效率地执行,写入消息中间件的处理会尽可能快速。该缓冲层有助于控制和优化数据流经过系统的速度。

  • 异步通信

    在很多时候应用不想也不需要立即处理消息。消息中间件提供了异步处理机制,允许应用把一些消息放入消息中间件中,但并不立即处理它,在之后需要的时候再慢慢处理。

为什么使用消息队列:

如最常见订单系统,用户点击下单后,需要发短信通知、返代金劵等,如果业务过大,需要提升性能,可以把发短信、返代金劵等不需要立即执行的操作拆分处理进行异步执行。这时可以用MQ消息队列,在下单完成后,主程序发送一条消息到MQ后结束,由另外的线程拉取MQ(或由MQ推送)消息,当发现由相关信息后,执行发短信、返代金劵操作。减轻了主程序的压力。

以上是用于业务解耦的情况,其他常见场景包括一致性、广播、削峰等。

1.2、消息模型

所有 MQ 产品从模型抽象上来说都是一样的过程:

消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。

1.3、RabbitMQ

RabbitMQ是流行的开源消息队列系统,是由Erlang语言开发的AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现。具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。

AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制,可以与不同产品、不同语言之间进行消息交互。

为什么使用RabbitMQ

  1. 安装部署简单,上手门槛低,功能丰富,符合AMQP标准;
  2. 企业级消息队列,经过大量实践考验的高可靠;
  3. 集群易扩展,可以轻松的增减集群节点;
  4. 有强大的WEB管理页面。

RabbitMQ作为消息队列系统优势:

http://www.doc88.com/p-5826232080382.html 中对于RabbitMQ评价有两个维度:十万米高空看RabbitMQ和显微镜看RabbitMQ

  • 十万米高空看RabbitMQ

    1. 有商业化的运营,不会轻易死掉;
    2. 遵循AMQP协议,不会被绑架;
    3. 强大的社区支持,为技术进步提供动力;
    4. 大量成功的应用案例,例如阿里、网易等互联网巨头都有使用。
  • 显微镜看RabbitMQ
    1. Erlang开发,AMQP的标准实现,在支持持久化的消息队列中性能算很优秀的;
    2. 支持消息持久化、支持消息确认机制、灵活的任务分发机制等,支持功能非常丰富;
    3. 可靠性高;
    4. 集群扩展很容易,并且可以通过增加节点实现成倍的性能提升;
    5. WEB管理和监控,有些技术癌更喜欢命令行界面,但WEB管理为后期运维提供很大的便利。

RabbitMQ劣势:

性能比kafka和zero面前性能差(持久化消息和ACK确认的情况下生产和消费消息单机大约在1-2万左右)

结论:如果希望使用一个可靠性高、功能强大、易于管理的消息队列系统那么就选择RabbitMQ,如果想用一个性能高,但偶尔丢点数据不是很在乎可以使用kafka或者zeroMQ。

RabbitMQ的特点有如下几点:

  1. 可靠性(Reliability)

    RabbitMQ使用一些机制来保证可靠性,如持久化、传输确认及发布确认等。

  2. 灵活的路由(Flexible Routing)

    在消息进入队列前,通过交换机来路由消息。对于典型的路由功能,RabbitMQ已经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。

  3. 消息集群(Clustering)

    多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。

  4. 高可用性(Highly Available Queues)

    队列可以在集群中的机器上设置镜像,使得部分节点出现问题的情况下队列仍然可用。

  5. 多种协议(Multi-protocol)

    RabbitMQ除了原生支持AMQP协议,还支持STOMP、MQTT等多种消息中间件协议。

  6. 多语言客户端(Many Clients)

    RabbitMQ几乎支持所有常用语言,比如Java、Python、Ruby、PHP、C#、JavaScript等。

  7. 管理界面(Management UI)

    RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。

  8. 跟踪机制(Tracing)

    如果消息异常,RabbitMQ提供了消息跟踪机制,使用者可以找出发生了什么。

  9. 插件机制(Plugin System)

    RabbitMQ提供了许多插件,以实现从多方面进行扩展,当然也可以编写自己的插件。

原文地址:https://www.cnblogs.com/zenghi-home/p/9958771.html

时间: 2024-10-29 03:13:16

一、消息队列之RabbitMQ的相关文章

Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ

文章目录 1. 什么是 RabitMQ 2. Spring Boot 整合 RabbitMQ 3. 实战演练4. 源代码 3.1. 一个简单的实战开始 3.1.1. Configuration 3.1.2. 消息生产者 3.1.3. 消息消费者 3.1.4. 运行 3.1.5. 单元测试 3.2. 路由的实战演练 3.2.1. Configuration 3.2.2. 消息生产者 3.2.3. 消息消费者 3.2.4. 运行 3.2.5. 单元测试 本文,讲解 Spring Boot 如何集成

消息队列之 RabbitMQ

关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块的知识整理记录一下了. 市面上的消息队列产品有很多,比如老牌的 ActiveMQ.RabbitMQ ,目前我看最火的 Kafka ,还有 ZeroMQ ,去年底阿里巴巴捐赠给 Apache 的 RocketMQ ,连 redis 这样的 NoSQL 数据库也支持 MQ 功能.总之这块知名的产品就有十几种,就我自己的使用经验和兴趣只打算谈谈 RabbitMQ.Kafka 和 A

RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候. 消息队列主要解决了应用耦合.异步处理.流量削锋等问题. 当前使用较多的消息队列有RabbitMQ.RocketMQ.ActiveMQ.Kafka.ZeroMQ.MetaMq等,而部分数据库如Re

转 消息队列之 RabbitMQ

转 https://www.jianshu.com/p/79ca08116d57 消息队列之 RabbitMQ 预流 2017.05.06 16:03* 字数 4884 阅读 80990评论 18喜欢 236赞赏 1 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块的知识整理记录一下了. 市面上的消息队列产品有很多,比如老牌的 ActiveMQ.RabbitMQ ,目前我看最火的 Kafka ,还有 ZeroMQ ,去年底

消息队列和 RabbitMQ

消息队列和 RabbitMQ 消息队列 来看这样一个例子.相信大家都用外卖软件点过外卖.当我们在手机上下单之后,都发生了什么呢? 首先,客户用手机下单,将请求发送给服务端.服务端当然要先安排订单系统确认我们的订单信息,只有当我们付款成功后,订单才会生成.订单生成后,需要做三件事(真实的系统要做的事情更多,这里只是简单讨论):分配骑士.告知商家和记录流水. 如果按照流程顺序,一步一步走,执行同步操作.我们假设订单系统要花费 500 ms,其他系统都要花费 300 ms.那么整套系统应该要花费 1.

AMQP消息队列之RabbitMQ简单示例

前面一篇文章讲了如何快速搭建一个ActiveMQ的示例程序,ActiveMQ是JMS的实现,那这篇文章就再看下另外一种消息队列AMQP的代表实现RabbitMQ的简单示例吧.在具体讲解之前,先通过一个图来概览下: 1.添加Maven依赖 <!-- rabbitmq begin --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit

消息队列_RabbitMQ-0001.RabbitMQ消息代理/队列服务器快速安全部署?

简单介绍: 说明: RabbitMQ是最先支持AMQP标准的高级消息队列协议,是一个开源的消息代理和队列服务器,主要用于不同应用之间共享数据以及为分布式服务器进行任务编排,可有效应对大流量,高负载系统通信. 相关网址: 官方下载: http://www.rabbitmq.com/ 依赖下载: http://www.erlang.org/ 快速安装: yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-deve

Python消息队列(RabbitMQ)

RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用.可维护多个队列,可实现消息的一对一和广播等方式发送 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.ActionScript.XMPP.STOMP等,支持AJAX.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗. CentOs安装: 安装socat yum

【消息队列】RabbitMQ+PHP实现

本文链接:http://www.cnblogs.com/aiweixiao/p/7374249.html 文档提纲: 扫描关注微信公众号 1.[下载和安装] 1)gitHub下载地址: https://github.com/php-amqplib/php-amqplib 2)[环境准备]: 安装php的RabbitMQ PHP扩展安装,依赖的Erlang环境 参考文档: http://www.cnblogs.com/chunguang/p/5634342.html 3)[类的依赖加载]:建议使用