SpringBoot整合高级消息队列RabbitMQ及原理

2023-05-16

一  SpringBoot 与消息概述


二 RabbitMQ 概述

RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。

Message:消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。

Publisher:消息的生产者,也是一个向交换器发布消息的客户端应用程序。

Exchange  :交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

Exchange有4种类型:direct(默认),fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别

Queue:消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

Binding:绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。
Exchange 和Queue的绑定可以是多对多的关系。
Connection:网络连接,比如一个TCP连接。

Channel:信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

Consumer:消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。


Virtual Host:虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。

Broker:表示消息队列服务器实体



三 创建工程

为了测试方便,选中web模块和rabbitMQ模块

首先了解以下几个重要的配置bean





四 远程服务器安装RabbitMQ

说明: 我这里使用的是阿里云服务器,使用Docker容器来安装RabbitMQ,可以参看上一篇博客

Docker轻松入门(详解)或  Docker轻松入门(详解)

可以看到5672端口和15672端口已经打开,在浏览器输入IP地址:15672端口号,出现以下信息就说明没有任何问题了。


默认登陆账号密码都是guest





下面开始在工程中配置远程主机信息:


application.properties配置如下



五 测试

1.发送数据


来到管理页面查看,可以看到消息已经成功进入队列了,当然test.exchange是direct所以只能一对一通信


发送给test.exchange2的会广播到所有绑定的队列



2.接收数据



3.AMQPAdmin: 刚刚都是手动从web页面建立的交换器和队列,现在使用AMQPAdmin来建立交换器和队列。

查看web页面



4. 使用@RabbitListener监听消息队列的内容

第一步: 使用@EnableRabbit注解开启基于注解的RabbitMQ

第二步:在service方法上标注@RabbitListener




六 总结 

    SpringBoot与RabbitMQ的整合到这里就结束了,希望对大家有帮助,有什么问题请留言,博主看到肯定会第一时间回复,希望大家能支持,后续会发布相关的文章。





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot整合高级消息队列RabbitMQ及原理 的相关文章

  • Cannot read property ‘appendChild‘ of null错误

    记前端Js报错 xff0c Cannot read property appendChild of null 页面由上至下执行 xff0c 提示获取不到插入的节点 将js代码放到body中的最后面
  • The new driver class is `com.mysql.cj.jdbc.Driver‘.

    记一次数据库连接数据库报错 报错提示 xff1a Loading class com mysql jdbc Driver 39 This is deprecated The new driver class iscom mysql cj j
  • Consider defining a bean of type ‘com.project.springboot.mapper.UserMapper‘ in your configuration.

    新建springboot项目启动时出现报错 xff1a Consider defining a bean of type com project springboot mapper UserMapper in your configurat
  • 面试官:如何优化sql

    在面试的环节中 xff0c 面试官问到 xff1a 你是如何设计你的表结构的 xff0c 画一下E R图 xff1f 接着又继续深挖 xff0c 如果有慢查询 xff0c 你是如何优化你的sql的 xff1f 今天 xff0c 我就来和大家
  • PageNotFound.noHandlerFound No mapping found for HTTP request with URI

    学习SpringMVC接收参数 xff0c 不小心配置xml文件包名出错 浏览器访问出现以下报错 xff0c 后端提示 xff1a org span class token punctuation span springframework
  • The driver has not received any packets from the server

    idea启动本地项目提示报错 The driver has not received any packets from the server xff0c 可能是数据库Mysql服务被停止 解决办法 xff1a 1 打开计算机的任务管理器 2
  • [Vue-Treeselect Warning] Detected duplicate presence of node id

    只能说出现这个问题的小伙伴们 xff0c 和曾经的我一样 xff0c 给自己挖了一个巨坑 问题点 xff1a 不影响任何业务需求或者操作 xff0c 但是在控制台出现了以上截图报错 xff08 找到问题的我不顾上班时间 xff0c 愤怒写下
  • vmware-horizon-client安装失败无反应

    公司周日下午5点说开始远程办公 xff0c 让我们装上vmware horizon client开始居家办公啦 xff0c 但是捏 xff0c 我昨天光是安装就傻了 xff0c 整一晚上 xff0c 点击安装软件exe xff08 下面截图
  • springboot搭建web项目

    记录在本地搭建的springboot web项目 1 file gt New gt Project 2 选择Spring Initializr gt next 3 选择对应构建 开发语言 打包方式 JDK版本等内容 4 选择需要添加的依赖
  • SyntaxError: Unexpected token ‘.‘

    开发时vscode弹出插件更新 手一抖安装了插件vue Language Featues xff08 Volar xff09 本来正常运行的代码报错 xff1a SyntaxError Unexpected token span class
  • java项目调用SAP函数报错

    公司内部新增一个java项目调用SAP系统中的函数 调试时出现如下问题 xff08 xff09 问题一 xff1a com sap conn jco JCoException span class token punctuation spa
  • 计算机概论

    最近要学习Linux系统 xff0c 所以顺道将计算机的前世今生也学习了 xff0c 下面做个读书笔记增强记忆 一 计算机的组成 1 计算机硬件的五大单元 从外观看来 xff0c 计算机主要分为三部分 xff1a 输入单元 xff1a 包括
  • Ubuntu18.04安装QT5.14.2

    Ubuntu18 04安装QT5 14 2以及QT导入项目问题和解决办法 1 官网下载安装包2 官网注册账号3 安装4 解决bug5 QT导入项目6 其他Ubuntu18 04安装github desktop 7 QTimer不能同时使用两
  • Mysql GROUP BY 排除null数据

    最近在Mysql发现一个问题 xff0c 当我们如果使用GROUP BY如果出现NULL值 xff0c MYSQL会怎样处理 而且如果我需要把每个NULL值都打印出来而不是分组 xff0c 那该怎么办 xff1f 下面我们做个试验 xff1
  • LIMIT 10000,10会发生什么?

    LIMIT分页优化 进行分页操作时 xff0c 通常都会通过偏移量来查询某些数据 然后再加上合适的order by子句 xff0c order by的列加上了索引 xff0c 性能一般都不错 xff0c 而如果没有对应的索引的话 xff0c
  • DataTables warning: table id=DataTables_Table_0 解决方案

    laravel在使用JQueryDataTable插件数据展示时 xff0c 弹出 DataTables warning table id 61 DataTables Table 0 Requested unknown parameter
  • docker安装宝塔面板踩坑

    如下是针对centos7容器的安装方法 dockerHub现在是centosos8 xff0c 但是centos8目前宝塔安装还不是很顺 PULL 一个centos镜像 docker pull centos centos7 通过centos
  • gitea宝塔插件 GiteaForBt 宝塔git社区服务器插件比gitlab更轻量比github更实用的gitea插件

    前言 GiteaForBt GiteaForBt是基于Gitea Git with a cup of tea开发的一款宝塔下使用非常方便的插件 gitea是一个国外团队基于国内一位大牛写的gogs开源项目 xff08 Go语言开发 xff0
  • ubuntu 16.04 deepin.com.wechat depends on deepin-wine 2.18-19解决方案

    Ubuntu16 04 安装deepin微信报错 deepin wine gt 61 2 18 19 或则deepin wine helper gt 61 1 2deepin8 解决方案 前言 由于deepin wine for Ubunt
  • shell脚本自定义自动补全

    前言 最近使用tmux 43 vim开发中遇到一个问题那就是能不能使用命令直接打开我的项目存放根目录 然后在该命令后面使用tab自动补全想要的目录名 xff08 项目文件夹名 xff09 然后在指定的那个文件夹 xff08 补全后的那个项目

随机推荐