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

RabbitMQ:hello结构

 

1.在Linux环境上面装入rabbitMQ

doker-compose.yml

version: "3.1"
services:rabbitmq:image: daocloud.io/library/rabbitmq:managementrestart: alwayscontainer_name: rabbitmqports:- 6786:5672- 16786:15672volumes:- ./data:/var/lib/rabbitmq

doker-compose up -d 运行

2.进入rabbitMQ提供的客户端路径

自己的路径,和客户端端口号

RabbitMQ Management

http://8.140.244.227:   16786

3.在客户端注册虚拟主机

4.创建角色

5.给角色绑定虚拟主机 

 

6.导入RabbitMQ依赖 

        <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.6.0</version></dependency>

7.写个工具类,获取连接

package com.qf.springbootRbMQ.utils;import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class MQUtils {public static Connection getConnection() throws Exception {//创建连接工厂对象ConnectionFactory connectionFactory = new ConnectionFactory();//设置MQ服务器的相关信息connectionFactory.setHost("8.140.244.227");connectionFactory.setPort(6786);//注意:不要写成管理工具的端口号connectionFactory.setUsername("root");connectionFactory.setPassword("1234");connectionFactory.setVirtualHost("/email");//设置虚拟主机Connection connection = connectionFactory.newConnection();return connection;}}

8.写提供者类Send

package com.qf.springbootRbMQ.email;import com.qf.springbootRbMQ.entity.EmailMessage;
import com.qf.springbootRbMQ.utils.MQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import org.springframework.util.SerializationUtils;public class Send {//队列的名字public static final String QUEUE_NAME="QQEmail";public static void main(String[] args) throws Exception {//1.获取连接对象Connection conn = MQUtils.getConnection();//2. 创建一个channel对象,对于MQ的大部分操作,都定义在了channel对象上Channel channel = conn.createChannel();//3.声明了一个队列/*** queue – the name of the queue* durable – true代表创建的队列是持久化的(当mq重启后,该对立依然存在)* exclusive – 该队列是不是排他的 (该对列是否只能由当前创建该队列的连接使用)* autoDelete – 该队列是否可以被mq服务器自动删除* arguments – 队列的其他参数,可以为null*/channel.queueDeclare(QUEUE_NAME, false, false, false, null);EmailMessage emailMessage = new EmailMessage();emailMessage.setQq("1393087444@QQ.com");emailMessage.setSubject("你好啊,又见面了,发送邮箱给你啊!!!");emailMessage.setText("<p style='color:green'>谢谢你看我的邮件啦啦啦~~~</p>");byte[] bytes = SerializationUtils.serialize(emailMessage);//生产者如何发送消息,使用下面的方法即可/*** exchange – 交换机的名字 ,如果是空串,说明是把消息发给了默认交换机* routingKey – 路由的key,当发送消息给默认交换机时,routingkey代表队列的名字* other properties - 消息的其他属性,可以为null* body – 消息的内容,注意,要是有 字节数组*/channel.basicPublish("", QUEUE_NAME, null, bytes);System.out.println(" [x] Sent '" + emailMessage + "'");//关闭资源channel.close();conn.close();}
}

9.写消费者类Recv

package com.qf.springbootRbMQ.email;import cn.hutool.core.collection.CollUtil;
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import com.qf.springbootRbMQ.entity.EmailMessage;
import com.qf.springbootRbMQ.utils.MQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;
import org.springframework.util.SerializationUtils;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.IOException;public class Recv {private  final  static  String QUEUE_NAME="QQEmail";public static void custormer() throws Exception {//1.获取连接对象Connection conn = MQUtils.getConnection();//2. 创建一个channel对象,对于MQ的大部分操作,都定义在了channel对象上Channel channel = conn.createChannel();channel.queueDeclare(QUEUE_NAME, false, false, false, null);//3.该消费者收到消息之后的处理逻辑,写在DeliverCallback对象中DeliverCallback deliverCallback =new DeliverCallback() {@Overridepublic void handle(String consumerTag, Delivery message) throws IOException {//这个相当于标识,消费者的IDSystem.out.println(consumerTag);//从Delivery对象中可以获取到生产者,发送的消息的字节数组byte[] body = message.getBody();EmailMessage emailMessage = (EmailMessage) SerializationUtils.deserialize(body);System.out.println(emailMessage);//在这里写消费者的业务逻辑,例如,发送邮件MailAccount account = new MailAccount();account.setHost("smtp.qq.com"); // 设置SMTP服务器地址account.setPort(25); // 设置SMTP服务器端口account.setAuth(true); // 设置是否需要身份认证account.setFrom("1393087444@qq.com"); // 设置发件人邮箱地址account.setUser("1393087444@qq.com"); // 设置用户名account.setPass("gqrjqpilpadcjbdi"); // 设置密码// 发送邮件MailUtil.send(account, CollUtil.newArrayList("1393087444@qq.com"),emailMessage.getSubject(),emailMessage.getText(),false);}};//4.让当前消费者开始消费(QUEUE_NAME)队列中的消息/*** queue – the name of the queue* autoAck – true 代表当前消费者是不是自动确认模式。true代表自动确认。* deliverCallback – 当有消息发送给该消费者时,消费者如何处理消息的逻辑* cancelCallback – 当消费者被取消掉时,如果要执行代码,写到这里*/channel.basicConsume(QUEUE_NAME,true,deliverCallback,consumerTag -> {});}public static void main(String[] args) throws Exception {custormer();}
}

10.发送提供者,建立连接消息队列,将信息放入消息队列中

11.运行消费者接收消息,并处理消息 

 

相关文章:

RabbitMQ:hello结构

1.在Linux环境上面装入rabbitMQ doker-compose.yml version: "3.1" services:rabbitmq:image: daocloud.io/library/rabbitmq:managementrestart: alwayscontainer_name: rabbitmqports:- 6786:5672- 16786:15672volumes:- ./data:/var/lib/rabbitmq doker-compos…...

SpringBoot整合Redis 并 展示使用方法

步骤 引入依赖配置数据库参数编写配置类构造RedisTemplate创建测试类测试 1.引入依赖 不写版本号&#xff0c;也是可以的 在pom中引入 <!--redis配置--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…...

js中如何实现字符串去重?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Set 数据结构⭐ 使用循环遍历⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感…...

Axure RP仿QQ音乐app高保真原型图交互模板源文件

Axure RP仿QQ音乐app高保真原型图交互模板源文件。本套素材模板的机型选择华为的mate30&#xff0c;在尺寸和风格方面&#xff0c;采用标准化制作方案&#xff0c;这样做出来的原型图模板显示效果非常优秀。 原型中使用大量的动态面板、中继器、母版&#xff0c;涵盖Axure中技…...

2023牛客暑假多校第四场(补题向题解:J)

终于有时间来慢慢补补题了 J Qu’est-ce Que C’est? 作为队内的dp手&#xff0c;赛时想了好久&#xff0c;等学弟学妹都出了还是不会&#xff0c;羞愧&#xff0c;还好最终队友做出来了。 链接J Qu’est-ce Que C’est? 题意 长度为 n n n 的数组 a a a&#xff0c;每…...

第 362 场 LeetCode 周赛题解

A 与车相交的点 数据范围小直接暴力枚举 class Solution { public:int numberOfPoints(vector <vector<int>> &nums) {unordered_set<int> vis;for (auto &p: nums)for (int i p[0]; i < p[1]; i)vis.insert(i);return vis.size();} };B 判断能否…...

C++ if 语句

一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 语法 C 中 if 语句的语法&#xff1a; if(boolean_expression) {// 如果布尔表达式为真将执行的语句 }如果布尔表达式为 true&#xff0c;则 if 语句内的代码块将被执行。如果布尔表达式为 false&#xff0c;则 if 语…...

业务安全及实战案例

业务安全 关于漏洞&#xff1a; 注入业务逻辑信息泄露 A04:2021 – Insecure Design 在线靶场PortSwigger 1. 概述 1.1 业务安全现状 1.1.1 业务逻辑漏洞 ​ 近年来&#xff0c;随着信息化技术的迅速发展和全球一体化进程的不断加快&#xff0c;计算机和网络已经成为与…...

十一)Stable Diffussion使用教程:人物三视图

现在我们通过一个个具体的案例,去进阶SD的使用。 本篇案例:绘制Q版人物三视图 1)我们先选择一个偏3D的模型,选择文生图,输入魔法; 2)然后选择触发三视图的Lora:<lora:charturnerbetaLora_charturnbetalora:0.6>,注意这里的名称都是本地重新命名的,非原来C站下…...

