RabbitMQ的简单认识
来源:互联网 发布:断点续传java 编辑:程序博客网 时间:2024/06/06 14:17
轮询与订阅的解释:
轮询:是队列与消费者的关系,一个队列对应多个交换机,此时为轮询。
订阅:是交换机与队列得关系,一个交换机绑定多个队列,此时为队列。
RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
消息(Message)由Client发送,RabbitMQ接收到消息之后通过交换机转发到对应的队列上面。Worker会从队列中获取未被读取的数据处理。
交换机
RabbitMQ包含四种不同的交换机类型:
Direct exchange:直连交换机,转发消息到routigKey指定的队列
Fanout exchange:扇形交换机,转发消息到所有绑定队列(速度最快)
Topic exchange:主题交换机,按规则转发消息(最灵活)
Headers exchange:首部交换机 (未接触)
Fanout扇形交换机
扇形交换机是最基本的交换机类型,它做的事情很简单--广播信息。Fanout交换机会把接收到的消息全部转发到绑定的队列上。因为广播不需要“思考”,所以Fanout交换机是四种交换机中速度最快的。
适用场景:需要随时增加减少业务处理的队列,例如注册、下单等功能需要增加送积分功能,只需要增加一个绑定到交换机的队列去处理新业务,无需修改旧的业务逻辑,从而达到业务解耦,非常容易扩展。
Direct直连交换机:
直连交换机是一种带路由功能的交互机,一个队列通过routing_key与一个交换机绑定,当消息被发送的时候,需要指定一个routing_key,这个消息被送达交换机的时候,就会被交换机送到指定的队列里面去。同样一个routing_key也是支持应用到多个队列中的,当一个交换机绑定多个队列时,消息就会被送到对应的队列去处理。
适用场景:有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。
Topic主题交换机:
直连交换机的routing_key方案非常简单,如果我们希望一条消息发送给多个队列,那么这个交换机需要绑定上非常多的routing_key,假设每个交换机上都绑定一堆的routing_key连接到各个队列上。那么消息队列的管理就会异常的困难。
所以RabbitMQ提供了一种主题交换机,发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规则将数据发送到对应的(多个)队列上。
主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用*.#.*.....的格式,每个部分用.分开,其中:
*表示一个单词
#表示任意数量(零个或多个)单词。
假设有一条消息的routing_key为fast.rabbit.white,那么带有这样binding_key的几个队列都会接收这条消息:
fast..
..white
fast.#
……
下图来源于网上,感觉对主题交换机的描述比较到位:
- RabbitMQ的简单认识
- rabbitMQ简介&重要类的认识
- RabbitMQ(二) java简单的实现RabbitMQ
- RabbitMQ 简单易懂的介绍
- java简单的实现RabbitMQ
- rabbitmq的简单使用(1)
- rabbitmq的简单使用(2)
- rabbitmq的简单使用(3)
- java简单的实现RabbitMQ
- [c#]RabbitMQ的简单使用
- OpenSocial 的简单认识
- ERRORLEVEL 的简单认识
- NSRunloop的简单认识
- 循环的简单认识
- AOP的简单认识
- NSRunloop的简单认识
- Fastjson的简单认识
- NSRunloop的简单认识
- RobotFramework自动化测试框架系统关键字之断言
- 使用UIActivityViewController分享时,限制分享
- Android端通过usb和pc端互传json数据
- 进程的终止
- Masonry介绍与使用实践
- RabbitMQ的简单认识
- Android自定义控件
- lvm简单认识(学新内容会更新)
- Python函数参数传递的*args和**kwargs
- 帮助命令
- sed 常用方式整理
- MyBatis学习笔记(二)
- 详解MVC设计模式
- Makefile中include、-include、sinclude的区别