1 RabbitMQ知识点

  1.1 整体架构图

    消息生产者将消息投递到exchange中,exchange会以某种路由机制将生产者投递的消息路由到queue中,消息消费者再从queue中获取消息进行消费。

  1.2 核心概念

    1.2.1 server

      又称Broker,接收客户端的连接,实现AMQP实体服务

    1.2.2 Connection

      连接,应用服务与Broker的网络连接(PS:和JDBC中的connection作用相似)

    1.2.3 Channel

      网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话。【PS:相当于JDBC的Statement】

    1.2.4 Message

      消息,服务器和应用程序之间传递的数据,由Properties和Body组成;Properties可以对消息进行修饰,比如消息的优先级、迟延等高级特性;Body则就是消息的内容。

    1.2.5 Virtual Host

      虚拟地址,用于进行逻辑隔离的最上层的消息路由。一个Virtual Host 里面可以有若干个Exchange 和 Queue,同一个Virtual Host里面不能有相同名称的Exchange或Queue;默认是 / , Virtual Host 通常用来进行项目划分,即:一个项目相关的exchange 和 queue 都在一个Virtual Host中。

    1.2.6 Exchange

      交换机,用于接收消息;根据路由键转发消息到绑定的队列

    1.2.7 Binding

      Exchange 和 Queue 之间的虚拟连接,Binding 可以包含routing key。

    1.2.8 Routing Key

      一个路由规则,虚拟机可以用它来确定如何路由一个特定消息;就是exchange和queue的路由规则

    1.2.9 Queue

      也称Message Queue,消息队列,保存消息并将他们转发给消费者

  1.3 RabbitMQ消息的流转

    消息发布者会发送一个消息、exchange、routeing Key 到rabbtiMQ,他们先经过 Virtual Host , 再经过 Exchange, 再到Queue;消息消费者再到Queue中获取消息

2 Docker下载RabbiMQ

  2.1 Docker环境搭建

    请参见另外一篇博文:点击前往

    docker版本为:

  2.2 安装RabbitMQ

    2.2.1 拉取RabbitMQ镜像

  1. docker pull rabbitmq:3.7.7-management

      技巧01:rabbitMQ的版本可以去官网进行查看

    2.2.2 查看拉取的镜像列表

    2.2.3 创建并启动rabbitMQ容器

  1. docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.7.7-management

      技巧01:-p 是将虚拟机的端口和docker中的端口做一个映射,这样访问虚拟机的端口就相当于访问了docker中的端口

      技巧02:5672是连接rabbtiMQ的端口,15672是连接rabbitMQ管理页面的端口

    2.2.4 查看启动的rabbitMQ容器

  2.3 连接rabbitMQ管理页面

    技巧01:直接在浏览器访问 虚拟机IP + rabbtiMQ管理页面端口 即可,例如:

  1. http://192.168.233.135:15672/

    技巧02:第一次访问的时候需要输入用户名和用户密码,默认的用户名和用户密码是guest

    技巧03:访问成功后的界面如下

