rabbitmq direct 多个消费者_学习笔记29-RabbitMq

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 Requirements​www.rabbitmq.com

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

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

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

6649b598e29fec74e23f01538348759a.png

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

cd081ac3baed3b6feb5b84fcf62343e9.png

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

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

24231d73a77734cb4e79222fd293813a.png

使用Linux的IP地址登录

e00c1fc9d6f29bf82add1447ac5a28a9.png

消息中间件(消息队列)

7d634fb7faf86690039fbb4aced10107.png

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

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

66483002e2ff9939597a3ff3d03ce6b0.png

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

0d9094ac0f3e58d0cf5f6b6cac17d24d.png

创建队列:

74d75e5881963fd79f5c1912a25a0d5a.png

创建生产者和消费者:

fc79d19537509c3418ad9add210b8e01.png

3641762077a7a7d5eca35fe5f3f6b063.png

测试:

c78bc918affe223d90ae5860e336b975.png

4a17b802586442b1325d1ab6c5263f30.png

RabbitMQ原理图:

8bc74d805a27036c36cb411680679bfc.png

16a4a60948bdd6847a529582f9af0f3c.png

---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交换器:

7b7d52a2c04ca5635a8f23c7c7de626e.png

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

562dd0f9af70383b160f15f9c109b3ff.png

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

9ca786a30f5adf7d6effb736666b7833.png

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

414348a01ceea38c8bd32f37efefb51f.png

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

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

f96e0da257304eae6a6d25e23e06ccc3.png

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

c01bb35d0a2994ec330c9e2eafa99b9d.png

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

d8a6a4b7d12e24d81e37a71f4c1f2a6f.png

66c37e5ba99893c60194daf2304369b8.png

Topic交换器:

21c47b7b070682f58f312e242ae177f2.png

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

fanout交换器:

617c01084e2bb5acc4566f64660287d7.png

测试代码略

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

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

fanout则不需要配置路由键。

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

d637dc0d20c4d5e1aaac6e5e9080d3f9.png

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

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

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

RabbitMQ中消息确认机制:ACK

461d2d5dfda7c4fd74e752c14bed2fad.png

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

可以通过配置重试次数

7731fb89c0f45830dffee0894a178f08.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值