Docker拉取Rabbitmq镜像及后端项目结合

一、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();
    }
}
  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值