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

打印 上一主题 下一主题

主题 906|帖子 906|积分 2718

一、RabbitMQ安装

第一步:拉取Rabbitmq镜像

1、拉取Rabbitmq镜像(这里大概会报镜像找不到题目)
  1. [root@localhost ~]# docker pull rabbitmq
复制代码
2、查看当地镜像,确认是否拉取乐成
  1. [root@localhost ~]# docker images
  2. REPOSITORY    TAG              IMAGE ID       CREATED       SIZE
  3. 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文件夹
  1. [root@localhost ~]# cd /tmp  --进入文件夹
  2. [root@localhost tmp]# ll   --查看是否存在tar包
复制代码
3.加载镜像
  1. [root@localhost tmp]# docker load -i mq.tar
  2. a70daca533d0: Loading layer [==================================================>]  75.16MB/75.16MB
  3. 1d76618777b7: Loading layer [==================================================>]  2.494MB/2.494MB
  4. 3c4641134cb2: Loading layer [==================================================>]    122MB/122MB
  5. 925d7d7de53e: Loading layer [==================================================>]  345.1kB/345.1kB
  6. c7a6248661bc: Loading layer [==================================================>]  19.84MB/19.84MB
  7. 6ba57a07380e: Loading layer [==================================================>]  4.608kB/4.608kB
  8. 57de3e20948c: Loading layer [==================================================>]  1.536kB/1.536kB
  9. 56d9e5402fdd: Loading layer [==================================================>]  17.41kB/17.41kB
  10. ce6be100ab60: Loading layer [==================================================>]  34.02MB/34.02MB
  11. Loaded image: rabbitmq:3.8-management
复制代码
第二步:根据镜像生成容器

1、通过镜像生成容器
  1. docker run \
  2. -e RABBITMQ_DEFAULT_USER=itheima \
  3. -e RABBITMQ_DEFAULT_PASS=123456 \
  4. --name mq \
  5. --hostname mq \
  6. -p 15672:15672 \
  7. -p 5672:5672 \
  8. -d \
  9. rabbitmq:3.8-management
复制代码
  1. //注释
  2. [ -d ]: 后台运行;
  3. [ -p ]: 配置端口映射(容器的3306映射到Linux的3307端口)
  4. [ -e ]: 添加配置信息(密码为123456)
  5. [ --name ]: 容器名字
  6. rabbitmq: 镜像名字
复制代码
2、查看目录运行中的容器列表
  1. [root@localhost tmp]# docker ps
  2. CONTAINER ID   IMAGE                     COMMAND                   CREATED         STATUS         PORTS                                                                                                                                                 NAMES
  3. 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+ 自定义配置端口映射
  1. 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依赖

在父工程中引入
  1. <!--AMQP依赖,包含RabbitMQ-->
  2. <dependency>
  3.     <groupId>org.springframework.boot</groupId>
  4.     <artifactId>spring-boot-starter-amqp</artifactId>
  5. </dependency>
复制代码
1.2.3 配置application.yaml,毗连RabbitMQ

  1. spring:
  2.   rabbitmq:
  3.     host: 192.168.130.135 #虚拟机IP
  4.     port: 5672
  5.     virtual-host: /hmall #虚拟主机
  6.     username: hmall #用户名
  7.     password: 123 #密码
复制代码
1.2.4 发送消息

  1. @Autowired
  2. public RabbitTemplate rabbitTemplate;
  3. @Test
  4. public  void testSimpleQueue() {
  5.     // 队列名称
  6.     String queueName = "simple.queue";
  7.     // 消息
  8.     String message = "您好hello, spring amqp!";
  9.     // 发送消息
  10.     rabbitTemplate.convertAndSend(queueName, message);
  11. }
复制代码
1.2.5 接收消息

在接收消息模块consumer/mq
SpringAMQP提供声明式的消息监听,我们只必要通过注解在方法上声明要监听的队列名称,未来SpringAMQP就会把消息传递给当火线法:
  1. @Component
  2. @Slf4j //lombok自带日志
  3. public class SpringRabbitListener {
  4.     @RabbitListener(queues = "simple.queue")
  5.     public void ListenSimpleQueue(String message) {
  6.         // 利用RabbitListener来声明要监听的队列信息
  7.         // 将来一旦监听的队列中有了消息,就会推送给当前服务,调用当前方法,处理消息。
  8.         // 可以看到方法体中接收的就是消息体的内容
  9.         log.info("监听到Simple Queue: {}", message);
  10.     }
  11. }
复制代码
2. 声明队列和互换机

SpringAMQP提供了几个类,用来声明队列、互换机及其绑定关系:


  • Queue:用于说明队列,可以用工厂QueueBuilder构建
  • Exchange:用于声明互换机,可以用工厂类ExchangeBuilder构建
  • Binding:用于声明队列和互换机的绑定关系,可以用工厂类BindingBuilder构建

基于注解声明声明队列和互换机
  1. @Component
  2. @Slf4j
  3. public class SpringRabbitListener {   
  4.     @RabbitListener(
  5.         bindings = @QueueBinding(
  6.             value = @Queue(name = "simple.queue2"),
  7.             exchange = @Exchange(name = "hmall.direct",type = ExchangeTypes.DIRECT),
  8.             key = {"red","pink"}
  9.         )
  10.     )
  11.     public void ListenSimpleQueue2(String message) {
  12.         // 利用RabbitListener来声明要监听的队列信息
  13.         // 将来一旦监听的队列中有了消息,就会推送给当前服务,调用当前方法,处理消息。
  14.         // 可以看到方法体中接收的就是消息体的内容
  15.         log.info("监听到Simple Queue2: {}", message);
  16.     }
  17. }
复制代码
3.消息转换器

3.1 引入jackson依赖

  1. <!--jackson-->
  2. <dependency>
  3.     <groupId>com.fasterxml.jackson.core</groupId>
  4.     <artifactId>jackson-databind</artifactId>
  5. </dependency>
复制代码
3.2 启动类中加Bean

在publisher发送者和consumer消费者中都要配置MessageConverter
  1. @SpringBootApplication
  2. public class PublisherApplication {
  3.     public static void main(String[] args) {
  4.         SpringApplication.run(PublisherApplication.class);
  5.     }
  6.     @Bean
  7.     public MessageConverter messageConverter() {
  8.         return new Jackson2JsonMessageConverter();
  9.     }
  10. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表