3 SpringBoot整合RabbitMQ之消费发布者

  3.1 创建一个SpringBoot项目

    引入相关依赖:web、amqp,其他的都是辅助依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5.  
  6. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-amqp</artifactId>
  10. </dependency>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>com.xunyji</groupId>
  7. <artifactId>rabbitmq01</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <packaging>jar</packaging>
  10.  
  11. <name>rabbitmq01</name>
  12. <description>Demo project for Spring Boot</description>
  13.  
  14. <parent>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-parent</artifactId>
  17. <version>2.0.4.RELEASE</version>
  18. <relativePath/> <!-- lookup parent from repository -->
  19. </parent>
  20.  
  21. <properties>
  22. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  24. <java.version>1.8</java.version>
  25. </properties>
  26.  
  27. <dependencies>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-web</artifactId>
  31. </dependency>
  32.  
  33. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-starter-amqp</artifactId>
  37. </dependency>
  38.  
  39. <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
  40. <dependency>
  41. <groupId>org.apache.commons</groupId>
  42. <artifactId>commons-lang3</artifactId>
  43. </dependency>
  44.  
  45. <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
  46. <dependency>
  47. <groupId>commons-io</groupId>
  48. <artifactId>commons-io</artifactId>
  49. <version>2.4</version>
  50. </dependency>
  51.  
  52. <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
  53. <dependency>
  54. <groupId>com.alibaba</groupId>
  55. <artifactId>fastjson</artifactId>
  56. <version>1.2.47</version>
  57. </dependency>
  58.  
  59. <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  60. <dependency>
  61. <groupId>javax.servlet</groupId>
  62. <artifactId>javax.servlet-api</artifactId>
  63. <scope>provided</scope>
  64. </dependency>
  65.  
  66. <dependency>
  67. <groupId>org.springframework.boot</groupId>
  68. <artifactId>spring-boot-devtools</artifactId>
  69. <scope>runtime</scope>
  70. </dependency>
  71. <dependency>
  72. <groupId>org.projectlombok</groupId>
  73. <artifactId>lombok</artifactId>
  74. <optional>true</optional>
  75. </dependency>
  76. <dependency>
  77. <groupId>org.springframework.boot</groupId>
  78. <artifactId>spring-boot-starter-test</artifactId>
  79. <scope>test</scope>
  80. </dependency>
  81. </dependencies>
  82.  
  83. <build>
  84. <plugins>
  85. <plugin>
  86. <groupId>org.springframework.boot</groupId>
  87. <artifactId>spring-boot-maven-plugin</artifactId>
  88. </plugin>
  89. </plugins>
  90. </build>
  91.  
  92. </project>

pom.xml

  3.2 配置文件

  1. # rabbitMQ基本配置
  2. spring.rabbitmq.addresses=192.168.233.135:5672
  3. spring.rabbitmq.username=guest
  4. spring.activemq.password=guest
  5. spring.rabbitmq.virtual-host=/
  6. spring.rabbitmq.connection-timeout=15000
  7.  
  8. server.servlet.path=/
  9. server.port=8001
  10.  
  11. spring.http.encoding.charset=UTF-8
  12. spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
  13. spring.jackson.time-zone=GMT+8
  14. spring.jackson.default-property-inclusion=non_null

application.properties

  3.3 发布消息

    依赖注入RabbitTemplate的实例并调用实例方法convertAndSend发布消息

    技巧01:在进行发布之前需要在rabbitMQ中设置响应的exchange和queue

    3.3.1 在RabbitMQ中添加exchange

      技巧01:添加完成后exchange列表中就会出现新增的exchange信息

    3.3.2 在RabbitMQ中添加Queue

      技巧01:添加完queue后就会在queue列表中看到新添加的queue

    3.3.3 设置exchange和queue的路由规则

      技巧01:exchange和queue都可以进行设置,只有一方设置了就可以啦

  3.4 测试

    向rabbitMQ发布一则消息

  1. package com.xunyji.rabbitmq01.producer;
  2.  
  3. import com.xunyji.rabbitmq01.Rabbitmq01ApplicationTests;
  4. import com.xunyji.rabbitmq01.entity.Order;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.junit.Test;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Component;
  9.  
  10. import java.util.UUID;
  11.  
  12. import static org.junit.Assert.*;
  13.  
  14. @Component
  15. @Slf4j
  16. public class OrderSenderTest extends Rabbitmq01ApplicationTests {
  17.  
  18. @Autowired
  19. private OrderSender orderSender;
  20.  
  21. @Test
  22. public void test01() throws Exception {
  23.  
  24. Order order = Order.builder()
  25. .id("20180830")
  26. .name("测试订单01")
  27. .messageId(System.currentTimeMillis() + "$" + UUID.randomUUID().toString())
  28. .build();
  29.  
  30. orderSender.sendOrder(order);
  31.  
  32. }
  33.  
  34. }

    技巧01:发送成功后,queue中就会有有一条为被消费的消息;当消息消费者消费了过后才会从队列中剔除

