RabbitMQ 简介

2019-03-03 07:40|来源: 网路

MQ全称为Message Queue,消息队列是应用程和应用程序之间的通信方法。


AMQP(高级消息队列协议) 是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息。AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件 (MOM)系统,例如发布/订阅队列,没有作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一 部分,形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。


RabbitMQ是一个在AMQP协议标准基础上完整的、可复用的企业消息系统。他遵循Mozilla Public License开源协议。采用Erlang实现的工业级消息队列(MQ)服务器。支持主流的操作系统,Linux、Windows、MacOX等。多种开发语言支持,Java、Python、Ruby、.NET、PHP、C/C++、node.js等。


rabbitMQ的两个核心组件是exchange和queue,运行原理如下图:



Server(broker):接收客户端连接,实现AMQP消息队列的路由功能的进程.简单来说就是消息队列服务器实体。
Virtual Host:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。权限控制组,用户只能关联到一个vhost上,一个vhost中可以有若干个Exchange和Queue,默认的vhost是"/"
Exchange:接收生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列 Exchange Type决定了Exchange路由消息额行为,例如,在RabbitMQ中,ExchangeType有Direct、Fanout和Topic三种,不同类型的Exchange路由得到行为是不一样的
Message queue:用于存储还未消费的消息。消息队列载体,每个消息都会被投入到一个或多个队列。
Message:由Header和Body组成,Header是由生产者添加到各种属性的集合,包括Message是否被持久化,是由哪个Message Queue接收优先级是多少等,而Body是真正需要传输的APP数据
Binding: 绑定,它的作用就是把exchange和queue按照路由规则绑定起来。:
BindingKey: 在mq中设置的绑定key
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务


相关问答

更多
  • 重点推荐spring框架,非常实用。 基本上把所有事情都做了,只剩下业务逻辑留给你自己实现。
  • MATLAB软件是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。   MATLAB的特点是可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。   MATLAB的优势主要有四个方面: 1. 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来; ...
  • 安装后,Rabbitmq会自动启动。 我不认为它配置与service命令运行。 查看rabbitmq的状态 sudo rabbitmqctl status 停止rabbitmq sudo rabbitmqctl stop (再次尝试状态命令以查看它已停止)。 要重新开始,推荐的方法是 sudo invoke-rc.d rabbitmq-server start 这些都与使用apt-get的vanilla ubuntu安装配合使用 还是行不通? 如果您尝试启动或重新启动rabbitmq失败,请检查运行的 ...
  • PORT 4369:Erlang使用端口映射程序守护程序(epmd)来解决群集中的节点名称。 节点必须能够达到彼此,端口映射程序守护进程可用于集群工作。 PORT 35197由inet_dist_listen_min / max设置防火墙必须允许此范围内的流量在群集节点之间传递 RabbitMQ管理控制台: PORT 15672 for RabbitMQ 3.x版 PORT 55672 for RabbitMQ pre 3.x 端口5672 RabbitMQ主端口。 对于一组节点,它们必须在35197和56 ...
  • 你需要发送URL到RabbitMQ的螺栓来扩展AbstractStatusUpdaterBolt,因为超类在引擎盖下做了很多有用的事情,这意味着你不会使用开箱即用的生产者,但需要编写一些自定义代码。 除非您确定不会有重复的URL,否则在将它们发送到队列之前需要对URL进行重复数据删除,这可以在您的定制状态更新程序中使用Redis完成。 You'd want the bolt which sends URLs to RabbitMQ to extend AbstractStatusUpdaterBolt as ...
  • JMS是Java API(JEE的一部分)。 JMS供应商使用专有协议与代理进行通信; 它们不是电线兼容的。 您通常可以通过更改特定于供应商的配置(连接工厂等)与任何JMS代理进行通信。 供应商提供JMS客户端库以与其经纪人交谈。 AMQP是有线协议,而不是API。 供应商提供Java客户端API。 您可以使用Spring AMQP,它位于RabbitMQ的amqp-client库及其API amqp-client 。 您可以使用Spring JMS,它使用JMS API与任何JMS代理(包括带插件的Rab ...
  • 要删除所有任务,您应该为正在使用的客户端库中实现的每个队列queue.purge方法调用。 要从队列异步获取消息,您应该使用basic.consume方法。 To delete all tasks you should call for each queue queue.purge method implemented in client library you are using. To asynchronously get messages from queue you should use basic ...
  • GAE与RabbitMQ不具有可比性,因为您的问题几乎没有意义。 RabbitMQ只是消息传递,您很可能必须设置更多基础架构来支持您的用例。 GAE是一个完整的基础设施。 也就是说,RabbitMQ每秒可以处理大量的消息。 也许你想为手机游戏连接到一个API,以及一些应用程序逻辑来处理这些消息。 您不会让游戏客户端连接到您的RabbitMQ服务器并直接与其他客户端通信。 在GAE上,您通常会有请求并立即回复。 如果您需要持续时间较长的连接并允许您将消息推送到游戏客户端(不使用APN等),您可能需要考虑XMP ...
  • 从来源 : 我们还以vFabric™品牌生产商业许可的RabbitMQ版本。 这包括开源版本的所有功能,并包含其他商业上关注的组件。 Pivotal还为vFabric RabbitMQ提供支持协议。 所以基本上,除了不错的打包版本以及所有其他Pivotal软件套件(可能是商业或开源)之外,它几乎是相同的。 RabbitMQ受Apache许可,因此需要遵守其“开源”。 Pivotal提供有关其产品的咨询和培训,而这正是其大部分收入来自的地方。 另一个类似的例子是Cloudera ,它遵循相同的模型。 From ...