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代表一个会话任务


相关问答

更多

验证rabbitmq的版本(Verify version of rabbitmq)

sudo rabbitmqctl状态 并寻找看起来像这样的行: {兔, “RabbitMQ的”, “2.6.1”}, sudo rabbitmqctl status and look for line that looks like that: {rabbit,"RabbitMQ","2.6.1"},

java框架技术简介

重点推荐spring框架,非常实用。 基本上把所有事情都做了,只剩下业务逻辑留给你自己实现。

RabbitMQ重新排序消息(RabbitMQ reordering messages)

由于没有答复,我想我做得很好;) 无论如何,在与其他利益相关者讨论要求后,决定现在可以放弃LIFO要求。 当涉及到它时,我们可以担心。 我们可能最终采用的解决方案是让工作人员打开第二个队列,让主人可以使用该队列让工作人员知道要忽略哪些工作,并提供额外的控制/监视信息(无论如何我们都需要这些信息)。 实现AMQP 1.0规范的RabbitMQ也可能对此有所帮助。 所以我会把这个问题标记为现在的答案。 其他人仍然可以自由添加或改进。 Since there is no reply I guess I ...

Wildfly的RabbitMQ配置(RabbitMQ configuration for Wildfly)

我的赏金即将到期,直到现在我还没有看到帮助。 所以,我按照我的经验回答。 来自问题: 任何帮助,即使答案是 - 这是不可能的 - 会很好。 不知道,但我们不需要那样做。 为此我找到了解决办法。 答案是 运行RABBITMQ的自有服务器 我跟着这个链接在Ubuntu服务器上安装它。 然后我阅读这些真棒和简单的教程。 这六个教程是开始的很好的基础。 我现在将该项目与在Wildfly 9服务器上运行的Java EE项目集成。 祝好运的人都来到了这里。 欢迎任何有建设性的编辑和答案。 My bounty ...

使用RabbitMQ与Plone - 芹菜还是不?(Using RabbitMQ with Plone - Celery or not?)

首先,问问你自己,如果你需要RabbitMQ的功能,或者只想用Plone在Python中完成一些异步任务。 如果你真的不需要RabbitMQ,你可以看看David Glick的要点:如何将Celery和Plone集成在一起(并且仍然使用RabbitMQ和Celery): https://gist.github.com/davisagli/5824662 https://gist.github.com/davisagli/5824709 您还可以查看collective.taskqueue (没有C ...

相关文章

更多

最近更新

更多