当前位置:首页 > 标签
SpringBoot 14 Spring 2 SpringMVC 3 MyBatis 2 Linux 4 阿里云 13 宝塔 1 Docker 3 ElasticSearch 2 Redis 4 Shiro 0 Dubbo 0 Swagger 0 Thymeleaf 6 数据库 11 MySQL 11 外键 2 Gradle 1 Test 0 Tomcat 1 JavaWeb 7 Ajax 1 注解 3 css 2 报错 3 多数据源 1 Java基础 1 源码 2 Servlet 1 JSP 1 环境搭建 8 RabbitMQ 1 七牛云 1 Edit.md 1 图像识别 4 英语 2 Zookeeper 1RabbitMQ的安装(Docker),基本介绍以及整合SpringBoot
- 2020-05-05
- 171
- SpringBoot
## RabbitMQ的安装,通过Docker安装
#####(1)去到 Docker Hub官网,搜索 RabbitMQ
尽量安装带 management 的,我这里安装的是 3.8 版本的

执行安装 `docker pull rabbitmq:3.8-management`

#####(2)安装完成之后启动 RabbitMQ
启动 RabbitMQ
`docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq fa535c4b51fe`
- -d 表示后台启动
- -p 表示端口映射
- 5672 是 RabbitMQ 的默认端口,我们需要使用这个端口连接上 RabbitMQ
- 15672 是 RabbitMQ 的UI界面的端口,我们连接之后可以进行可视化操作
- --name 表示为我们的容器起一个名字
- 后面的一串字符是我们的镜像 ID,这里要换成自己的镜像ID,通过 `docker iamges` 命令可以查看
emm~~~ 忘记截图了
#####(3)连接图形化界面
输入地址加15672端口号,进入图形界面
- 记得开放阿里云安全组
- 开放15672端口和5672端口 ---》 `firewall-cmd --add-port=6379/tcp`
## RabbitMQ 的基本介绍
#### 1. 消息服务
(1)JMS(Java Message Service) Java消息服务
- 基于JVM消息代理的规范,ActiveMQ,HornetMQ是JMS的实现
(2)AMQP(Advanced Message Queuing Protocol)
- 高级消息队列协议,也是一个消息代理的规范,兼容JMS
- RabbitMQ是AMQP的实现
#### 2. RabbitMQ 简介
**RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。**
##### 核心概念
(1)Message
消息,有消息头和消息体组成
(2)Publisher
消息的生产者,也是一个向交换器发布消息的客户端应用程序。
(3)Exchange
交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
(4)Queue
消息队列,用来保存消息直到发送给消费者。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。
(5)Binding
绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。
(6)Connection
网络连接,比如一个TCP连接。
(7)Channel
信道,多路复用连接中的一条独立的双向数据流通道。
(8)Consumer
消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。
(9)Virtual Host
虚拟主机,表示一批交换器、消息队列和相关对象。
(10)Broker
表示消息队列服务器实体
**关于这些概念的基本示意图:
**

## SpringBoot整合RabbitMQ
#### 1. 创建工程,导入对应的依赖
如果是新的工程,在初始化时选择 Spring for RabbitMQ

如果是旧的工程,这添加依赖
可以在 SpringBoot 的官方文档中查找
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
```
#### 2. 分析自动配置类,进行相关的配置
(1)找到 RabbitAutoConfiguration 类,分析一下
> rabbitConnectionFactory 方法,通过 RabbitProperties 里面的配置,来创建一个 RabbitMQ 的连接工厂。
所以我们可以在 application.yaml 中进行如下配置
```
spring:
rabbitmq:
host: 39.98.86.223
username: guest
password: guest
```
> 在 RabbitAutoConfiguration 还配置了一个 RabbitTemplate 放入容器中,我们可以通过 RabbitTemplate 来给 RabbitMQ 发送和接收消息。和之前使用的 RedisTemplate,JDBCTemplate 类似
> 还往容器中放置了一个 AmqpAdmin,用来创建和删除 Queue,Exchange,Binding