消息队列 RabbitMq 的五种形式队列

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.

AMQP(高级消息队列协议)是一个异步消息传递所使用应用层协议规范,为面向消息中间件设计,基于此协议的客户端与消息中间件可以无视消息来源传递消息,不受客户端、消息中间件、

不同的开发语言环境等条件的限制

概念解释:

Server(Broker):接收客户端连接,实现 AMQP 协议的消息队列和路由功能的进程;

Virtual Host:虚拟主机的概念,类似权限控制组,一个 Virtual Host 里可以有多个 Exchange 和 Queue。

Exchange:交换机,接收生产者发送的消息,并根据 Routing Key 将消息路由到服务器中的队列 Queue。

ExchangeType:交换机类型决定了路由消息行为,RabbitMQ 中有三种类型 Exchange,分别是 fanout、direct、topic;

Message Queue:消息队列,用于存储还未被消费者消费的消息;

Message:由 Header 和 body 组成,Header 是由生产者添加的各种属性的集合,包括 Message 是否被持久化、优先级是多少、由哪个 Message Queue 接收等;body 是真正需要发送的数据内容;

BindingKey:绑定关键字,将一个特定的 Exchange 和一个特定的 Queue 绑定起来。

一、点对点的队列

生产者实现思路

创建连接工厂 ConnectionFactory,设置服务地址 127.0.0.1,端口号 5672,设置用户名、密码、virtual host,从连接工厂中获取连接 connection,使用连接创建通道 channel,使用通道 channel 创建队列 queue,使用通道 channel 向队列中发送消息,关闭通道和连接。

消费者实现思路

创建连接工厂 ConnectionFactory,设置服务地址 127.0.0.1,端口号 5672,设置用户名、密码、virtual host,从连接工厂中获取连接 connection,使用连接创建通道 channel,使用通道 channel 创建队列 queue, 创建消费者并监听队列,从队列中读取消息。

二、工作队列模式 Work Queue

功能描述:一个生产者发送消息到队列中,有多个消费者共享一个队列,每个消费者获取的消息是唯一的。

为了保证服务器同一时刻只发送一条消息给消费者,保证资源的合理利用。channal.basicQos(1); 这样是为了保证多个消费者接收的消息数量不一样,能者多劳,如果不设置,那么消费者是平均分配消息(例如 10 条消息,每个消费者接收 5 条)

三、发布 / 订阅模式 Publish/Subscribe

这个可能是消息队列中最重要的队列了,其他的都是在它的基础上进行了扩展。

功能实现:一个生产者发送消息,多个消费者获取消息(同样的消息),包括一个生产者,一个交换机,多个队列,多个消费者。

思路解读(重点理解):

(1)一个生产者,多个消费者

(2)每一个消费者都有自己的一个队列

(3)生产者没有直接发消息到队列中,而是发送到交换机

(4)每个消费者的队列都绑定到交换机上

(5)消息通过交换机到达每个消费者的队列

ps:交换机没有存储消息功能,如果消息发送到没有绑定消费队列的交换机,消息则丢失。

四、路由模式 Routing

功能:生产者发送消息到交换机并指定一个路由 key,消费者队列绑定到交换机时要制定路由 key(key 匹配就能接受消息,key 不匹配就不能接受消息),例如:我们可以把路由 key 设置为 insert ,那么消费者队列 key 指定包含 insert 才可以接收消息,消费者队列 key 定义为 update 或者 delete 就不能接收消息。很好的控制了更新,插入和删除的操作。

五、通配符模式 Topics

说明:此模式实在路由 key 模式的基础上,使用了通配符来管理消费者接收消息。生产者 P 发送消息到交换机 X,type=topic,交换机根据绑定队列的 routing key 的值进行通配符匹配;

符号#:匹配一个或者多个词 lazy.# 可以匹配 lazy.irs 或者 lazy.irs.cor

符号:只能匹配一个词 lazy. 可以匹配 lazy.irs 或者 lazy.cor

总结

RabbitMQ 提供了 6 种模式,分别是 HelloWorld,Work Queue,Publish/Subscribe,Routing,Topics,RPC Request/reply,本文详细讲述了前 5 种,并给出代码实现和思路。其中 Publish/Subscribe,Routing,Topics 三种模式可以统一归为 Exchange 模式,只是创建时交换机的类型不一样,分别是 fanout、direct、topic。Spring 提供了 rabbitmq 的一个实现,所以集成起来很方便,文章第 4 章给出了订阅者模式的一种 spring 配置。

