一、RabbitMQ安装
第一步:拉取Rabbitmq镜像
1、拉取Rabbitmq镜像(这里大概会报镜像找不到题目)
- [root@localhost ~]# docker pull rabbitmq
复制代码 2、查看当地镜像,确认是否拉取乐成
- [root@localhost ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- rabbitmq 3.8-management 85e83aca5d60 3 years ago 249MB
复制代码 如果拉取报错,可直接从官网下载tar包导入:
通过网盘分享的文件:mq.tar
链接: https://pan.baidu.com/s/1HE8FN7zAoz1IJmkr-cNrPw?pwd=65nu 提取码: 65nu
1、将tar包随便导入一个临时文件夹中,直接复制粘贴,这里是导入到tmp文件夹中
2.进入tmp文件夹
- [root@localhost ~]# cd /tmp --进入文件夹
- [root@localhost tmp]# ll --查看是否存在tar包
复制代码 3.加载镜像
- [root@localhost tmp]# docker load -i mq.tar
- a70daca533d0: Loading layer [==================================================>] 75.16MB/75.16MB
- 1d76618777b7: Loading layer [==================================================>] 2.494MB/2.494MB
- 3c4641134cb2: Loading layer [==================================================>] 122MB/122MB
- 925d7d7de53e: Loading layer [==================================================>] 345.1kB/345.1kB
- c7a6248661bc: Loading layer [==================================================>] 19.84MB/19.84MB
- 6ba57a07380e: Loading layer [==================================================>] 4.608kB/4.608kB
- 57de3e20948c: Loading layer [==================================================>] 1.536kB/1.536kB
- 56d9e5402fdd: Loading layer [==================================================>] 17.41kB/17.41kB
- ce6be100ab60: Loading layer [==================================================>] 34.02MB/34.02MB
- Loaded image: rabbitmq:3.8-management
复制代码 第二步:根据镜像生成容器
1、通过镜像生成容器
- docker run \
- -e RABBITMQ_DEFAULT_USER=itheima \
- -e RABBITMQ_DEFAULT_PASS=123456 \
- --name mq \
- --hostname mq \
- -p 15672:15672 \
- -p 5672:5672 \
- -d \
- rabbitmq:3.8-management
复制代码- //注释
- [ -d ]: 后台运行;
- [ -p ]: 配置端口映射(容器的3306映射到Linux的3307端口)
- [ -e ]: 添加配置信息(密码为123456)
- [ --name ]: 容器名字
- rabbitmq: 镜像名字
复制代码 2、查看目录运行中的容器列表
- [root@localhost tmp]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 151f371892d0 rabbitmq:3.8-management "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp mq
复制代码 此中第一条就是我们刚创建的rabbitmq镜像了
第三步:访问Rabbitmq
虚拟机 IP+ 自定义配置端口映射
- http://192.168.130.135:15672/
复制代码 用户名密码:生成容器时设置的
二、RabbitMQ使用
1.RabbitMQ的整体架构及核心概念
- virtual-host:虚拟主机,起到数据隔离的作用
- publisher:消息发送者
- consumer:消息的消费者
- queue:队列,存储消息
- exchange:互换机,负责路由消息
三、SpringAMQP
1.收发消息
1.1 如何收发消息?
- 引入spring-boot-starter-amqp依赖
- 配置rabbitmq服务端信息
- 使用RabbitTemplate发送消息
- 使用@RabbitListenner注解声明要监听的队列,监听消息
1.2 搭建demo
Demo搭建(springboot工程):
- mq-demo:父工程,管理项目依赖 (父模块)
- publisher:消息的发送者 (子模块)
- consumer:消息的消费者 (子模块)
1.2.1 客户端搭建
创建用户:
新建一个队列:simple.queue
添加乐成:
1.2.2 引入spring-amqp依赖
在父工程中引入
- <!--AMQP依赖,包含RabbitMQ-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-amqp</artifactId>
- </dependency>
复制代码 1.2.3 配置application.yaml,毗连RabbitMQ
- spring:
- rabbitmq:
- host: 192.168.130.135 #虚拟机IP
- port: 5672
- virtual-host: /hmall #虚拟主机
- username: hmall #用户名
- password: 123 #密码
复制代码 1.2.4 发送消息
- @Autowired
- public RabbitTemplate rabbitTemplate;
- @Test
- public void testSimpleQueue() {
- // 队列名称
- String queueName = "simple.queue";
- // 消息
- String message = "您好hello, spring amqp!";
- // 发送消息
- rabbitTemplate.convertAndSend(queueName, message);
- }
复制代码 1.2.5 接收消息
在接收消息模块consumer/mq
SpringAMQP提供声明式的消息监听,我们只必要通过注解在方法上声明要监听的队列名称,未来SpringAMQP就会把消息传递给当火线法:
- @Component
- @Slf4j //lombok自带日志
- public class SpringRabbitListener {
- @RabbitListener(queues = "simple.queue")
- public void ListenSimpleQueue(String message) {
- // 利用RabbitListener来声明要监听的队列信息
- // 将来一旦监听的队列中有了消息,就会推送给当前服务,调用当前方法,处理消息。
- // 可以看到方法体中接收的就是消息体的内容
- log.info("监听到Simple Queue: {}", message);
- }
- }
复制代码 2. 声明队列和互换机
SpringAMQP提供了几个类,用来声明队列、互换机及其绑定关系:
- Queue:用于说明队列,可以用工厂QueueBuilder构建
- Exchange:用于声明互换机,可以用工厂类ExchangeBuilder构建
- Binding:用于声明队列和互换机的绑定关系,可以用工厂类BindingBuilder构建
基于注解声明声明队列和互换机
- @Component
- @Slf4j
- public class SpringRabbitListener {
- @RabbitListener(
- bindings = @QueueBinding(
- value = @Queue(name = "simple.queue2"),
- exchange = @Exchange(name = "hmall.direct",type = ExchangeTypes.DIRECT),
- key = {"red","pink"}
- )
- )
- public void ListenSimpleQueue2(String message) {
- // 利用RabbitListener来声明要监听的队列信息
- // 将来一旦监听的队列中有了消息,就会推送给当前服务,调用当前方法,处理消息。
- // 可以看到方法体中接收的就是消息体的内容
- log.info("监听到Simple Queue2: {}", message);
- }
- }
复制代码 3.消息转换器
3.1 引入jackson依赖
- <!--jackson-->
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- </dependency>
复制代码 3.2 启动类中加Bean
在publisher发送者和consumer消费者中都要配置MessageConverter
- @SpringBootApplication
- public class PublisherApplication {
- public static void main(String[] args) {
- SpringApplication.run(PublisherApplication.class);
- }
- @Bean
- public MessageConverter messageConverter() {
- return new Jackson2JsonMessageConverter();
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |