赞
踩
1、RabbitMQ的介绍
RabbitMQ是消息中间件中的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件,这些软件有很多,包括ActiveMQ(apache公司的)、RocketMQ(阿里巴巴公司的,现已转让给apache公司)。
从上图可看出,对于消息队列来说,生产者、消息队列、消费者是最重要的三个概念,生产者发送消息到消息队列去,消费者监听置顶的消息队列,并当消息队列收到消息之后,接收消息队列传来的消息,并且给予回应的处理。消息队列常用于分布式系统之间项目消息的传递。
通过举例看RabbitMQ的优点:
用户注册后,需要发送注册邮件和注册短信(邮件和短信并非是必须的,不需要让客户端等待响应)
串行:注册->邮件->短信
并行:注册->邮件/短信
队列:注册->队列(引入消息队列后,把发送邮件、短信不是必须的业务逻辑异步处理,写入队列的时间可以忽略不计的)
优点:当系统挂了,也不会存在消息丢失情况 能缓解短时间的高流量压垮应
2、RabbitMQ的基础概念:
Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输,
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息的载体,每个消息都会被投到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来.
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离。
Producer:消息生产者,就是投递消息的程序.
Consumer:消息消费者,就是接受消息的程序.
Channel:消息通道,在客户端的每个连接里,可建立多个channel.
通俗而言:交换机使得消费者、消息队列、生产者这三个模块分离,生产者将消息发送给交换机,交换机根据调度策略把相应的消息转发给对应的消息队列。
3、调度策略
Direct Exchange:直接匹配,通过Exchange名称+RountingKey来发送与接收消息.
Fanout Exchange:广播订阅,向所有的消费者发布消息,但是只有消费者将队列绑定到该路由器才能收到消息,忽略Routing Key.
Topic Exchange:主题匹配订阅,这里的主题指的是RoutingKey,RoutingKey可以采用通配符,如:*或#,RoutingKey命名采用.来分隔多个词,只有消息这将队列绑定到该路由器且指定RoutingKey符合匹配规则时才能收到消息;
Headers Exchange:消息头订阅,消息发布前,为消息定义一个或多个键值对的消息头,然后消费者接收消息同时需要定义类似的键值对请求头:(如:x-mactch=all或者x_match=any),只有请求头与消息头匹配,才能接收消息,忽略RoutingKey.
默认的exchange:如果用空字符串去声明一个exchange,那么系统就会使用”amq.direct”这个exchange,我们创建一个queue时,默认的都会有一个和新建queue同名的routingKey绑定到这个默认的exchange上去
例如:
如果有两个接收程序都是用了同一个的queue和相同的routingKey去绑定direct exchange的话,分发的行为是负载均衡的,也就是说第一个是程序1收到,第二个是程序2收到,以此类推。
如果有两个接收程序用了各自的queue,但使用相同的routingKey去绑定direct exchange的话,分发的行为是复制的,也就是说每个程序都会收到这个消息的副本。行为相当于fanout类型的exchange。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。