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![7ec28fa35b55f5fdf2b82c894312421d.png](https://i-blog.csdnimg.cn/blog_migrate/5c385b7a4f9276d570f5834219f4f859.png)
安装之后启动命令sbin/ ./rabbitmq-server -detached 后台启动
![6649b598e29fec74e23f01538348759a.png](https://i-blog.csdnimg.cn/blog_migrate/b39c318967c97c067eef4b5c78e7ffcd.png)
启动之后安装web管理界面插件:
![cd081ac3baed3b6feb5b84fcf62343e9.png](https://i-blog.csdnimg.cn/blog_migrate/9224d0d964ff5e8a9f20b8eb44e252d8.png)
默认使用guest用户远程登录会failed,只能本机登录,添加用户登录
添加用户,赋予角色,赋予权限
![24231d73a77734cb4e79222fd293813a.png](https://i-blog.csdnimg.cn/blog_migrate/73e51b1eb91a9978e7a50c9969af8697.jpeg)
使用Linux的IP地址登录
![e00c1fc9d6f29bf82add1447ac5a28a9.png](https://i-blog.csdnimg.cn/blog_migrate/3a695bc3fabd0aea883498857ffdce2c.jpeg)
消息中间件(消息队列)
![7d634fb7faf86690039fbb4aced10107.png](https://i-blog.csdnimg.cn/blog_migrate/9d1e4ed4f8417590bf7a06f5fff9a8b5.jpeg)
可以将消息队列理解为一个商店,不同的生产商将产品放到超市中,超市中有不同的货架分类,类似于不同的信道,不同的人们来这里买不同的商品。
编写RabbitMQ的入门案例:创建项目,添加依赖
![66483002e2ff9939597a3ff3d03ce6b0.png](https://i-blog.csdnimg.cn/blog_migrate/8a3ded7f278b21d65c13176bbcf232f4.jpeg)
修改配置文件,连接到RabbitMQ:
![0d9094ac0f3e58d0cf5f6b6cac17d24d.png](https://i-blog.csdnimg.cn/blog_migrate/c0f012ebd10546d8d1cabb98aac7fd48.jpeg)
创建队列:
![74d75e5881963fd79f5c1912a25a0d5a.png](https://i-blog.csdnimg.cn/blog_migrate/cbec9656b683a2121a5c15cfb932a74e.jpeg)
创建生产者和消费者:
![fc79d19537509c3418ad9add210b8e01.png](https://i-blog.csdnimg.cn/blog_migrate/5dc56cdbd33a87e373a0599f00dd3bc6.jpeg)
![3641762077a7a7d5eca35fe5f3f6b063.png](https://i-blog.csdnimg.cn/blog_migrate/e2008d8308183b4b74831862f569995a.jpeg)
测试:
![c78bc918affe223d90ae5860e336b975.png](https://i-blog.csdnimg.cn/blog_migrate/0ddf9ab7678f02855c6adeae2736c5ff.jpeg)
![4a17b802586442b1325d1ab6c5263f30.png](https://i-blog.csdnimg.cn/blog_migrate/84e334b0480240ca17af9a9efa54be60.png)
RabbitMQ原理图:
![8bc74d805a27036c36cb411680679bfc.png](https://i-blog.csdnimg.cn/blog_migrate/1f1368cf299c38aeed73978257215171.jpeg)
![16a4a60948bdd6847a529582f9af0f3c.png](https://i-blog.csdnimg.cn/blog_migrate/f47195fcfd8a94c4ef1ecccfed88ed8e.jpeg)
---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](https://i-blog.csdnimg.cn/blog_migrate/ec1992295fbb98f37922c93ede106bdf.jpeg)
创建服务端:新建Spring Boot项目,添加依赖:
![562dd0f9af70383b160f15f9c109b3ff.png](https://i-blog.csdnimg.cn/blog_migrate/51839ea27d6c64c66c981f5540f791c4.jpeg)
在配置文件中自定义配置:
![9ca786a30f5adf7d6effb736666b7833.png](https://i-blog.csdnimg.cn/blog_migrate/fc8a7812e2e9b0a5ae81dae93acccb9d.jpeg)
创建服务发布端:将配置中的路由键和交换器以及要发送的消息通过AmqpTemplate发送出去。
![414348a01ceea38c8bd32f37efefb51f.png](https://i-blog.csdnimg.cn/blog_migrate/c7090f0742792dfb87250992c6297190.jpeg)
创建Spring Boot项目的消费端,添加依赖
编写配置文件,和服务端的交换器以及路由键保持一致
![f96e0da257304eae6a6d25e23e06ccc3.png](https://i-blog.csdnimg.cn/blog_migrate/79173d02c012bc7491f8bf201f99c86e.jpeg)
新建监听类,将配置中的值通过注解绑定到监听器中,包括交换器、路由键、消息队列的名称
![c01bb35d0a2994ec330c9e2eafa99b9d.png](https://i-blog.csdnimg.cn/blog_migrate/1c87ac7c2fdb161b85d8c2223dc81a3d.jpeg)
在服务端创建测试类,测试:
![d8a6a4b7d12e24d81e37a71f4c1f2a6f.png](https://i-blog.csdnimg.cn/blog_migrate/f90799f7ab68cf6d7de9efb1a9782073.png)
![66c37e5ba99893c60194daf2304369b8.png](https://i-blog.csdnimg.cn/blog_migrate/88db70e23376588dfb6fcb9e3732ad35.png)
Topic交换器:
![21c47b7b070682f58f312e242ae177f2.png](https://i-blog.csdnimg.cn/blog_migrate/7812941b0d3c34e3ef528966141577f0.jpeg)
测试代码在direct的基础上稍作修改即可。
fanout交换器:
![617c01084e2bb5acc4566f64660287d7.png](https://i-blog.csdnimg.cn/blog_migrate/e9d05c47567aaaa8aec2c849d89fbb54.jpeg)
测试代码略
direct交换器在编写测试代码时需要在配置文件中配置交换器、路由键、消息队列,服务端只需要配置交换器和路由键即可,消费端则都需要进行配置。
topic交换器在编写测试代码时可以不在配置文件中配置路由键,而是在测试代码中使用通配,同样的路由键配置在消费端。
fanout则不需要配置路由键。
消息持久化:保证消息的可靠性
![d637dc0d20c4d5e1aaac6e5e9080d3f9.png](https://i-blog.csdnimg.cn/blog_migrate/dddfbcba9c3dac648aebc2a603a03d14.jpeg)
@Queue注解中的autodelete属性表示当消费端停止服务时,该队列是否自动删除
@Exchange注解中的该属性表示当消费端停止服务时,交换器是否自动删除
true表示删除,false表示不删除
RabbitMQ中消息确认机制:ACK
![461d2d5dfda7c4fd74e752c14bed2fad.png](https://i-blog.csdnimg.cn/blog_migrate/75be24e1965a608787241b838ec50d78.jpeg)
可以使用try-catch来捕获异常
可以通过配置重试次数
![7731fb89c0f45830dffee0894a178f08.png](https://i-blog.csdnimg.cn/blog_migrate/3d2ea2f3856f9a81355ff82aa3307495.jpeg)
还有很多相关的配置正在学习中。。。