超级等级福利礼包

文章目录 一、 介绍二、 设计等级礼包的目的1. 提升游戏玩家活跃度2. 提升游戏用户吸引力3. 提高游戏用户留存率4. 实现间接收入5. 持续营收 三、 玩家心理总结四、总结该模式的赢利点五、 该模式的应用场景举例 一、 介绍 超级等级福利礼包&#xff0c;玩家每升级5级即可获得…...

如何用Jmeter提取和引用Token

1.执行获取token接口 在结果树这里&#xff0c;使用$符号提取token值。 $根节点&#xff0c;$.data.token表示提取根节点下的data节点下的token节点的值。 2.使用json提取器&#xff0c;提取token 变量路径就是把在结果树提取的路径写上。 3.使用BeanShell取样器或者BeanShell后…...

C#文件拷贝工具

目录 工具介绍 工具背景 4个文件介绍 CopyTheSpecifiedSuffixFiles.exe.config DataSave.txt 拷贝的存储方式 文件夹介绍 源文件夹 目标文件夹 结果 使用 *.mp4 使用 *.* 重名时坚持拷贝 可能的报错 C#代码如下 Form1.cs Form1.cs设计 APP.config Program.c…...

Redis——Java中的客户端和API

Java客户端 在大多数的业务实现中&#xff0c;我们还是使用编码去操作Redis&#xff0c;对于命令的学习只是知道这些数据库可以做什么操作&#xff0c;以及在后面学习到了Java的API之后知道什么方法对应什么命令即可。 官方推荐的Java的客户端网页链接如下&#xff1a; 爪哇…...

