全热交换器

理解RabbitMQ中的AMQP-0-9-1模型

时光怂恿深爱的人放手 提交于 2020-02-26 01:55:23
前提 之前有个打算在学习RabbitMQ之前,把AMQP详细阅读一次,挑出里面的重点内容。后来找了下RabbitMQ的官方文档,发现了有一篇文档专门介绍了RabbitMQ中实现的AMQP模型部分,于是直接基于此文档和个人理解写下这篇文章。 AMQP协议 AMQP 全称是Advanced Message Queuing Protocol,它是一个(分布式)消息传递协议,使用和符合此协议的客户端能够基于使用和符合此协议的消息传递中间件代理(Broker,也就是经纪人,个人感觉叫代理合口一些)进行通信。AMQP目前已经推出协议1.0,实现此协议的比较知名的产品有StormMQ、RabbitMQ、Apache Qpid等。RabbitMQ实现的AMQP版本是0.9.1,官方文档中也提供了该协议pdf文本下载,有兴趣可以翻阅一下。 消息中间件代理的职责 Messaging Broker,这里称为消息中间件代理。它的职责是从发布者(Publisher,或者有些时候称为Producer,生产者)接收消息,然后把消息路由到消费者(Consumer,或者有些时候称为Listener,监听者)。 因为消息中间件代理、发布者客户端和消费者客户端都是基于AMQP这一网络消息协议,所以消息中间件代理、发布者客户端和消费者客户端可以在不同的机器上,从而实现分布式通讯和服务解耦。

RabbitMq客户端开发

巧了我就是萌 提交于 2020-02-18 19:32:43
目录 连接RabbitMQ 使用交换器和队列 exchangeDeclare方法详解 QueueDeclare方法详解 queueBind方法详解 exchangeBind方法详解 何时创建 发送消息 消费消息 推模式 拉模式 消费端的确认与拒绝 关闭连接 连接RabbitMQ 下面的代码(代码清单)用来在给定的参数(IP地址、端口号、用户名、密码等)下 连接RabbitMQ: 也可以选择使用URI的方式来实现 Connection可以用来创建多个Channel实例,但是Channel实例不能在线程间共享, 应用程序应该为每一个线程开辟一个Channel。 某些情况下Channel的操作可以并发运行,但 是在其他情况下会导致在网络上出现错误的通信帧交错,同时也会影响发送方确认(publisher confmn)机制的运行(详细可以参考4.8节),所以 多线程间共享Channel实例是非线程安全的 。 Channel或者Connection中有个isOpen方法可以用来检测其是否已处于开启状态。但并 不推荐在生产环境的代码上使用 isOpen方法,这个方法的返回值依赖于shutdownCause (参考下面的代码)的存在,有可能会产生竞争 ,代码清单是isOpen方法的源码: 错误地使用isOpen方法示例代码如代码清单所示。 通常情况下

Springboot 1.5.x 集成基于Centos7的RabbitMQ集群安装及配置

六月ゝ 毕业季﹏ 提交于 2020-01-25 01:19:27
RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。 RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一个Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成。 选择RabbitMQ 市面上有很多MQ可以选择,如:ActiveMQ、ZeroMQ、Apache Qpid及RocketMQ,为什么要选择RabbitMQ呢? 1. 除了Qpid,RabbitMQ是唯一一个实现了AMQP标准的消息服务器; 2. 可靠性,RabbitMQ的持久化支持,保证了消息的稳定性; 3. 高并发,RabbitMQ使用了Erlang开发语言,Erlang是为电话交换机开发的语言,天生自带高并发光环和高可用特性; 4. 集群部署简单,正是应为Erlang使得RabbitMQ集群部署变的超级简单; 5. 社区活跃度高,从网上资料来看,RabbitMQ也是首选 工作机制 1. 消息模型 生产者、消费者和代理 生产者(producer):消息的创建者,负责创建和推送数据到消息服务器; 消费者(consumer):消息的接收方,用于处理数据和确认消息; 代理(proxy):就是RabbitMQ本身,用于扮演“快递”的角色

RabbitMQ核心组件及应用场景

雨燕双飞 提交于 2020-01-24 01:54:03
一、适用场景 1.解耦 2.最终一致性 3.广播 4.错峰与流控(秒杀业务用于流量削峰场景) 秒杀场景 二、核心组件,关键点(交换器、队列、绑定) AMPQ消息路由必要三部分:交换器、队列、绑定。 Java核心组件:ConnectionFactory、Connection、Channel、Delivery、DeliverCallback、CancelCallback 队列 1. 建立连接 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("127.0.0.1"); factory.setPort(5672); factory.setUsername("admin"); factory.setPassword("admin"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); 2. 声明队列 如果在同一条信道上订阅了另一个队列,那就不能再声明队列,必须先取消订阅。 Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,

RabbitMQ安装与原理详解

人走茶凉 提交于 2020-01-18 02:40:32
文章目录 一、概述 1. 什么是消息队列 2. 为什么要使用消息队列 3. RabbitMQ特点 二、安装 1. 安装Erlang 2. 安装RabbitMQ 三、RabbitMQ 1. 启动和关闭 2. 插件管理 3. 用户管理 4. 权限管理 5. vhost管理 6. 设置管理员权限 四、消息发送和接收 1. RabbitMQ消息发送和接收机制 2. AMQP 中的消息路由 3. Exchange与Queue关联绑定 4. Exchange 类型 (1)direct (2)fanout (3)topic 5. Client与Brocker进行连接 五、RabbitMQ镜像集群 1. 准备 2. 配置Cookie文件 3. 配置hosts文件 4. 组建集群 5. 节点类型 一、概述 1. 什么是消息队列 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。 2. 为什么要使用消息队列 从上面的描述中可以看出消息队列是一种应用间的 异步协作机制

RabbitMQ(1)

梦想的初衷 提交于 2020-01-13 04:51:43
文章目录 RabbitMQ 1 基本概念 2 安装 3 核心概念 交换器类型 4 入门demo 客户端开发相关说明 1 exchangeDeclare方法 2 queueDeclare方法 3 消费消息 4 消费的确认与拒绝 5 消息的可靠性投递 消息可靠性投递解决方案 RabbitMQ 1 基本概念 消息 (Message) 是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串、JSON 等,也可以很复杂,比如内嵌对象。 消息队列中间件 (Message Queue Middleware,简称为 MQ) (消息队列或者消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。 两种传递模式:点对点(P2P, Point-to-Point) 模式和发布/订阅 (Pub/Sub) 模式 比较主流的有 RabbitMQ,Kafka,ActiveMQ, RocketMQ等。 面向消息的中间件(简称为 MOM , Message Oriented Middleware) 提供了以松散藕合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的消息中间件通信 。

RabbitMQ 客户端开发向导

假装没事ソ 提交于 2019-12-30 14:39:27
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> AMQP 协议层面的操作通过 Channel 接口实现。Connection 是用来开启 Channel(信道)的,可以注册事件处理器,也可以在应用结束时关闭连接。与 RabbitMQ 相关的开发工作,基本上也是围绕 Connection 和 Channel 这两个类展开的。 连接 RabbitMQ 方式一: ConnectionFactory factory = new ConnectionFactory(); factory.setUsername(USERNAME); factory.setPassword(PASSWORD); factory.setVirtualHost(virtualHost); factory.setHost(ip_address); factory.setPort(Port); Connection conn = factory.newConnection(); 方式二: ConnectionFactory factory = new ConnectionFactory(); factory.setUri("amqp://userName:password@ipAddress:portNumber/virtualHost"); Connection conn = factory

RabbitMQ的一些基本概念

你说的曾经没有我的故事 提交于 2019-12-23 01:04:34
MQ 全称为 Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法,即我们常说的中间件之一,而 RabbitMQ 则是 MQ 的一种开源实现,遵循 AMQP(高级消息队列协议) 协议。 AMQP 相关概念 MQ 的模型从大体上看,都是类似的,如下: 而 RabbitMQ 由于是基于 AMQP 协议的开源实现,AMQP 协议比 MQ 模型有更加详细的模型概念,如下: 生产者发送消息给交换器,交换绑定消息队列,消息队列通过信道传送给消费者。 信道 如果项目需要发布消息,那么必须要链接到 RabbitMQ,而项目于 RabbitMQ之间使用 TCP 连接,加入每次发布消息都要连接TCP,这不仅会造成连接资源严重浪费,会造成服务器性能瓶颈,所以 RabbitMQ 为所有的线程只用一条 TCP 连接,怎么实现的呢?RabbitMQ 引入了信道的概念,所有需要发布消息的线程都包装成一条信道在 TCP 中传输,理论上 一条 TCP 连接支持无限多个信道,模型如下: 队列 消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。 绑定 绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则

RabbitMQ学习之:(三)AMQP和RabbitMQ介绍

丶灬走出姿态 提交于 2019-12-07 15:28:21
准备开始 高级消息队列协议(AMQP 1 )是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS 2 ),AMQP客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器 3 和客户端可以投入使用 4 。 AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件(MOM)系统,例如发布/订阅队列,没有作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一部分,形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。 本文中区别发布/订阅是为了将生产者和消费者拆分开来: 生产者无需知道消费者按照什么标准接受消息 。队列是一个先入先出的数据结构。路由封装了消息队列中的消息的相关信息,这些信息决定了消息在异步消息系统中的最终展现形式。 在这里,我尝试解释一下这个模型的一些概念,Aman Gupta使用Ruby 5 实现了AMQP模型 6 。它使用的是一种事件驱动架构(基于EventMachine 7 ),在阅读和使用的时候都会让人觉得有些不太熟悉

RabbitMQ消息中间件总结一

旧城冷巷雨未停 提交于 2019-12-04 13:27:09
RabbitMQ是采用Erland语言实现AMQP(Advance Message Queuing Protrol,高级消息队列)的消息中间件。RabbitMQ是一个生产者和消费者模型,主要负责接收,存储和转发消息。传递过程类似于你将一个包裹送到邮局,邮局会暂存并最终将邮件通过快递员送到接受人的手上,RabbitMQ就类似于邮局、邮箱、邮递员组成的一个系统。 1.消息中间件是什么 消息:应用之间传送的数据(文本/json等) 消息中间件:message queue Middleware简称MQ。指利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式的集成。通过提供消息传递和消息排队模型。实现进程间的通信 消息队列中间:可称为消息队列或者消息中间件,传递方式分为两种点对点(P2P,Point-to-Potint)模式和发布订阅(Pub/Sub)模式 P2P: 点对点模式基于队列 发送者发送消息到队列,消费者从队列中接收消息 可以异步传输 Pub/Sub: 定义内容节点发布和订阅消息,这个内容节点称为主题,主题可以看作消息传递的中介, 发布者将消息发送到主题,订阅者从主题中订阅消息,从而使订阅和发布相互独立,用于一对多广播 2.作用 解耦 冗余(存储) 扩展 消峰 可恢复性 顺序 缓存 异步 2.生产者、消费者、Broker 生产者:producer