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

RabbitMQ简单使用

       这篇文章通过一个最简单的例子,让初学者能了解RabbitMQ如何完成生产消息和消息的。

        所有的程序员在学习一门新技术的时候,都是从 Hello World 进入到Colorful World的,本节也将按照惯例,从HelloWorld开始,演示RabbitMQ的Produce和Consumer的简单使用。本RabbitMQ系列的演示代码默认都是使用Java语言。

设置账号

        在开始HelloWorld之前,需要注意的是,RabbitMQ默认的账号是guest / guest,这个账号有限制,默认只能通过本地网络(localhost)访问,远程访问受限制,所以在实际发送和消费消息之前,需要设置新的账号和设置权限。具体账号和权限的内容敬请关注后面的更新。

添加账号

我们为HelloWorld创建一个新的用户为root,并设置密码为root,后续Java客户端代码中使用这个root账号发送和消费消息。

[root@hidden -]# rabbitmqct1 add user root root
Creating user "root"

设置权限

在创建好账号之后就要为这个账号创建权限了。

[root@hidden - ]# rabbitmqct1 set_permissions -p / root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "/"

设置角色

最后需要为这个账号添加角色,这里我们添加管理员角色

[root@hidden - ]# rabbitmqct1 set user_tags root administrator
Setting tags for user "root" to [administrator]

经过上面的步骤,root账号就已经创建成功,也可以通过客户端链接rabbitmq的broker,如果遇到下面的问题,说明是账号出现的问题,参考上面的步骤设置,或者检查账号是否正确。

Exception in thread "main" com.rabbitmq.c1ient.AuthenticationFai1ureException :
ACCESS REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker 1ogfi1e.

添加Maven依赖

RabbitMQ的java版客户端的maven以来如下,可以根据自己的环境选择具体的版本即可。

<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency><groupld>com.rabbitmq</groupld><artifactld>amqp-client</artifactld><version>${rabbitmq.version}</version>
</dependency>

Producer案例

Producer就是用来向MQ发送消息,下面就是一个Producer的HelloWorld。

