rabbitmq使用_Spring Boot中使用RabbitMQ

Message Broker与AMQP简介

Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应用于下面这些场景:

  • 消息路由到一个或多个目的地
  • 消息转化为其他的表现方式
  • 执行消息的聚集、消息的分解,并将结果发送到他们的目的地,然后重新组合相应返回给消息用户
  • 调用Web服务来检索数据
  • 响应事件或错误
  • 使用发布-订阅模式来提供内容或基于主题的消息路由

AMQP是Advanced Message Queuing Protocol的简称,它是一个面向消息中间件的开放式标准应用层协议。AMQP定义了这些特性:

  • 消息方向
  • 消息队列
  • 消息路由(包括:点到点和发布-订阅模式)
  • 可靠性
  • 安全性

RabbitMQ

本文要介绍的RabbitMQ就是以AMQP协议实现的一种中间件产品,它可以支持多种操作系统,多种编程语言,几乎可以覆盖所有主流的企业级技术平台。

安装

在RabbitMQ官网的下载页面https://www.rabbitmq.com/download.html中,我们可以获取到针对各种不同操作系统的安装包和说明文档。这里,我们将对几个常用的平台一一说明。

下面我们采用的Erlang和RabbitMQ Server版本说明:

  • Erlang/OTP 19.1
  • RabbitMQ Server 3.6.5

Windows安装

  1. 安装Erland,通过官方下载页面http://www.erlang.org/downloads获取exe安装包,直接打开并完成安装。
  2. 安装RabbitMQ,通过官方下载页面https://www.rabbitmq.com/download.html获取exe安装包。
  3. 下载完成后,直接运行安装程序。
  4. RabbitMQ Server安装完成之后,会自动的注册为服务,并以默认配置启动起来。
9d3742fc4af57815293d7fd1337cad41.png

Mac OS X安装

在Mac OS X中使用brew工具,可以很容易的安装RabbitMQ的服务端,只需要按如下命令操作即可:

  1. brew更新到最新版本,执行:brew update
  2. 安装Erlang,执行:brew install erlang
  3. 安装RabbitMQ Server,执行:brew install rabbitmq

通过上面的命令,RabbitMQ Server的命令会被安装到/usr/local/sbin,并不会自动加到用户的环境变量中去,所以我们需要在.bash_profile或.profile文件中增加下面内容:

PATH=$PATH:/usr/local/sbin

这样,我们就可以通过rabbitmq-server命令来启动RabbitMQ的服务端了。

Ubuntu安装

在Ubuntu中,我们可以使用APT仓库来进行安装

  1. 安装Erlang,执行:apt-get install erlang
  2. 执行下面的命令,新增APT仓库到/etc/apt/sources.list.d
echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
  1. 更新APT仓库的package list,执行sudo apt-get update命令
  2. 安装Rabbit Server,执行sudo apt-get install rabbitmq-server命令

Rabbit管理

我们可以直接通过配置文件的访问进行管理,也可以通过Web的访问进行管理。下面我们将介绍如何通过Web进行管理。

  • 执行rabbitmq-plugins enable rabbitmq_management命令,开启Web管理插件,这样我们就可以通过浏览器来进行管理了。
35da9787deeb914e16d351cc15b8a377.png
  • 打开浏览器并访问:http://localhost:15672/,并使用默认用户guest登录,密码也为guest。我们可以看到如下图的管理页面:
86c0edb94de1d2c6ad7fb49d92ae8561.png

从图中,我们可以看到之前章节中提到的一些基本概念,比如:Connections、Channels、Exchanges、Queue等。第一次使用的读者,可以都点开看看都有些什么内容,熟悉一下RabbitMQ Server的服务端。

  • 点击Admin标签,在这里可以进行用户的管理。

Spring Boot整合

下面,我们通过在Spring Boot应用中整合RabbitMQ,并实现一个简单的发送、接收消息的例子来对RabbitMQ有一个直观的感受和理解。

在Spring Boot中整合RabbitMQ是一件非常容易的事,因为之前我们已经介绍过Starter POMs,其中的AMQP模块就可以很好的支持RabbitMQ,下面我们就来详细说说整合过程:

  • 新建一个Spring Boot工程,命名为:“rabbitmq-hello”。
  • 在pom.xml中引入如下依赖内容,其中spring-boot-starter-amqp用于支持RabbitMQ。