Brief. Bioinformatics2021 | sAMP-PFPDeep+:利用三种不同的序列编码和深度神经网络预测短抗菌肽

文章标题&#xff1a;sAMP-PFPDeep: Improving accuracy of short antimicrobial peptides prediction using three different sequence encodings and deep neural networks 代码&#xff1a;https://github.com/WaqarHusain/sAMP-PFPDeep 一、问题 短抗菌肽(sAMPs)&#x…...

问道管理:华为产业链股再度拉升,捷荣技术6连板,华力创通3日大涨近70%

华为产业链股6日盘中再度拉升&#xff0c;到发稿&#xff0c;捷荣技能涨停斩获6连板&#xff0c;华映科技亦涨停收成3连板&#xff0c;华力创通大涨超19%&#xff0c;蓝箭电子涨约11%&#xff0c;力源信息涨超4%。 捷荣技能盘中再度涨停&#xff0c;近7日已累计大涨超90%。公司…...

面试设计模式-责任链模式

一 责任链模式 1.1 概述 在进行请假申请&#xff0c;财务报销申请&#xff0c;需要走部门领导审批&#xff0c;技术总监审批&#xff0c;大领导审批等判断环节。存在请求方和接收方耦合性太强&#xff0c;代码会比较臃肿&#xff0c;不利于扩展和维护。 1.2 责任链模式 针对…...

Qt 开发 CMake工程

Qt 入门实战教程&#xff08;目录&#xff09; 为何要写这篇文章 目前CMake作为C/C工程的构建方式在开源社区已经成为主流。 企业中也是能用CMake的尽量在用。 Windows 环境下的VC工程都是能不用就不用。 但是&#xff0c;这个过程是非常缓慢的&#xff0c;所以&#xff0…...

2.k8s账号密码登录设置

文章目录 前言一、启动脚本二、配置账号密码登录2.1.在hadoop1&#xff0c;也就是集群主节点2.2.在master的apiserver启动文件添加一行配置2.3 绑定admin2.4 修改recommended.yaml2.5 重启dashboard2.6 登录dashboard 总结 前言 前面已经搭建好了k8s集群&#xff0c;现在设置下…...

【代表团坐车】Python 实现-附ChatGPT解析

1.题目 某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车,可以同时接待多个代表团,为了提高车辆利用率,请帮接待员计算可以坐满车的接待方案,输出方案数量。 约束: 1.一个团只能上一辆车,并且代表团人数(代表团数量小于30,每人代表团人数小于30)小于汽车容量…...

【Java】x-easypdf: 一种简单易用的PDF处理库

引言 在处理和生成PDF文档时&#xff0c;有许多库可供选择。其中&#xff0c;x-easypdf是一种简单易用的PDF处理库&#xff0c;可以帮助开发人员轻松地创建、编辑和操作PDF文档。本文将介绍x-easypdf的基本概念、安装方法、主要功能以及使用示例。 安装x-easypdf 要使用x-ea…...