4 SpringBoot整合RabbitMQ之消费订阅者

  4.1 创建一个SpringBoot项目

    引入必要依赖:web、ampq,其余都是辅助依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5.  
  6. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-amqp</artifactId>
  10. </dependency>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>com.xunyji</groupId>
  7. <artifactId>rabbitmq02-consumer</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <packaging>jar</packaging>
  10.  
  11. <name>rabbitmq02-consumer</name>
  12. <description>Demo project for Spring Boot</description>
  13.  
  14. <parent>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-parent</artifactId>
  17. <version>2.0.4.RELEASE</version>
  18. <relativePath/> <!-- lookup parent from repository -->
  19. </parent>
  20.  
  21. <properties>
  22. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  24. <java.version>1.8</java.version>
  25. </properties>
  26.  
  27. <dependencies>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-web</artifactId>
  31. </dependency>
  32.  
  33. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-starter-amqp</artifactId>
  37. </dependency>
  38.  
  39. <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
  40. <dependency>
  41. <groupId>org.apache.commons</groupId>
  42. <artifactId>commons-lang3</artifactId>
  43. </dependency>
  44.  
  45. <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
  46. <dependency>
  47. <groupId>commons-io</groupId>
  48. <artifactId>commons-io</artifactId>
  49. <version>2.4</version>
  50. </dependency>
  51.  
  52. <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
  53. <dependency>
  54. <groupId>com.alibaba</groupId>
  55. <artifactId>fastjson</artifactId>
  56. <version>1.2.47</version>
  57. </dependency>
  58.  
  59. <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  60. <dependency>
  61. <groupId>javax.servlet</groupId>
  62. <artifactId>javax.servlet-api</artifactId>
  63. <scope>provided</scope>
  64. </dependency>
  65.  
  66. <dependency>
  67. <groupId>org.springframework.boot</groupId>
  68. <artifactId>spring-boot-devtools</artifactId>
  69. <scope>runtime</scope>
  70. </dependency>
  71. <dependency>
  72. <groupId>org.projectlombok</groupId>
  73. <artifactId>lombok</artifactId>
  74. <optional>true</optional>
  75. </dependency>
  76. <dependency>
  77. <groupId>org.springframework.boot</groupId>
  78. <artifactId>spring-boot-starter-test</artifactId>
  79. <scope>test</scope>
  80. </dependency>
  81. </dependencies>
  82.  
  83. <build>
  84. <plugins>
  85. <plugin>
  86. <groupId>org.springframework.boot</groupId>
  87. <artifactId>spring-boot-maven-plugin</artifactId>
  88. </plugin>
  89. </plugins>
  90. </build>
  91.  
  92. </project>

pom.xml

  4.2 配置文件

  1. #springboot整合mq的基本配置
  2. spring.rabbitmq.addresses=192.168.233.135:5672
  3. spring.rabbitmq.username=guest
  4. spring.activemq.password=guest
  5. spring.rabbitmq.virtual-host=/
  6. spring.rabbitmq.connection-timeout=15000
  7.  
  8. #springboot整合mq的消费配置
  9. spring.rabbitmq.listener.simple.concurrency=5
  10. spring.rabbitmq.listener.simple.max-concurrency=10
  11. spring.rabbitmq.listener.simple.acknowledge-mode=manual
  12. spring.rabbitmq.listener.simple.prefetch=1
  13.  
  14. server.servlet.path=/
  15. server.port=8002
  16.  
  17. spring.http.encoding.charset=UTF-8
  18. spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
  19. spring.jackson.time-zone=GMT+8
  20. spring.jackson.default-property-inclusion=non_null

  4.3 消费方法编写

    在消费方法上利用注解开启监听和指定监听那个队列即可

    技巧01:@RabbitHandler 和 @RabbitListener 注解可以自动到rabbitMQ中生成exchange和queue的绑定关系

    4.4 获取消息

      由于rabbitMQ中已经有一条消息待处理了,所以直接启动项目就可以完成消息的消费,消费后rabbitMQ中待消费的消息数量就为0啦

5 本博文源代码

  点击前往

    

