ERROR: certificate common name “Cloudflare - The Web Performance & Security Company
| Cloudflare ” doesn’t match requested host name “Messaging that just works”.

在命令后加入:--no-check-certificate

安装Rabbitmq时要先安装erlang,而且这两个版本要相互匹配,具体见官网说明:


RabbitMQ Erlang Version Requirementswww.rabbitmq.com

安装步骤网上已经有很多,这里随便找一个亲测安装成功的


CentOS7 安装RabbitMQ - 山高我为峰 - 博客园www.cnblogs.com


python rabbitmq多个消费者 rabbitmq direct 多个消费者_消息队列


安装之后启动命令sbin/ ./rabbitmq-server -detached 后台启动


python rabbitmq多个消费者 rabbitmq direct 多个消费者_TCP_02


启动之后安装web管理界面插件:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_TCP_03


默认使用guest用户远程登录会failed,只能本机登录,添加用户登录

添加用户,赋予角色,赋予权限


python rabbitmq多个消费者 rabbitmq direct 多个消费者_TCP_04


使用Linux的IP地址登录


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_05


消息中间件(消息队列)


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_06


可以将消息队列理解为一个商店,不同的生产商将产品放到超市中,超市中有不同的货架分类,类似于不同的信道,不同的人们来这里买不同的商品。

编写RabbitMQ的入门案例:创建项目,添加依赖


python rabbitmq多个消费者 rabbitmq direct 多个消费者_TCP_07


修改配置文件,连接到RabbitMQ:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_08


创建队列:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_消息队列_09


创建生产者和消费者:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_10


python rabbitmq多个消费者 rabbitmq direct 多个消费者_TCP_11


测试:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_消息队列_12


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_13


RabbitMQ原理图:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_消息队列_14


python rabbitmq多个消费者 rabbitmq direct 多个消费者_消息队列_15


---Message:消息。消息时不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列可选属性组成,这些属性包括:routing-key、priority(相对于其他消息的优先权)、delivery-mode(指出消息可能持久性存储)等。

---Publisher:消息的生产者。也是一个向交换器发布消息的客户端应用程序。

---Consumer:消息的消费者。表示一个从消息队列中取得消息的客户端应用程序。

---Exchange:交换器。用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

常用的交换器:

1、direct(发布与订阅,完全匹配)

2、fanout(广播)

3、topic(主题,规则匹配)

---Binding:绑定。用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。

---Queue:消息队列。用来保存消息知道发送给消费者。它是消息的容器,也是消息的终点。一个消息可以投入一个或者多个队列,消息一直在队列里面,等待消费者连接到这个队列将其取出。

---Routing-key:路由键。RabbitMQ决定消息投递到哪个队列的规则。

队列通过路由键绑定到交换器。消息发送到MQ服务器时,消息将拥有一个路由键,即使是空的,RabbitMQ也会将其和绑定使用的路由键进行匹配。如果匹配,消息将会投递到该队列,如果不匹配,消息将会进入黑洞。

---Connection:链接。指rabbit服务器和服务建立的TCP连接。

---Channel:信道。

1、是TCP里面的虚拟连接,一条TCP连接上创建多条信道是没有问题的。

2、TCP一旦打开,就会创建AMQP信道。

3、发布消息、接收消息、订阅队列等动作都是通过信道来完成的。

---Virtual Host:虚拟主机。表示一批交换器,消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。

每个vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器、绑定和权限机制。vhost是AMQP的基础,必须在连接时指定,默认是/

---Broker:表示消息队列服务器实体。

------交换器和队列的关系:

交换器是通过路由键和队列绑定在一起的,如果消息拥有的路由键和队列和交换器的路由键匹配,那么消息就会被路由到该绑定的队列中。路由键可以理解为匹配的规则。

RabbitMQ需要信道的原因:

1、TCP的创建和销毁开销较大,需要三次握手和四次挥手。

2、如果不用信道,那应用程序就会以TCP连接RabbitMQ,高峰时创建的连接会造成资源的巨大浪费,而且操作系统每秒处理TCP连接数也是有限制的。

3、信道的原理是一条线程一条信道,多条线程多条信道共用一条TCP连接。一条TCP连接可以容纳无限的信道。

RabbitMQ入门案例之Direct交换器:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_16


创建服务端:新建Spring Boot项目,添加依赖:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_消息队列_17


在配置文件中自定义配置:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_TCP_18


创建服务发布端:将配置中的路由键和交换器以及要发送的消息通过AmqpTemplate发送出去。


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_19


创建Spring Boot项目的消费端,添加依赖

编写配置文件,和服务端的交换器以及路由键保持一致


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_20


新建监听类,将配置中的值通过注解绑定到监听器中,包括交换器、路由键、消息队列的名称


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_21


在服务端创建测试类,测试:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_22


python rabbitmq多个消费者 rabbitmq direct 多个消费者_TCP_23


Topic交换器:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_24


测试代码在direct的基础上稍作修改即可。

fanout交换器:


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_25


测试代码略

direct交换器在编写测试代码时需要在配置文件中配置交换器、路由键、消息队列,服务端只需要配置交换器和路由键即可,消费端则都需要进行配置。

topic交换器在编写测试代码时可以不在配置文件中配置路由键,而是在测试代码中使用通配,同样的路由键配置在消费端。

fanout则不需要配置路由键。

消息持久化:保证消息的可靠性


python rabbitmq多个消费者 rabbitmq direct 多个消费者_消息队列_26


@Queue注解中的autodelete属性表示当消费端停止服务时,该队列是否自动删除

@Exchange注解中的该属性表示当消费端停止服务时,交换器是否自动删除

true表示删除,false表示不删除

RabbitMQ中消息确认机制:ACK


python rabbitmq多个消费者 rabbitmq direct 多个消费者_TCP_27


可以使用try-catch来捕获异常

可以通过配置重试次数


python rabbitmq多个消费者 rabbitmq direct 多个消费者_配置文件_28


还有很多相关的配置正在学习中。。。