在Nodejs服务中集成多模型API实现智能客服场景

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Nodejs服务中集成多模型API实现智能客服场景 智能客服是当前许多在线服务提升用户体验的关键组件。对于Node.js后端开发者而言&a…...

STM32F103C8T6新手必看:SWD、JTAG、串口三种下载方式到底怎么选?

STM32F103C8T6开发入门&#xff1a;SWD、JTAG与串口下载方式深度解析 第一次接触STM32开发板时&#xff0c;面对板子上密密麻麻的接口和文档中提到的各种下载方式&#xff0c;很多新手都会感到迷茫。我清楚地记得自己刚开始学习时&#xff0c;拿着ST-Link调试器却不知道应该连接…...

HART协议实战:从帧结构解析到MCU数据处理的完整代码指南

1. HART协议基础与帧结构解析 第一次接触HART协议时&#xff0c;我被它独特的"模拟信号数字信号"叠加方式惊艳到了。想象一下&#xff0c;在工业现场常见的4-20mA模拟信号线上&#xff0c;还能叠加数字通信信号&#xff0c;就像在一条老式电话线上同时传输语音和宽带…...

研扬EPIC-RPS9工控主板解析:4英寸板载13代酷睿,赋能边缘AI与机器视觉

1. 项目概述&#xff1a;当“小钢炮”遇上工业严苛环境在工业自动化、边缘计算和嵌入式视觉这些领域里&#xff0c;我们常常面临一个经典矛盾&#xff1a;既要强大的算力来处理海量数据、运行复杂算法&#xff0c;又要设备足够紧凑、坚固&#xff0c;能塞进各种空间受限、环境恶…...

从零到一:构建与解析XTS测试环境的实战指南

1. 环境准备&#xff1a;搭建XTS测试环境的基础条件 第一次接触XTS测试环境搭建时&#xff0c;我完全被各种术语搞晕了。后来才发现&#xff0c;只要把基础环境准备好&#xff0c;后面的工作就会顺利很多。就像盖房子要先打地基一样&#xff0c;搭建XTS测试环境也需要先准备好几…...

Web无障碍性自动化检查:CLI工具集成与工程实践指南

1. 项目概述&#xff1a;一个为开发者赋能的Web无障碍性CLI工具 如果你是一名前端开发者、测试工程师&#xff0c;或者正在构建一个需要服务广泛用户群体的Web应用&#xff0c;那么“无障碍性”&#xff08;Accessibility&#xff0c; 常缩写为 a11y&#xff09;这个词对你来说…...

打破偏见!Java做AI不是不行,是2026年最被低估的红利

长久以来&#xff0c;行业里一直有个固有认知&#xff1a;AI是Python的主场&#xff0c;Java做AI笨重、生态弱、落地难。很多Java企业团队看着AI浪潮席卷各行各业&#xff0c;要么束手观望&#xff0c;要么被迫切换Python技术栈重构系统&#xff0c;不仅成本高昂&#xff0c;还…...

Cadence 17.4重装系统后,PCB快捷键失灵?别急着重装,先检查这个‘文件类型’

Cadence 17.4重装系统后PCB快捷键失效的深度排查指南 当你在Windows系统重装后&#xff0c;发现Cadence 17.4的PCB编辑器快捷键全部失灵&#xff0c;那种感觉就像突然失去了双手——每个操作都变得异常笨拙和低效。本文将从底层文件系统原理出发&#xff0c;带你深入排查这个看…...

抓到涨停后的“财富密码”:次日去留的5条离场铁律

引言&#xff1a;涨停之后的焦虑与狂欢在股市里&#xff0c;最让散户热血沸腾也最揪心的时刻&#xff0c;莫过于抓到一个涨停板。那种追涨进去、刚吃两三个点就封死涨停的兴奋感&#xff0c;往往转瞬就会被对次日的恐惧所取代。很多投资者在涨停次日常常陷入纠结&#xff1a;走…...

书成紫微动,律定凤凰驯:从无心创作到天命显化的海棠山铁哥之路

书成紫微动&#xff0c;律定凤凰驯。 ——南北朝庾信一、千古谶语&#xff0c;千年未解诗句天道逻辑千年误读书成紫微动先著书立道&#xff0c;撼动文脉附会玄学&#xff0c;强行造神律定凤凰驯再定规立序&#xff0c;祥瑞归宁脑会剧情&#xff0c;虚妄狂欢 无人真正落地&#…...