2a31fdc25e1710fd3f22cef4e151b8f1.png
  • 在application.properties中配置关于RabbitMQ的连接和用户信息,用户可以回到上面的安装内容,在管理页面中创建用户。
0859972f6e49e98e1ea8e7cc142105b0.png
  • 创建消息生产者Sender。通过注入AmqpTemplate接口的实例来实现消息的发送,AmqpTemplate接口定义了一套针对AMQP协议的基础操作。在Spring Boot中会根据配置来注入其具体实现。在该生产者,我们会产生一个字符串,并发送到名为hello的队列中。
2ee20e69d7b91f62780a2db198f0b883.png
  • 创建消息消费者Receiver。通过@RabbitListener注解定义该类对hello队列的监听,并用@RabbitHandler注解来指定对消息的处理方法。所以,该消费者实现了对hello队列的消费,消费操作为输出消息的字符串内容。
65262f6f4b6322931dd2c5e402da8c27.png
  • 创建RabbitMQ的配置类RabbitConfig,用来配置队列、交换器、路由等高级信息。这里我们以入门为主,先以最小化的配置来定义,以完成一个基本的生产和消费过程。
bd77d522c9643f1c1fa5facb174f749a.png
  • 创建应用主类:
6b2a85908e1a7164f119e7a704ac1e3e.png
  • 创建单元测试类,用来调用消息生产:
627d575828bb57ba2bb5c6e4dafe3a9d.png

完成程序编写之后,下面开始尝试运行。首先确保RabbitMQ Server已经开始,然后进行下面的操作:

  • 启动应用主类,从控制台中,我们看到如下内容,程序创建了一个访问127.0.0.1:5672中springcloud的连接。
o.s.a.r.c.CachingConnectionFactory : Created new connection: SimpleConnection@29836d32 [delegate=amqp://springcloud@127.0.0.1:5672/]

同时,我们通过RabbitMQ的控制面板,可以看到Connection和Channels中包含当前连接的条目。

  • 运行单元测试类,我们可以看到控制台中输出下面的内容,消息被发送到了RabbitMQ Server的hello队列中。
Sender : hello Sun Sep 25 11:06:11 CST 2016
  • 切换到应用主类的控制台,我们可以看到类似如下输出,消费者对hello队列的监听程序执行了,并输出了接受到的消息信息。
Receiver : hello Sun Sep 25 11:06:11 CST 2016

通过上面的示例,我们在Spring Boot应用中引入spring-boot-starter-amqp模块,进行简单配置就完成了对RabbitMQ的消息生产和消费的开发内容。然而在实际应用中,我们还有很多内容没有演示,这里不做更多的讲解,读者可以自行查阅RabbitMQ的官方教程,有更全面的了解。

bc45171d62491e23c950f827a2659729.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注意力无用?Apple新作:注意力替换成常数矩阵,效果差异不大

文|萧箫 发自 凹非寺源|量子位要说Transformer的核心亮点,当然是注意力机制了。但现在,一篇新研究却突然提出了带点火药味的观点:注意力机制对于预训练Transformer有多重要,这事儿得打个问号。研究人员来自…

windows服务编程 注册InstallUtil.exe

dos命令下输入; C:\Windows\Microsoft.Net\Framework\v2.0.to727>InstallUtil.exe E:\Test\WindowsServiec1.exe 删除: C:\Windows\Microsoft.Net\Framework\v2.0.to727>InstallUtil.exe/u E:\Test\WindowsServiec1.exe 转载于:https://www.cnblogs.com/lgzh3/archive/2…

LeetCode 5. 最长回文子串(动态规划)

文章目录1. 题目2. 解题2.1 自己写的DP2.2 优化后的DP2.3 中心扩展法1. 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有…

springboot整合kafka_springboot整合kafka实现消息的发送消费

如下是springboot整合kafka的一个案例,方便需要的小伙伴。启动kafka Servercd 到kafka的bin目录下:前提是启动zk./kafka-server-start.sh /Users/hz/programs/kafka_2.12-2.2.1/config/server.properties &kafka创建topic:kafka-topics.sh --create …

关于如何在BCB中使用CodeGuard

关于如何在BCB中使用CodeGuard点击数:231 录入时间:2007-6-7 一、 为什么写这篇东西 自己在使用 BCB5 写一些程序时需要检查很多东西,例如内存泄漏、资源是否有释放等等,在使用了很多工具后,发觉 BCB5 本…

港大腾讯提出DiffusionDet:第一个用于目标检测的扩散模型

编|杜伟、陈萍源|机器之心扩散模型不但在生成任务上非常成功,这次在目标检测任务上,更是超越了成熟的目标检测器。扩散模型( Diffusion Model )作为深度生成模型中的新 SOTA,已然在图像生成任务…

无监督学习概论

文章目录1. 无监督学习基本原理2. 基本问题2.1 聚类 Clustering2.2 降维 Dimensionality Reduction2.3 概率模型估计3. 机器学习三要素4. 无监督学习方法4.1 聚类4.2 降维4.3 话题分析4.4 图分析1. 无监督学习基本原理 机器学习或统计学习一般包括监督学习、无监督学习、强化学…

python xlrd使用_python处理Excel xlrd的简单使用

xlrd主要用于读取Excel文件,本文为大家分享了python处理Excel的具体代码,供大家参考,具体内容如下 安装 pip install xlrd api使用 import xlrd # 打开Excel文件读取数据 workbook xlrd.open_workbook(a.xlsx); # 打印所有的sheet列出所有的…

学习Duwamish7的MSDN说明及相关技术策略

(一).MSDN对Duwamish7的说明   Duwamish 7.0 是由 MSDN 开发的通用 Duwamish 系列应用程序的功能性端口(完全使用 .NET 技术)。尽管示例本身是围绕虚拟网上书店建立的,但本示例主要关注的方面却是性能,与…

程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)

