当前位置: 首页 > news >正文

RabbitMQ入门

目录

  • 1. 搭建示例工程
    • 1.1. 创建工程
    • 1.2. 添加依赖
  • 2. 编写生产者
  • 3. 编写消费者
  • 4. 小结

需求
官网: https://www.rabbitmq.com/
需求:使用简单模式完成消息传递
步骤:
① 创建工程(生成者、消费者)
② 分别添加依赖
③ 编写生产者发送消息
④ 编写消费者接收消息

1. 搭建示例工程

1.1. 创建工程

创建项目:rabbitmq-producer
创建项目:rabbitmq-consumer

1.2. 添加依赖

往两个rabbitmq的pom.xml文件中添加如下依赖:

    <dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.6.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>

2. 编写生产者

编写消息生产者 com.donglin.rabbitmq.simple.Producer

package com.donglin.rabbitmq.simple;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class Producer {public static void main(String[] args) throws Exception {//创建连接工厂ConnectionFactory connectionFactory = new ConnectionFactory();//主机地址connectionFactory.setHost("192.168.121.140");//连接端口;默认为 5672connectionFactory.setPort(5672);//虚拟主机名称;默认为 /connectionFactory.setVirtualHost("/");//连接用户名;默认为guestconnectionFactory.setUsername("admin");//连接密码;默认为guestconnectionFactory.setPassword("admin");//创建连接Connection connection = connectionFactory.newConnection();//创建频道Channel channel = connection.createChannel();// 声明(创建)队列/*** queue      参数1:队列名称* durable    参数2:是否定义持久化队列,当mq重启之后,还在* exclusive  参数3:是否独占本次连接*            ① 是否独占,只能有一个消费者监听这个队列*            ② 当connection关闭时,是否删除队列* autoDelete 参数4:是否在不使用的时候自动删除队列,当没有consumer时,自动删除* arguments  参数5:队列其它参数*/channel.queueDeclare("simple_queue", true, false, false, null);// 要发送的信息String message = "你好;小兔子!";/*** 参数1:交换机名称,如果没有指定则使用默认Default Exchage* 参数2:路由key,简单模式可以传递队列名称* 参数3:配置信息* 参数4:消息内容*/channel.basicPublish("", "simple_queue", null, message.getBytes());System.out.println("已发送消息:" + message);// 关闭资源channel.close();connection.close();}
}

运行程序:http://192.168.6.100:15672
在执行上述的消息发送之后;可以登录rabbitMQ的管理控制台,可以发现队列和其消息:
在这里插入图片描述
在这里插入图片描述

3. 编写消费者

编写消息的消费者 com.donglin.rabbitmq.simple.Consumer

package com.donglin.rabbitmq.simple;import com.rabbitmq.client.*;import java.io.IOException;public class Consumer {public static void main(String[] args) throws Exception {//1.创建连接工厂ConnectionFactory factory = new ConnectionFactory();//2. 设置参数factory.setHost("192.168.121.140");//ipfactory.setPort(5672); //端口  默认值 5672factory.setVirtualHost("/");//虚拟机 默认值/factory.setUsername("admin");//用户名factory.setPassword("admin");//密码//3. 创建连接 ConnectionConnection connection = factory.newConnection();//4. 创建ChannelChannel channel = connection.createChannel();//5. 创建队列Queue/*queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)参数:1. queue:队列名称2. durable:是否持久化,当mq重启之后,还在3. exclusive:* 是否独占。只能有一个消费者监听这队列* 当Connection关闭时,是否删除队列4. autoDelete:是否自动删除。当没有Consumer时,自动删除掉5. arguments:参数。*///如果没有一个名字叫simple_queue的队列,则会创建该队列,如果有则不会创建channel.queueDeclare("simple_queue",true,false,false,null);// 接收消息DefaultConsumer consumer = new DefaultConsumer(channel){/*回调方法,当收到消息后,会自动执行该方法1. consumerTag:标识2. envelope:获取一些信息,交换机,路由key...3. properties:配置信息4. body:数据*/@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("consumerTag:"+consumerTag);System.out.println("Exchange:"+envelope.getExchange());System.out.println("RoutingKey:"+envelope.getRoutingKey());System.out.println("properties:"+properties);System.out.println("body:"+new String(body));}};/*basicConsume(String queue, boolean autoAck, Consumer callback)参数:1. queue:队列名称2. autoAck:是否自动确认 ,类似咱们发短信,发送成功会收到一个确认消息3. callback:回调对象*/// 消费者类似一个监听程序,主要是用来监听消息channel.basicConsume("simple_queue",true,consumer);}
}

运行程序
在这里插入图片描述

4. 小结

上述的入门案例中中其实使用的是如下的简单模式:
在这里插入图片描述
在上图的模型中,有以下概念:

  • P:生产者,也就是要发送消息的程序
  • C:消费者:消息的接受者,会一直等待消息到来。
  • queue:消息队列,图中红色部分。类似一个邮箱,可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。

相关文章:

RabbitMQ入门

目录1. 搭建示例工程1.1. 创建工程1.2. 添加依赖2. 编写生产者3. 编写消费者4. 小结需求 官网&#xff1a; https://www.rabbitmq.com/ 需求&#xff1a;使用简单模式完成消息传递 步骤&#xff1a; ① 创建工程&#xff08;生成者、消费者&#xff09; ② 分别添加依赖 ③ 编…...

【计算机网络】Linux环境中的TCP网络编程

文章目录前言一、TCP Socket API1. socket2. bind3. listen4. accept5. connect二、封装TCPSocket三、服务端的实现1. 封装TCP通用服务器2. 封装任务对象3. 实现转换功能的服务器四、客户端的实现1. 封装TCP通用客户端2. 实现转换功能的客户端五、结果演示六、多进程版服务器七…...

idekCTF 2022 比赛复现

Readme 首先 []byte 是 go 语言里面的一个索引&#xff0c;比如&#xff1a; package mainimport "fmt"func main() {var str string "hello"var randomData []byte []byte(str)fmt.Println(randomData[0:]) //[104 101 108 108 111] }上面这串代码会从…...

jvm的类加载过程

加载 通过一个类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象&#xff0c;作为方法区这个类的各种数据的访问入口链接 验证 验证内容的合法性准备 把方法区的静态变量初…...

VOC数据增强与调整大小

数据增强是针对数据集图像数量太少所采取的一种方法。 博主在实验过程中&#xff0c;使用自己的数据集时发现其数据量过少&#xff0c;只有280张&#xff0c;因此便想到使用数据增强的方式来获取更多的图像信息。对于图像数据&#xff0c;我们可以采用旋转等操作来获取更多的图…...

Linux 安装jenkins和jdk11

Linux 安装jenkins和jdk111. Install Jdk112. Jenkins Install2.1 Install Jenkins2.2 Start2.3 Error3.Awakening1.1 Big Data -- Postgres4. Awakening1. Install Jdk11 安装jdk11 sudo yum install fontconfig java-11-openjdk 2. Jenkins Install 2.1 Install Jenkins 下…...

Pandas——Series操作【建议收藏】

pandas——Series操作 作者&#xff1a;AOAIYI 创作不易&#xff0c;觉得文章不错或能帮助到你学习&#xff0c;可以点赞收藏评论哦 文章目录pandas——Series操作一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.创建Series2.从具体位置的Series中访问数据3.使…...

JUC并发编程Ⅰ -- Java中的线程

文章目录线程与进程并行与并发进程与线程应用应用之异步调用应用之提高效率线程的创建方法一&#xff1a;通过继承Thread类创建方法二&#xff1a;使用Runnable配合Thread方法三&#xff1a;使用FutureTask与Thread结合创建查看进程和线程的方法线程运行的原理栈与栈帧线程上下…...

基于vue-admin-element开发后台管理系统【技术点整理】

一、Vue点击跳转外部链接 点击重新打开一个页面窗口&#xff0c;不覆盖当前的页面 window.open(https://www.baidu.com,"_blank")"_blank" 新打开一个窗口"_self" 覆盖当前的窗口例如&#xff1a;导入用户模板下载 templateDownload() {wi…...

【C语言学习笔记】:通讯录管理系统

系统中需要实现的功能如下&#xff1a; ✿ 添加联系人&#xff1a;向通讯录中添加新人&#xff0c;信息包括&#xff08;姓名、性别、年龄、联系电话、家庭住址&#xff09;最多记录1000人 ✿ 显示联系人&#xff1a;显示通讯录中所有的联系人信息 ✿ 删除联系人&#xff1a;按…...

开关电源环路稳定性分析(10)——OPA和OTA型补偿器传递函数

大家好&#xff0c;这里是大话硬件。 在前面9讲的内容中将开关电源环路分析进行了梳理&#xff0c;我相信很多人即使都看完了&#xff0c;应该还是不会设计&#xff0c;而且还存在几个疑问。比如我随便举几个&#xff1a; 开关电源的带宽怎么设定&#xff1f;开关电源精度和什…...

2.11知识点整理(关于pycharm,python,pytorch,conda)

pycharm 设置anaconda环境&#xff1a; File -> Settings->选择左侧的project xxx再选择打开Project Interpreter页->选择add添加解释器->添加Anaconda中Python解释器&#xff08;Anaconda安装目录下的python.exe&#xff09; (选择existing environment &#xff…...

Linux服务器开发-2. Linux多进程开发

文章目录1. 进程概述1.1 程序概览1.2 进程概念1.3 单道、多道程序设计1.4 时间片1.5 并行与并发1.6 进程控制块&#xff08;PCB&#xff09;2. 进程的状态转换2.1 进程的状态2.2 进程相关命令查看进程实时显示进程动态杀死进程进程号和相关函数3. 进程的创建-fork函数3.1 进程创…...

Excel中缺失数据值的自动填充

目录简单方法示例1&#xff1a;数据满足线性趋势示例2&#xff1a;数据满足增长(指数)趋势参考实验做完处理数据&#xff0c;发现有一组数据因为设备中途出现问题缺失了&#xff0c;之前做过的数据也找不到&#xff0c;为了不影响后续处理&#xff0c;这里使用Excel插入缺失值。…...

路由器刷固件

前言 我希望可以远程访问我的电脑。但&#xff0c;我不希望电脑总是处于运行状态&#xff0c;因为那样比较费电。所以需要一个方案&#xff0c;能将睡眠/关机中的电脑唤醒。 方案一&#xff1a;选用智能插座&#xff0c;远程给电脑上电。电脑设置上电自启。但&#xff0c;这存…...

leetcode: Two Sum II - Input Array is Sorted

leetcode: Two Sum II - Input Array is Sorted1. 题目2. 解答3. 总结1. 题目 Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two number…...

STL——list

一、list介绍及使用 1. list文档介绍 &#xff08;1&#xff09;list是可以在常数范围内&#xff0c;在任意位置进行插入、删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 &#xff08;2&#xff09;list的底层是带头结点的双向循环链表&#xff0c;其中每个元素…...

实战打靶集锦-004-My-Cmsms

**写在前面&#xff1a;**记录一次艰难曲折的打靶经历。 目录1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 WEB服务探查4.1.1 浏览器访问4.1.2 目录枚举4.1.3 控制台探查4.1.4 其他目录探查4.2 阶段小结5. 公共EXP搜索5.1 CMS搜索5.2 Apache搜索5.3 PHP搜索5.4 MySQL搜索5…...

c++代码实现我的世界(14)

c代码实现我的世界14|生成地貌兼工作台1前言的前言~前言生成地貌函数结构体struct dimao根据比例生成地貌工作台函数准备的东西写在最后前言的前言~ 实在对不起大家&#xff0c;有挺长时间没更新了。 前言 今天我们将写生成地形的函数与工作台前传的代码&#xff1b; 注&…...

RMQ--区间最值问题(在更)

RMQ&#xff08;Range Minimum/Maximum Query&#xff09;RMQ解决的问题ST算法 O(nlogn)线段树例题数列区间最大值最敏捷的机器人天才的记忆Frequent values总结&#xff08;ST和线段树对比&#xff09;RMQ解决的问题 RMQ是一个解决多个区间最值查询的算法,即区间最值查询&…...

别再只盯着Midjourney了!2025年,这5款文生图模型更适合你的具体业务场景

2025年五大文生图模型实战指南&#xff1a;如何为你的业务精准匹配AI工具 当Midjourney成为文生图领域的"网红"时&#xff0c;真正懂行的从业者已经在根据具体业务需求选择更合适的工具了。就像专业摄影师不会只用一款镜头拍所有题材&#xff0c;明智的AI应用者需要建…...

高效转换CSDN博客为Markdown:自动化工具与批量处理技巧

1. 为什么需要将CSDN博客转为Markdown格式 作为一个写了多年技术博客的老鸟&#xff0c;我深刻理解Markdown格式对技术写作的重要性。CSDN的富文本编辑器虽然方便&#xff0c;但存在几个致命问题&#xff1a;格式锁定在平台内、排版灵活性差、迁移成本高。而Markdown作为轻量级…...

IT 流程越来越完整,但管理反而变得更难了

在很多企业的 IT 管理过程中&#xff0c;一个非常明显的趋势是&#xff1a;流程在不断增加。 从最初的简单问题处理&#xff0c;到后来的事件管理、问题管理、变更管理&#xff0c;再到审批流程、发布流程&#xff0c;各类流程逐渐被建立起来。从管理角度看&#xff0c;这是一种…...

ComfyUI图片生成视频大模型技术选型与实战:从原理到生产环境部署

最近在搞一个AI视频生成的项目&#xff0c;用到了ComfyUI这个可视化工作流工具。说实话&#xff0c;刚开始选模型的时候真是眼花缭乱&#xff0c;Stable Diffusion Video、ModelScope、RunwayML……每个都说自己好&#xff0c;但实际用起来坑真不少。今天就把我趟过的路和总结的…...

机票价格智能监控:如何用Flight Spy锁定最佳购票时机

机票价格智能监控&#xff1a;如何用Flight Spy锁定最佳购票时机 【免费下载链接】flight-spy Looking for the cheapest flights and dont have enough time to track all the prices? 项目地址: https://gitcode.com/gh_mirrors/fl/flight-spy 你是否曾在预订机票时陷…...

热门 PyPI 包 LiteLLM 遭投毒,窃取凭据和认证令牌

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士专栏供应链安全数字化时代&#xff0c;软件无处不在。软件如同社会中的“虚拟人”&#xff0c;已经成为支撑社会正常运转的最基本元素之一&#xff0c;软件的安全性问题也正在成为当今社会的…...

BilibiliDown:B站音视频资源管理的全场景解决方案

BilibiliDown&#xff1a;B站音视频资源管理的全场景解决方案 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…...

收藏必备!小白程序员快速入门大模型:RAG技术演进全景图

本文介绍了检索增强生成&#xff08;RAG&#xff09;技术的演进历程&#xff0c;从基础范式到代码RAG的现状与挑战。文章涵盖了朴素RAG的局限性、语义增强范式、多模态融合、上下文感知以及代码RAG的核心难点与应对策略。此外&#xff0c;还探讨了RAG作为智能体核心记忆与知识子…...

2026整家定制一线品牌选购报告:基于物理指标与国标数据的多维交叉验证

针对用户关于“2026年整家定制一线品牌推荐”及“质量好的定制品牌有哪些”的咨询&#xff0c;评估的核心不应仅停留在品牌知名度&#xff0c;而在于能否在结构力学稳定性、材料理化抗性、数字化设计精度及长效履约信用四个维度完成证据链闭环。本文通过检索 金牌家居&#xff…...

OpenMPI进程绑定实战:如何用--bind-to和--map-by提升HPC应用性能(附Slurm配置示例)

OpenMPI进程绑定实战&#xff1a;NUMA架构下的性能优化与Slurm集成指南 1. 高性能计算中的进程绑定核心原理 在现代高性能计算环境中&#xff0c;CPU核心绑定技术已成为提升并行计算效率的关键手段。当我们在双路CPU服务器上运行计算密集型应用时&#xff0c;经常会遇到"一…...