import com.rabbitmq.client.*;
import org.junit.jupiter.api.Test;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class ProducerTest {@Testpublic void helloWorld() throws IOException, TimeoutException {// 交换器名字String exchangeName = "helloworld_exchange";// 路由键String routingKey = "helloworld_routing_key";// 队列名字String queueName = "helloworld_queue";// 创建连接工厂,用来创建具体的连接ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost("localhost");connectionFactory.setPort(5672);connectionFactory.setUsername("root");connectionFactory.setPassword("root");// 根据上面的设置信息,创建具体的连接Connection connection = connectionFactory.newConnection();// 在创建的连接上,创建一个通道Channel channel = connection.createChannel();// 在通道上声明交换器channel.exchangeDeclare(exchangeName, "direct", true, false, null);// 在通道上声明队列channel.queueDeclare(queueName, true, false, false, null);// 声明交换器和队列的绑定关系channel.queueBind(queueName, exchangeName, routingKey);String message = "hello world";// 往通道上发送消息,消息通过绑定键发送到指定的队列,也就是上面申明的绑定关系的队列channel.basicPublish(exchangeName, routingKey, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());// 关闭通过和连接channel.close();connection.close();}}

Consumer案例

消息发送到MQ,Consumer就可以订阅队列,并开始消费消息,下面就是一个Consumer的HelloWorld。

import com.rabbitmq.client.*;
import org.junit.jupiter.api.Test;import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;public class ConsumerTest {@Testpublic void helloWorld() throws IOException, TimeoutException, InterruptedException {// 订阅的队列String queueName = "helloworld_queue";// 订阅队列所在的broker的地址信息,这里演示另一种创建连接的方式Address[] addresses = {new Address("localhost", 5672)};ConnectionFactory factory = new ConnectionFactory();factory.setUsername("root");factory.setPassword("root");Connection connection = factory.newConnection(addresses);Channel channel = connection.createChannel();// consumer端一般需要设置的值,表示一次消费的消息数量的最大值channel.basicQos(64);// 创建默认的Consumer,并实现回调函数,在回调中确认消息,发送ackConsumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println(Thread.currentThread().getName() + " -> consumer : " + consumerTag + " , receive message : " + new String(body));channel.basicAck(envelope.getDeliveryTag(), false);}};// 消费消息,异步执行String consumeTag = channel.basicConsume(queueName, consumer);System.out.println(consumeTag);// 等到消费消息完成,并返回确认给brokerTimeUnit.SECONDS.sleep(10);// 关闭资源channel.close();connection.close();}
}

以上就是通过一个HelloWorld,了解下RabbitMQ的简单使用,后续会不定期更新RabbitMQ的内容,感兴趣的小伙伴敬请关注哦。

相关文章:

RabbitMQ简单使用

这篇文章通过一个最简单的例子&#xff0c;让初学者能了解RabbitMQ如何完成生产消息和消息的。 所有的程序员在学习一门新技术的时候&#xff0c;都是从 Hello World 进入到Colorful World的&#xff0c;本节也将按照惯例&#xff0c;从HelloWorld开始&#xff0c;演示RabbitMQ…...

Lambda表达式

&#x1f44c; 棒棒有言&#xff1a;也许我一直照着别人的方向飞&#xff0c;可是这次&#xff0c;我想要用我的方式飞翔一次&#xff01;人生&#xff0c;既要淡&#xff0c;又要有味。凡事不必太在意&#xff0c;一切随缘&#xff0c;缘深多聚聚&#xff0c;缘浅随它去。凡事…...

JSON数据格式【学习记录】

JSON介绍 JSON&#xff08;JavaScript Objet Notation&#xff09;是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它采用一种键:值对的文本格式来存储和表示数据&#xff0c;在系统交换数据过程中常常被使用&#xff0c;是…...

LeetCode——1234. 替换子串得到平衡字符串

一、题目 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符&#xff0c;且长度为 n 的字符串。 假如在该字符串中&#xff0c;这四个字符都恰好出现 n/4 次&#xff0c;那么它就是一个「平衡字符串」。 给你一个这样的字符串 s&#xff0c;请通过「替换一个子串」的方式&a…...

Web自动化测试——selenium篇(二)

文章目录一、浏览器相关操作二、键盘操作三、鼠标操作四、弹窗操作五、下拉框选择六、文件上传七、错误截图一、浏览器相关操作 浏览器窗口大小设置 driver.manage().window().maximize();//窗口最大化 driver.manage().window().minimize();//窗口最小化 driver.manage().wi…...

RK3399平台开发系列讲解(文件系统篇)虚拟文件系统的数据结构

🚀返回专栏总目录 文章目录 一、超级块二、挂载描述符三、文件系统类型四、索引节点五、目录项沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍虚拟文件系统的数据结构。 一、超级块 文件系统的第一块是超级块,用来描述文件系统的总体信息。当我们把文件系…...

企业财务管理升级,智慧税务和数据可视化打造新标准

一、引言在发展社会主义市场经济的过程中&#xff0c;税收承担着组织财政收入、调控经济、调节社会分配的职能。中国每年财政收入的90%以上来自税收&#xff0c;其地位和作用越来越重要&#xff0c;可称之为国家经济的“晴雨表”&#xff0c;有效进行税务管理、充分挖掘税务大数…...

JFET(结型场效应管)

JFET的结构示意图 参考&#xff1a;https://blog.csdn.net/weixin_45882303/article/details/106008695 下图是实际结构图&#xff0c; 下面是原理图和符号表示&#xff08;参考连接中的图片&#xff09; 分析 VGS 对电压id的控制&#xff08;固定VDS&#xff09; 当让D和…...

oceanbase部署--使用OBD部署obagent和promethous_grafana软件

obagent OBAgent 通常部署在 OBServer 节点上。OBAgent支持推、拉两种数据采集模式&#xff0c;可以满足不同的应用场景。 OBAgent默认支持的插件包括主机数据采集、OceanBase 数据库指标的采集、监控数据标签处理和 Prometheus 协议的 HTTP 服务。 1&#xff09;编辑 OBAgent …...

浏览器广告拦截插件| 浏览器搜索广告横飞怎么办

文章目录浏览器广告拦截插件| 浏览器搜索广告横飞怎么办一、效果二、安装浏览器广告拦截插件| 浏览器搜索广告横飞怎么办 浏览器广告横飞怎么办&#xff1f;今天教你一招解决&#xff01;很多小伙伴说自己用的浏览器总是有广告。 今天咱们就针对这个问题分享一个浏览器插件&a…...

Redis优化内存篇

【内存消耗】 场景&#xff1a;业务ID->图片ID&#xff08;KV:partnerId->objectId&#xff09;。 刚开始&#xff0c;我们保存了1亿张图片&#xff0c;大约用了6.4GB的内存。 随着图片数据量的不断增加&#xff0c;Redis变慢了。 新的认知&#xff1a;String类型并不是适…...

Vue原理解析

文章目录1. VUE的响应式原理1.1 ViewModel1.2 双向绑定的基本原理1.3 什么是响应性1.4 Vue 中的响应性是如何工作的2. Vue 渲染机制2.1 虚拟 DOM2.2 渲染管线2.3 带编译时信息的虚拟 DOM2.3.1 静态提升2.3.2 修补标记 Flags2.3.3 树结构打平2.3.4 对 SSR 激活的影响1. VUE的响应…...

C# Lambda表达式含义及各种写法

Lambda表达式在各个语言中的表达方式都不太相同&#xff0c;本文重点介绍C#的Lambda表达式。 首先&#xff0c;Lambda表达式就是一个匿名的方法/函数。 以下面的一个完整版作为例子&#xff0c;前面是参数&#xff0c;后面是返回值&#xff1a; 由于 Lambda表达式和委托常常一起…...

计算机组成原理:1. 计算机系统概论

更好的阅读体验\huge{\color{red}{更好的阅读体验}}更好的阅读体验 文章目录1.1 计算机系统简介1.1.1 计算机软硬件概念1.1.2 计算机的层次1.1.3计算机组成和计算机体系结构1.2 计算机的基本组成1.2.1 冯诺伊曼计算机的特点1.2.2 计算机的硬件框图1.2.3 计算机的工作步骤1.3 计…...

【c#】c#常用小技巧方法整理(5)—— 字符串操作类

1、GetStrArray(string str, char speater, bool toLower) 把字符串按照分隔符转换成 List 2、GetStrArray(string str) 把字符串转 按照, 分割 换为数据 3、GetArrayStr(List list, string speater) 把 List 按照分隔符组装成 string 4、GetArrayStr(List list) 得到数组列表以…...

用队列实现栈VS用栈实现队列

之前我们就讲过队列&#xff0c;栈的基础知识&#xff0c;笔者之前有过详细的介绍&#xff0c;感兴趣的可以根据笔者的个人主页进行查找&#xff1a;https://blog.csdn.net/weixin_64308540/?typelately225. 用队列实现栈请你仅使用两个队列实现一个后入先出&#xff08;LIFO&…...

MY2480-16P语音模块的使用

MY2480-16P语音模块的使用开发环境&#xff1a;STM32CUBEMXKEIL5辅助软件&#xff1a;串口助手、迅捷文字转语音一、MY2480-16P语音模块引脚图及引脚定义二、选择触发方式三、使用串口控制MY2480-16P语音模块四、模块使用指南开发环境&#xff1a;STM32CUBEMXKEIL5 辅助软件&a…...

I/O 多路复用

。新到来一个 TCP 连接&#xff0c;就需要分配一个进程或者线程&#xff0c;那么如果要达到 C10K&#xff0c;意味着要一台机器维护 1 万个连接&#xff0c;相当于要维护 1 万个进程/线程&#xff0c;操作系统就算死扛也是扛不住的。 一个进程虽然任一时刻只能处理一个请求&…...

2023 最新版网络安全保姆级指南,从0到1,建议收藏!

一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;且过渡到网络安全用到编程的用到的编程的关键点不多。一般人如果想要把编程学好再开始学习网络安全往…...

力扣39.组合总数

文章目录力扣39.组合总数题目描述方法1&#xff1a;深搜回溯力扣39.组合总数 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可…...

KMS_VL_ALL_AIO激活工具完全指南:从问题诊断到长效管理

KMS_VL_ALL_AIO激活工具完全指南&#xff1a;从问题诊断到长效管理 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 如何诊断Windows/Office激活失败的核心原因&#xff1f; 1.1 激活失败的三大…...

百川2-13B模型安全测试:OpenClaw在防御恶意指令方面的表现

百川2-13B模型安全测试&#xff1a;OpenClaw在防御恶意指令方面的表现 1. 为什么需要测试AI助手的安全性 去年我在本地部署了一个自动化助手&#xff0c;本想让它帮我整理文档和收发邮件。结果有次不小心让它执行了一个包含rm -rf的命令&#xff0c;差点把工作目录清空。这次…...

ROS2新手必看:用turtlesim小乌龟快速入门机器人仿真(附完整安装指南)

ROS2实战入门&#xff1a;从turtlesim小乌龟探索机器人仿真世界 引言&#xff1a;为什么选择turtlesim作为ROS2的起点&#xff1f; 在机器人操作系统(ROS)的学习道路上&#xff0c;很多开发者都会遇到一个共同的困境&#xff1a;理论概念抽象难懂&#xff0c;而直接上手复杂项…...

Docker 容器中文字体及 matplotlib 环境应用

为了避开 Noto CJK 这种复杂的 TTC(TrueType Collection)大包带来的识别问题,最理想的选择是使用独立打包的 OTF 或 TTF 字体。 0. 环境检查 # 1. 更新源并安装 fontconfig apt-get update apt-get install -y fontconfig# 2. 现在 fc-cache 命令可用了,刷新系统字体 fc-…...

PowerBuilder老系统维护指南:PB12.5连接现代数据库(如MySQL 8.0)的避坑实操

PowerBuilder老系统维护实战&#xff1a;PB12.5连接MySQL 8.0的七个关键步骤 当技术栈的代际差异超过十年&#xff0c;每一次数据库连接尝试都可能演变成一场跨越时空的调试马拉松。那些在2006年运行良好的PB12.5应用&#xff0c;今天面对MySQL 8.0的SSL加密要求和UTF8MB4字符集…...

生物认证锁:用虹膜加密核心模块——软件测试从业者的专业指南

在数字化转型浪潮中&#xff0c;生物认证技术正重塑安全防护体系&#xff0c;其中虹膜识别凭借其超高精度和防伪特性&#xff0c;成为加密核心模块&#xff08;如支付系统、数据库访问控制或敏感API&#xff09;的首选方案。作为软件测试从业者&#xff0c;您肩负着验证系统鲁棒…...

3大突破:重新定义Revit插件开发流程

3大突破&#xff1a;重新定义Revit插件开发流程 【免费下载链接】RevitAddInManager Revit AddinManager update .NET assemblies without restart Revit for developer. 项目地址: https://gitcode.com/gh_mirrors/re/RevitAddInManager 引言&#xff1a;Revit插件开发…...

小白也能搞定!用Docker和Halo 2.10搭建个人博客,再也不用担心公网访问问题

零基础玩转DockerHalo 2.10&#xff1a;打造高颜值个人博客全攻略 在数字内容创作爆发的时代&#xff0c;拥有一个专属博客空间已成为个人品牌建设的标配。但传统建站方案往往面临技术门槛高、维护成本大等痛点。本文将带你用Docker容器技术和Halo 2.10开源系统&#xff0c;30…...

5个高效能技巧:人工智能术语库全场景应用从入门到精通

5个高效能技巧&#xff1a;人工智能术语库全场景应用从入门到精通 【免费下载链接】Artificial-Intelligence-Terminology-Database 这个仓库包含一个关于人工智能术语的数据库。适合AI研究者、学生以及希望了解AI专业术语的人士。特点是包含大量AI相关词汇&#xff0c;有助于理…...

如何通过离线语音输入提升Android设备的文字录入效率

如何通过离线语音输入提升Android设备的文字录入效率 【免费下载链接】Sayboard An open-source on-device voice IME (keyboard) for Android using the Vosk library. 项目地址: https://gitcode.com/gh_mirrors/sa/Sayboard 在智能手机普及的今天&#xff0c;文字输…...