文章目录1. 题目2. 解题2.1 超时解2.2 二分查找1. 题目 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点。 已知马戏团每个人的身高和体重,请编写代码计算叠罗…

海洋分享lol皮肤插件_LOL战斗之夜客户端BUG频出服务器爆满!如何提前领取皮肤?...

Hello大家好,我是Taker!昨天的战斗之夜,小编可是单排奋战了一整晚~排位段位和箱子积分都定格在了钻石,不知道各位如何呢?(^o^)/~今天终于到了收获的日子了!之前我们打的积分所获得的皮肤箱子今天就可以打开…

socket异步处理问题

由于一个项目要和第三方软件做接口,第三方软件是Unix的操作系统,所以用了Socket来传输数据。具体结构是这样的:本项目作为服务器端,第三方软件是客户端,并且有多个客户端。通常情况下,要开多个线程来处理多…

2022爆火的AIGC,能给AI续命吗

文 | 陈彩娴源 | AI科技评论生产力如已成熟,想象力还会远吗?“你们是从什么时候开始注意到人类的?”“当第一个原始人开始仰望星空的时候。”AI 的类人猿,早已开始仰望人类。来自机器的审视在过去短短的两年间,算法从业…

LeetCode 354. 俄罗斯套娃信封问题(最长上升子序 DP/二分查找)

1. 题目 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”…

python语言语句块标记是_Python的基本语法——语句块

1.语句块是在条件为真(条件语句)时执行或者执行多次(循环语句)的一组语句; 2在代码前放置空格来缩进语句即可创建语句块,语句块中的每行必须是同样的缩进量; 3.缩进:Python开发者有意…

[导入]设计模式初学者系列-工厂方法

摘要: 闲谈工厂方法 设计模式系列到了第四篇了,如果还不谈谈工厂方法设计模式就太对不起GoF了,为什么有如此一说?实际上工厂方法模式是好些模式的基石,她们或多或少的使用了工厂方法模式或以工厂方法为模型。 工厂方法模式是一种类…

推荐一个好发论文的研究方向

今天给大家推荐一个研究的好方向—— 图神经网络。它是近些年学术界和工业界最新的研究热点!在社交网络、知识图谱、推荐系统等工业界有广阔的应用前景。最重要的是,图神经网络与CV和NLP交叉,容易有创新点,是出论文的好方向。对于…

LeetCode 31. 下一个排列(线性扫描)

1. 题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。…

Google工作10年的职场感悟

源|电子发烧友网、程序厨哈喽大家好,今天坐地铁读到了一位在 Google 工作10年的“老”工程师关于技术、管理和职场生涯的感悟。我看完后觉得很有收获,因此在这里也分享给大家。以下是全文,后文中的「我」均指「原作者」。我在 Goo…

博客堂joycode被黑掉了

博客堂现在用ie7已经打不开了&#xff0c;用telnet www.joycode.com 80 链接&#xff0c;链接成功之后输入大写的命令 GET / 然后连续两次回车&#xff0c;就可以看到第一行的木马代码<iframe src?????? width20 height0 frameborder0></iframe>。访问其中任…