SpringBoot28 RabbitMQ知识点、Docker下载RabbitMQ、SpringBoot整合RabbtiMQ的更多相关文章

  1. 【RabbitMQ】六种模式与SpringBoot整合

    添加rabbitmq的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...

  2. springboot学习笔记-6 springboot整合RabbitMQ

    一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  3. (1)RabbitMQ在Docker上安装

    1.简介 在来学习RabbitMQ时候,我觉得很有必要先把它的环境先搭建起来,这样后面的示例才能进行.因为之前自己手动在Linux服务器上搭建过Elasticsearch,当时踩过太多坑了,浪费太多时 ...

  4. springboot整合vue实现上传下载文件

    https://blog.csdn.net/yhhyhhyhhyhh/article/details/89888953 文章目录 springboot整合vue实现上传下载文件 1上传下载文件api文 ...

  5. Ubuntu 16.04下使用docker部署rabbitmq

    (以下docker相关的命令,需要在root用户环境下或通过sudo提升权限来进行操作.) 1.拉取rabbimq镜像到本地 docker pull rabbitmq 2. Docker运行rabbi ...

  6. Docker安装rabbitMQ主从

    环境准备 Centos 7.5虚拟机三台: 192.168.102.128 192.168.102.130 192.168.102.131 以上虚拟机统一安装docker环境 三台机器分别配置如下所示 ...

  7. 用Docker搭建RabbitMq的普通集群和镜像集群

    普通集群:多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构.消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法 ...

  8. springboot整合elasticsearch(基于es7.2和官方high level client)

    前言 最近写的一个个人项目(传送门:全终端云书签)中需要用到全文检索功能,目前 mysql,es 都可以做全文检索,mysql 胜在配置方便很快就能搞定上线(参考这里),不考虑上手难度,es 在全文检 ...

  9. Docker下载镜像出现failed to register layer: symlink....问题

    在用Docker下载RabbitMQ的时候出现如下问题 个人解决方案:重启Docker. 若重启还是无法解决问题,可以先关闭Docker systemctl stop docker 然后把已下载的相关 ...

随机推荐

  1. 模态对话框中的window.close关闭时会打开新页面

    在模态对话框的页面的<head></head>加上<base target="_self"> 就不会打开新页面了.

  2. 搭建一个IntelliJ的Spark项目

    之前发现创建一个新项目之后,无法添加scala class 创建新项目 选择maven项目,然后选择simple或者quickstart: 进入项目后,在Project Structure里面,在gl ...

  3. bzoj 2406 矩阵——有源汇上下界可行流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2406 二分答案.把 b 的 n 个行作为一排, m 个列作为一排,每行和每列之间连上下界为 ...

  4. apache编译参数详解

    常用编译参数: ./configure     //配置源代码树–prefix=/usr/local/apache    //体系无关文件的顶级安装目录PREFIX ,也就Apache的安装目录.–e ...

  5. zookeeper事件监听

    原来有两张表,一张是公司的,一张的产品的,项目中用来查询,不需要增删改.现在增删改交给另一项目去维护,由他们变更时同步数据到zk,我们去取.很明显,这里需要一个监听器,每次他项目发起数据变更时,我方必 ...

  6. 批量修改文件名的bash脚本

    #!/bin/bash while IFS='' read -r line || [[ -n "$line" ]]; do # echo "sox $line --cha ...

  7. GOF23设计模式之桥接模式(bridge)

    一.桥接模式概述 桥接模式核心要点: 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联. 二.桥接模式场景提出与存在问题 商城系统中常见 ...

  8. 导航条且手机版.html——仿照官网例子

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 【转】jMeter入门实例

    人们对从认识事物都有一个具体到抽象的过程,学习Jmeter也不例外,通过一个实例来进行学习,一方面可以让初学者有所见即所得的信心,另一方面,其实也是在初学者心中留下了对这事物的一个朦胧的印象,这在以后 ...

  10. c# 判断文件是否已使用

    string path = Server.MapPath(" PDFs"); bool tfOpenTemp= IsFileInUse(path + " /Doc1.pd ...