RabbitMQ的基础概念

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。

    


发布了45 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_15006743/article/details/80678201