消息队列RabbitMq的五种形式队列
来源:互联网 发布:js去除数组重复元素 编辑:程序博客网 时间:2024/06/10 13:30
MQ全称为Message Queue,消息队列是系统之间的通信方法;
RabbitMQ是开源的,实现了AMQP协议的,采用Erlang(面向并发编程语言)编写的,可复用的企业级消息系统;
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绑定起来。
1.点对点的队列
功能:一个生产者P发送消息到队列Q,一个消费者C接收
生产者实现思路:
创建连接工厂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, 创建消费者并监听队列,从队列中读取消息。
2 工作队列模式Work Queue
3 发布/订阅模式Publish/Subscribe
功能实现:一个生产者发送消息,多个消费者获取消息(同样的消息),包括一个生产者,一个交换机,多个队列,多个消费者。
思路解读(重点理解):
(1)一个生产者,多个消费者
(2)每一个消费者都有自己的一个队列
(3)生产者没有直接发消息到队列中,而是发送到交换机
(4)每个消费者的队列都绑定到交换机上
(5)消息通过交换机到达每个消费者的队列
注意:交换机没有存储消息功能,如果消息发送到没有绑定消费队列的交换机,消息则丢失。
4 路由模式Routing
5 通配符模式Topics
说明:此模式实在路由key模式的基础上,使用了通配符来管理消费者接收消息。生产者P发送消息到交换机X,type=topic,交换机根据绑定队列的routing key的值进行通配符匹配;
符号#:匹配一个或者多个词lazy.# 可以匹配lazy.irs或者lazy.irs.cor
符号*:只能匹配一个词lazy.* 可以匹配lazy.irs或者lazy.cor
6.spring集成rabbitmq配置
提供了AMQP的一个实现,并且spring-rabbit是RabbitMQ的一个实现,下面给出订阅者模式的事例配置如下:
7.总结
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配置。
- 消息队列RabbitMq的五种形式队列
- RabbitMQ五种消息队列学习(五)--路由模式
- SpringBoot的RabbitMQ消息队列: 五、第四模式"Routing"
- SpringBoot的RabbitMQ消息队列: 五、第四模式"Routing"
- RabbitMQ五种消息队列学习(三)--Work模式
- RabbitMQ消息队列(五):RPC远程调用
- 消息队列RabbitMQ的安装
- RabbitMQ消息队列的总结
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由(转)
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由[转]
- C++ 回调函数
- node 的npm 到GitHub上下载vue的开源项目
- JavaScript关于1,0,数字与boolean之间的关系
- “Beginning Python”(四)“Instant Markup 1”
- 修改input的file控件的样式,但是不修改他本身的属性
- 消息队列RabbitMq的五种形式队列
- 第10章 沟通障碍
- arkit-tictactoe:ARKit 外加简单交互,实现 AR 场景的三连棋游戏演
- EditText 设置点击事件
- canvas实现图片围绕左上角一点进行旋转
- 阿里巴巴2016研发工程师笔试题(四)
- 第八章 符号连接与硬连接
- rust 变量基础
- 【Linux 虚拟机】关于Win7与虚拟机Linux互通ping的网络设置