RabbitMQ 安装使用
文章目录
- RabbitMQ 安装使用
- 安装
- 下载 Erlang
- 下载 RabbitMQ 的服务
- 安装好后看是否有 RabbitMQ 的服务
- 开启管理 UI
- RabbitMQ 端口使用一览图
- 使用
- 输出最简单的 Hello World!
- 生产者定义
- 消费者消费消息
- 小拓展
RabbitMQ 安装使用
安装
下载 Erlang
RabbitMQ 是用这个语言写的,这个语言性能好,下载就好了。
下载地址
如果是 Windows 直接点击 Installer 下载傻瓜式下载。
下载的时候一般不放到默认路径,自己选一个自己特定的安装路径。
下载 RabbitMQ 的服务
下载地址
也是直接点击看下图
安装好后看是否有 RabbitMQ 的服务
如果有这样的服务那就是成功啦。
ctrl + R
输入 services.msc
查看服务列表
找到 RabbitMQ 服务,如果在运行,那么就是安装成功了。
开启管理 UI
在目录,打开 sbin 目录
并且在此目录下打开命令行,运行 rabbitmq-plugins enable rabbitmq_management
如果没有什么报错的话就说明管理 UI 的插件已经成功配置。
这时候你只需要打开 localhost:15672/
即可进入管理页面,如下:
一开始进入,如果需要密码的话,那么用户明和密码都是 guest
如果你在服务端需要远程管理,这个账号是登录不了的,需要你自己再去创建一个账号。
RabbitMQ 端口使用一览图
比如 15672 是管理 UI 的端口
RabbitMQ 服务就是运行在端口 5672
使用
这里使用的是 Java 版本
消息队列中的有几个重要的 专有名词,一个是生产者(producer)=》 生产消息,一个是消费者(consumer)=》 消费消息,一个是 broker 对消息进行转发的中间人。还有一个就是 router 路由,如何进行转发。
输出最简单的 Hello World!
输出 Hello World 就是这样的一个简单的模型。
有一个生产者创造一条消息转发到 Broker (这个是由 RabbitMQ 自动完成),一个消费者消费这条消息。
生产者定义
代码中有详细的注释。
package com.xwhking.testcode.TestRabbitMQ;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.nio.charset.StandardCharsets;public class Send {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory(); // 创建一个RabbitMQ 的连接工厂factory.setHost("localhost"); // 设置RabbitMQ 的主机地址try (Connection connection = factory.newConnection(); // 创建一个连接Channel channel = connection.createChannel()) { // 创一个管道,用于通信,传输消息。channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 生命一个队列, 第一个参数是队列的名字,第二个参数是是否持久化,第三个参数是是否独占队列,第四个参数是是否自动删除,第五个参数是队列的属性。String message = "Hello World!";channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); // 发布消息,第一个参数是交换机名,第二个参数是队列名,第三个参数是消息的属性,第四个参数是消息的内容。传输过程都是以二进制进行传输。System.out.println(" [x] Sent '" + message + "'");}}
}
运行以后就可以在管理界面看到了。
消费者消费消息
package com.xwhking.testcode.TestRabbitMQ;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import java.nio.charset.StandardCharsets;public class Recv {private final static String QUEUE_NAME = "hello"; // 队列名字public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory(); // 创建工厂factory.setHost("localhost"); // 设置主机Connection connection = factory.newConnection(); // 获取一个连接Channel channel = connection.createChannel(); // 获取通道channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 声明一个队列,参数:队列名,是否持久化,是否独占,是否自动删除,参数System.out.println(" [*] Waiting for messages. To exit press CTRL+C");DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), StandardCharsets.UTF_8);System.out.println(" [x] Received '" + message + "'");};// 消费者收到消息的回调函数,参数:消费者标签,消息,回调函数内,就是处理消息的代码channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { }); // 消费者,参数:队列名,是否自动应答,回调函数,消费者标签}
}
消费后管理页面
拥有的一条消息就被消费啦。
小拓展
消费者不是启动以后,就是一个阻塞线程吗,如果没有消息的来到,那么线程会一直阻塞,那么我是否能够改一下生产者,能够随时输入消息,让消费者收到呢。
嗯嗯嗯!
说干就干
修改生产者
package com.xwhking.testcode.TestRabbitMQ;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.nio.charset.StandardCharsets;
import java.util.Scanner;public class Send {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory(); // 创建一个RabbitMQ 的连接工厂factory.setHost("localhost"); // 设置RabbitMQ 的主机地址try (Connection connection = factory.newConnection(); // 创建一个连接Channel channel = connection.createChannel()) { // 创一个管道,用于通信,传输消息。channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 生命一个队列, 第一个参数是队列的名字,第二个参数是是否持久化,第三个参数是是否独占队列,第四个参数是是否自动删除,第五个参数是队列的属性。String message = "Hello World!";Scanner scanner = new Scanner(System.in);while(true){message = scanner.nextLine();channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); // 发布消息,第一个参数是交换机名,第二个参数是队列名,第三个参数是消息的属性,第四个参数是消息的内容。传输过程都是以二进制进行传输。System.out.println(" [x] Sent '" + message + "'");}}}
}
大家好,我是xwhking,一名技术爱好者,目前正在全力学习 Java,前端也会一点,如果你有任何疑问请你评论,或者可以加我QQ(2837468248)说明来意!希望能够与你共同进步
相关文章:

