赞
踩
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镜像了
虚拟机 IP+ 自定义配置端口映射
http://192.168.130.135:15672/
用户名密码:生成容器时设置的
Demo搭建(springboot工程):
创建用户:
新建一个队列:simple.queue
添加成功:
在父工程中引入
<!--AMQP依赖,包含RabbitMQ-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
spring:
rabbitmq:
host: 192.168.130.135 #虚拟机IP
port: 5672
virtual-host: /hmall #虚拟主机
username: hmall #用户名
password: 123 #密码
@Autowired
public RabbitTemplate rabbitTemplate;
@Test
public void testSimpleQueue() {
// 队列名称
String queueName = "simple.queue";
// 消息
String message = "您好hello, spring amqp!";
// 发送消息
rabbitTemplate.convertAndSend(queueName, message);
}
在接收消息模块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);
}
}
SpringAMQP提供了几个类,用来声明队列、交换机及其绑定关系:
基于注解声明声明队列和交换机
@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); } }
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
在publisher发送者和consumer消费者中都要配置MessageConverter
@SpringBootApplication
public class PublisherApplication {
public static void main(String[] args) {
SpringApplication.run(PublisherApplication.class);
}
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。