来源: http://blog.ituac.com

原文地址:https://www.cnblogs.com/ituac/p/10026449.html

时间: 2024-08-25 13:55:55

消息队列 RabbitMq 的五种形式队列的相关文章

消息队列rabbitmq的五种工作模式(go语言版本)

前言:如果你对rabbitmq基本概念都不懂,可以移步此篇博文查阅消息队列RabbitMQ 一.单发单收 二.工作队列Work Queue 三.发布/订阅 Publish/Subscribe 四.路由Routing 五.Topic类型的exchange 六.rabbitmq部分封装代码及装备工作 一.单发单收 在下图中,“ P”是我们的生产者,“ C”是我们的消费者.中间的框是一个队列-RabbitMQ代表使用者保留的消息缓冲区. 单发单收模式下:一发一收 发送端只需要创建队列,然后向队列发送消

rabbitmq的五种工作模式

abbitmq的五种工作模式 原文地址:https://www.cnblogs.com/Jeely/p/10784172.html

MySQL子查询有哪五种形式?

MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品.MySQL是最流行的关系型数据库管理系统之一,在web应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件. mysql从4.1版开始支持子查询功能,在此版本前,可以用join写连表查询来进行替代,但不推荐这么写,相当的麻烦.以下是mysql子查询的几种常见写法: 1.select*fromxxxwherecol=

方法中的参数的五种形式

方法的基本的语法格式为: [作用域] 返回类型 方法名(参数1类型 参数1,参数2类型 参数2……) { //方法体 } 形参和实参这两个概念针对的是值类型的参数,对于引用参数则不存在这个问题. 首先,区分形参和实参 Example: public int Foo(int i) { //方法体 } //调用Foo方法 int a = 0; a = Foo(a); 在这个例子中,i是形参:a是实参. 其次,区分值参数.引用参数.输出参数.数组类型参数 值参数(Value parameter): E

SpringBoot(八) Spring和消息队列RabbitMQ

概述 1.大多数应用中,可以通过消息服务中间件来提升系统异步能力和拓展解耦能力. 2.消息服务中的两个重要概念:消息代理(Message broker)和目的地(destination) 当消息发送者发送消息后,将由消息代理接管,消息代理保证消息传递到指定目的地. 3.消息队列主要有两种形式的目的地: 队列:点对点方式通信(point-to-point) 主题:发布/订阅消息服务 点对点式:消息发送者发送消息后,消息代理将其放入一个队列中,消息接受者从队列中读取数据,接受者接收数据后,将消息移除

RabbitMQ五种工作模式学习总结

一.简介最近,在看一些消息中间件的内容,之前都没有好好学习一下消息中间件.本文将对RabbitMQ中五种常用的工作模式做一个简单的介绍和总结.RabbitMQ常用的工作模式有:简单队列模式.工作队列模式.发布订阅模式.路由模式.主题模式.本文参照RabbitMQ官网示例总结,详细可以到官网查看:https://www.rabbitmq.com/getstarted.html. 二.简单队列模式(Simple Queue) [a]模型图:只包含一个生产者以及一个消费者,生产者Producer将消息

云计算openstack共享组件-消息队列rabbitmq(2)

一.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.   消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.   排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.

(转)(二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念

http://blog.csdn.net/super_rd/article/details/70238869 没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. RabbitMQ架构 说是架构其实更像是应用场景下的架构(自己画的有点丑,勿嫌弃) 从图中可以看出RabbitMQ主要由Exchange和Queue两部分组成,然后通过RoutingKey关联起来,消息投递到Exchange然后通过Queue接收. RabbitMQ消息队列基本概

【RabbitMQ】——5种队列(转)

原文地址:https://blog.csdn.net/u012654963/article/details/76417613 应用RabbitMQ,我们可以根据需求选择5种队列之一. 一.简单队列 P:消息的生产者 C:消息的消费者 红色:队列 简单队列的生产者和消费者关系一对一 但有时我们的需求,需要一个生产者,对应多个消费者,那就可以采用第二种模式 二.Work模式 一个生产者.2个消费者. 但MQ中一个消息只能被一个消费者获取.即消息要么被C1获取,要么被C2获取.这种模式适用于类似集群,