spring-boot 整合RabbitMQ 消息队列基础笔记(一)

1. RabbitMQ简介

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种语言平台的客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等.

用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

   通常我们谈到消息队列, 会有三个概念: 消息生产者(Provider)、队列(Queue)、消息消费者(Consumer),RabbitMQ 在这个基本概念上, 多做了一层抽象, 在消息生产者和队列之间, 加入了交换器 (Exchange)。这样消息生产者和队列就没有直接联系, 变成消息生产者把消息发送给交换器, 交换器根据调度策略再把消息发送给队列。

在这里插入图片描述

左侧P代表消息生产者,也就是往RabbitMQ发消息的程序。中间即是RabbitMQ,其中包括交换机(Exchange)和队列(Queue)。右侧C代表消费者,也就是往RabbitMQ拿消息的程序。其中比较重要的概念有:虚拟主机(Virtual Host)、交换机(Exchange)、队列(Queue)、绑(Binding)。

1. 虚拟主机(Virtual Hosts)

    在上面已经说明如何为一个用户创建一个Virtual Host,一个虚拟主机持有一组交换机、队列和绑定。在RabbitMQ当中,用户只能在虚拟主机这个粒度上进行权限的控制。 如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。每一个RabbitMQ服务器都有一个默认的虚拟主机“/”。

2.交换机(Exchange)

    交换机的功能主要是接收消息并且根据转发策略转发到对应的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误,这个ack模式后面再详细讨论。交换机有四种类型:Direct, topic, Headers and Fanout

3.队列(Queue)

    队列用于存放消息的载体,一般是和交换机进行绑定,交换机根据转发策略把消息转发到队列里。

4.绑定(Binding)

    也就是交换机需要和队列相绑定,这其中如上图所示,是多对多的关系。

5.交换机类型介绍

   1. Direct Exchange:

    direct 类型的行为是”先匹配, 再投送”. 即在绑定时设定一个binding_key, 消息的routing_key与binding_key匹配时, 才会被交换器投送到绑定的队列中去.

   2. Topic:

    转发消息主要是根据通配符。 在这种交换机下,队列和交换机的绑定会定义一种路由模式,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发消息。

   1.路由键必须是一串字符,用句号(.)隔开,比如说 topic.message,或者 topic.message.detail 等。
   2.路由模式必须包含一个星号(),主要用于匹配路由键指定位置的一个单词,比如说,一个路由模式是这样:topic.,那么就只能匹配路由键是:topic.message、topic.other等,第一个单词是 topic,第二个单词可以是任意一个单词。 井号(#)就表示一个或者多个单词,例如一个匹配模式是topic.#,那么可以匹配到例如:topic.message、topic.message.detail等,以topic.开头的路由键都可以匹配到。

   3. Fanout:

    Fanout类型类似于消息广播,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略。

   4. Headers:

    设置header attribute参数类型的交换机

猜你喜欢

转载自blog.csdn.net/qq_39658059/article/details/88943557