RabbitMQ 安装使用
文章目录 RabbitMQ 安装使用安装下载 Erlang下载 RabbitMQ 的服务安装好后看是否有 RabbitMQ 的服务开启管理 UIRabbitMQ 端口使用一览图 使用输出最简单的 Hello World!生产者定义消费者消费消息小拓展 RabbitMQ 安装使用 安装 下载 Erlang RabbitMQ 是用这个语…...

echarts x轴名称过长tip显示全称
xAxis的axisLabel的内容如下: axisLabel: { rotate: -45, color: document.body.className.indexOf(custom-f4c46d) > -1 ? #fff : #343434, // 显示省略号操作(第一步) formatter: function (value) { var val if (value.length >…...
js和css阻塞问题
面试常见问题 css 加载会不会阻塞 js 的加载?(不会)css 加载会不会阻塞 js 的执行?(会)css 加载会不会阻塞 DOM 的解析?(不会)css 加载会不会阻塞 DOM 的渲染࿱…...

MySQL 的基础操作
数据库的基础操作 1. 库操作2. 表的操作3. 数据类型 数据库是现代应用程序中至关重要的组成部分,通过数据库管理系统(DBMS)存储和管理数据。 1. 库操作 创建数据库 创建数据库是开始使用数据库的第一步。下面是一些常见的创建数据库的示例&a…...

【python进阶篇】面向对象编程(1)
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定…...

力扣面试经典150 —— 6-10题
力扣面试经典150题在 VScode 中安装 LeetCode 插件即可使用 VScode 刷题,安装 Debug LeetCode 插件可以免费 debug本文使用 python 语言解题,文中 “数组” 通常指 python 列表;文中 “指针” 通常指 python 列表索引 文章目录 6. [中等] 轮转…...

[密码学]入门篇——加密方式
一、概述 加密方法主要分为两大类: 单钥加密(private key cryptography):加密和解密过程都用同一套密码双钥加密(public key cryptography):加密和解密过程用的是两套密码 历史上,…...
构建前后端分离项目常用的代码
构建前后端分离项目常用的代码 1.代码生成器 import com.baomidou.mybatisplus.generator.FastAutoGenerator;import com.baomidou.mybatisplus.generator.config.OutputFile;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.…...

2575. 找出字符串的可整除数组(Go语言)
https://leetcode.cn/problems/find-the-divisibility-array-of-a-string/ 在看题解之前,我的代码是以下这样: package mainimport ("fmt" )func main() {fmt.Println(divisibilityArray("998244353", 3)) }func divisibilityArray…...

Redis与 Memcache区别
Redis与 Memcache区别 1 , Redis 和 Memcache 都是将数据存放在内存中,都是内存数据库。不过 Memcache 还可用于缓存 其他东西,例如图片、视频等等。 2 , Memcache 仅支持key-value结构的数据类型,Redis不仅仅支持简单的key-value类型的数据&…...

#QT(智能家居界面-界面切换)
1.IDE:QTCreator 2.实验 3.记录 (1)创建一个新界面(UI界面) (2)可以看到新加入一个ui文件,双击打开,设置窗口大小与登录界面一致 (3)加入几个PUS…...
js拓展-内置对象
目录 1. 数组对象 1.1 数组的四种方式 1.2 JS中数组的特点 1.3 常用方法 2. 日期对象 2.1 日期对象的创建 2.2 日期对象的方法 2.3 案例:输出现在的时间 3. 全局对象 3.1 字符串转换成数字类型 3.2 编码解码函数 1. 数组对象 注:数组在JS中是一…...

【李沐精读系列】GPT、GPT-2和GPT-3论文精读
论文: GPT:Improving Language Understanding by Generative Pre-Training GTP-2:Language Models are Unsupervised Multitask Learners GPT-3:Language Models are Few-Shot Learners 参考:GPT、GPT-2、GPT-3论文精读…...

Libevent的使用及reactor模型
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读…...
查看Linux服务器配置
# chkconfig --list # 列出所有系统服务 # chkconfig --list | grep on # 列出所有启动的系统服务 # ifconfig # 查看所有网络接口的属性 # iptables -L # 查看防火墙设置 # route -n # 查看路由表 # netstat -lntp # 查看所有监听端口 # netstat -antp # 查看所有已经建立的连…...

【机器学习】包裹式特征选择之递归特征添加法
🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…...

解决cs不能生成Linux木马的问题
要解决的问题:众所周知,msf上面的shell或者是其他的shell想反弹给cs默认情况下是只支持windows的,因为cs的监听模块默认没有linux的,但是有些主机就是用linux搭建的,这可怎么办呢。就要用到一个插件CrossC2。 下载插件…...
vue3组件通信方式
不管是vue2还是vue3,组件通信方式很重要,不管是项目还是面试都是经常用到的知识点。 vue2组件通信方式 props:可以实现父子组件、子父组件、甚至兄弟组件通信 自定义事件:可以实现子父组件通信 全局事件总线$bus:可以实现任意组件通信 pubsub:发布订阅模式实现任意组件通信…...

前端实现生成图片并批量下载,下载成果物是zip包
简介 项目上有个需求,需要根据表单填写一些信息,来生成定制的二维码图片,并且支持批量下载二维码图片。 之前的实现方式是直接后端生成二维码图片,点击下载时后端直接返回一个zip包即可。但是项目经理说后端实现方式每次改个东西…...
android 快速实现 圆角矩形控件 及 圆形控件
1.自定义RoundImageView package com.examle.widget;import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import an…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...