(需求实战_进阶_02)SSM集成RabbitMQ 关键代码讲解、开发、测试

接上一篇:(企业内部需求实战_进阶_01)SSM集成RabbitMQ 关键代码讲解、开发、测试
https://gblfy.blog.csdn.net/article/details/104197309

在这里插入图片描述

文章目录

  • 一、RabbitMQ配置文件
    • 1. RabbitMQ生产者配置文件
    • 2. RabbitMQ消费者配置文件
    • 3. 连接配置文件
  • 二、生产者Java代码Conding
    • 2.1. 生产者代码①
    • 2.2. 生产者代码②
  • 三、消费者Java代码Conding
    • 3.1. 生产者代码①
    • 3.2. 生产者代码②
  • 四、项目准备
    • 4.1. 启动项目
    • 4.2. 清空控制台
  • 五、管控台 队列绑定交换机
    • 5.1. 启动 RabbitMQ
    • 5.2. 管控台总览
    • 5.3. 队列①绑定
    • 5.4. 队列②绑定
  • 六、管控台绑定后纵览
    • 6.1. 在交换机菜单查看 绑定后的队列
    • 6.2. 在队列①菜单中 查看 绑定后的交换机
    • 6.3. 在队列②菜单中 查看 绑定后的交换机
  • 七、生产者请求测试
    • 7.1. 生产者①请求
    • 7.2. 生产者②请求
    • 7.3. 消费者①请求
    • 7.4. 消费者②请求

一、RabbitMQ配置文件

1. RabbitMQ生产者配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!--生产者者配置如下:--><!-- 定义RabbitMQ的连接工厂 --><rabbit:connection-factory id="connectionFactory"host="${rabbitmq.host}" port="${rabbitmq.port}" username="${rabbitmq.username}"password="${rabbitmq.password}" virtual-host="${rabbitmq.vhost}"/><!-- 管理消息队列 --><rabbit:admin connection-factory="connectionFactory"/><!-- 定义交换机 自动声明--><rabbit:direct-exchange name="ORDER-TRACE-EXCHANGE"auto-declare="true" durable="true"/><!-- 定义MQ消息模板 --><rabbit:template id="rabbitTemplate"connection-factory="connectionFactory" exchange="ORDER-TRACE-EXCHANGE"/>
</beans>

2. RabbitMQ消费者配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!--消费者配置如下:--><!-- 定义RabbitMQ的连接工厂 --><rabbit:connection-factory id="connectionFactory"host="${rabbitmq.host}" port="${rabbitmq.port}" username="${rabbitmq.username}"password="${rabbitmq.password}" virtual-host="${rabbitmq.vhost}"/><!-- 管理消息队列 --><rabbit:admin connection-factory="connectionFactory"/><!-- 定义一个队列或者多个队列 --><rabbit:queue name="FIS-TRACE-QUEUE" auto-declare="true" durable="true"/><rabbit:queue name="FIS-TRACE-MONITOR-QUEUE" auto-declare="true" durable="true"/><rabbit:queue name="ORDER-MENU-CATEGORY-QUEUE" auto-declare="true" durable="true"/><!-- 声明多个消费者对象 --><bean id="fisMQMsgHandler" class="com.gblfy.order.mqhandler.FisMQMsgHandler"/><bean id="fisMQMonitorMsgHandler" class="com.gblfy.order.mqhandler.FisMQMonitorMsgHandler"/><bean id="mQSimpleMsgHandler" class="com.gblfy.order.mqhandler.MQSimpleMsgHandler"/><!-- 监听队列 --><rabbit:listener-container connection-factory="connectionFactory"><rabbit:listener ref="fisMQMsgHandler" method="execute" queue-names="FIS-TRACE-QUEUE"/><rabbit:listener ref="fisMQMonitorMsgHandler" method="onMessage" queue-names="FIS-TRACE-MONITOR-QUEUE"/><rabbit:listener ref="mQSimpleMsgHandler" method="execute" queue-names="ORDER-MENU-CATEGORY-QUEUE"/></rabbit:listener-container>
</beans>

3. 连接配置文件

rabbitmq.host=127.0.0.1
rabbitmq.port=5672
rabbitmq.username=admin
rabbitmq.password=admin
rabbitmq.vhost=/admin

二、生产者Java代码Conding

此次案例:主要演示对MQ消息的两种不同方式。
有2个生产者和2个消费者,2个队列分别对应一个交换机,路由key和队列名称不一样,消费者处理MQ的消息的2种不同步处理方法而已!

2.1. 生产者代码①

package com.gblfy.order.controller;import com.gblfy.order.pojo.FisCallingTrace;
import com.gblfy.order.utils.MQSendMsgUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;@Controller
@Slf4j
public class FisSendMQControllor {public static final  DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");// 日期格式public static final  DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");// 日期格式@Autowiredprivate MQSendMsgUtils mqSendMsgUtils;/*** 发送轨迹数据 MQ异步存储轨迹** @return*/@RequestMapping(value = "/sendMQObjMsg", method = RequestMethod.GET)@ResponseBodypublic String sendObj() throws Exception {Date tStartDate = new Date();// 记录转发结束时间Date tEndDate = new Date();// 记录转发结束时间//模拟请求和响应报文String reqXml = "my name is reqXml";String resXml = "my name is resXml";String uuid = UUID.randomUUID().toString();//模拟 轨迹储存数据FisCallingTrace mFisCallingTrace = new FisCallingTrace().builder().servicename("myServiceNme is A").servicetype("2").interfacetype("2").resstatus("1").resremark("1").reqdate(dateFormat.parse(dateFormat.format(tStartDate))).reqtime(timeFormat.format(tStartDate)).resdate(dateFormat.parse(dateFormat.format(tEndDate))).restime(timeFormat.format(tEndDate)).reqxml("").resxml("").build();//定义路由routingKeyString routingKey = "trace";//调用MQ松松消息公共方法mqSendMsgUtils.sendMsg(mFisCallingTrace, routingKey, reqXml, resXml, uuid);return "send sendMQObjMsg success !!!";}
}

2.2. 生产者代码②

package com.gblfy.order.controller;import com.gblfy.order.pojo.FisCallingTrace;
import com.gblfy.order.utils.MQSendMsgUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;@Controller
@Slf4j
public class FisSendMQMsgControllor {public static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");// 日期格式public static final DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");// 日期格式@Autowiredprivate MQSendMsgUtils mqSendMsgUtils;/*** 发送轨迹数据 MQ异步存储轨迹** @return*/@RequestMapping(value = "/sendMQObjMsg2", method = RequestMethod.GET)@ResponseBodypublic String sendObj() throws Exception {Date tStartDate = new Date();// 记录转发结束时间Date tEndDate = new Date();// 记录转发结束时间//模拟请求和响应报文String reqXml = "my name is reqXml";String resXml = "my name is resXml";String uuid = UUID.randomUUID().toString();//模拟 轨迹储存数据FisCallingTrace mFisCallingTrace = new FisCallingTrace().builder().servicename("myServiceNme is A").servicetype("2").interfacetype("2").resstatus("1").resremark("1").reqdate(dateFormat.parse(dateFormat.format(tStartDate))).reqtime(timeFormat.format(tStartDate)).resdate(dateFormat.parse(dateFormat.format(tEndDate))).restime(timeFormat.format(tEndDate)).reqxml("").resxml("").build();//定义路由routingKeyString routingKey = "trace2";//调用MQ松松消息公共方法mqSendMsgUtils.sendMsg(mFisCallingTrace, routingKey, reqXml, resXml, uuid);return "send sendMQObjMsg success !!!";}
}

三、消费者Java代码Conding

3.1. 生产者代码①

package com.gblfy.order.mqhandler;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gblfy.order.pojo.FisCallingTrace;
import com.gblfy.order.pojo.RequestInfo;
import lombok.extern.slf4j.Slf4j;@Slf4j
public class FisMQMsgHandler {/*** 接收MQ消息,保存轨迹** @param msg*/public void execute(String msg) {try {//通过 判断路由routingKey是否等于trace相同即可//fastjson解析MQ接收的json字符串 转换成RequestInfo对象JSONObject jsonObject = JSON.parseObject(msg);RequestInfo requestInfo = JSON.toJavaObject(jsonObject, RequestInfo.class);log.info("请求报文 mReqXml:" + requestInfo.getMReqXml());log.info("响应报文 mResXml:" + requestInfo.getMResXml());log.info("接口名称 serviceName:" + requestInfo.getServiceName());log.info("路由routingKey:" + requestInfo.getType());log.info("生成的 mUUID:" + requestInfo.getMUUID());/*** 1.从requestInfo对象中,获取fisCallingTrace轨迹对象* 2.请求报文和响应报文需要添加进去 fisCallingTrace对象中的请求报文和响应报文默认是空字符串* 3.将fisCallingTrace 轨技数据保存数据库*/FisCallingTrace fisCallingTrace = requestInfo.getFisCallingTrace();fisCallingTrace.setTraceId(requestInfo.getMUUID());fisCallingTrace.setReqxml(requestInfo.getMReqXml());fisCallingTrace.setResxml(requestInfo.getMResXml());log.info("从MQ接收消息并封装完成!!!");log.info("开始进行插入数据库操作!!!");//把MQ接收消息的数据进行 保存轨迹数据库操作 todo//注入mqpper 插入数据库 todo} catch (Exception e) {log.info("如果对象中没有,指定的元素,一般会导致空指针异常!!!");e.printStackTrace();}}
}

3.2. 生产者代码②

package com.gblfy.order.mqhandler;import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;@Slf4j
public class MQSimpleMsgHandler {private static final ObjectMapper MAPPER = new ObjectMapper();/*** 接收MQ消息** @param msg*/public void execute(String msg) {try {JsonNode jsonNode = MAPPER.readTree(msg);String serviceName = jsonNode.get("serviceName").asText();String routingKey = jsonNode.get("routingKey").asText();String currentDate = jsonNode.get("currentDate").asText();log.info("接口名称:" + serviceName);log.info("路由routingKey:" + routingKey);log.info("当前时间:" + currentDate);} catch (Exception e) {e.printStackTrace();}}
}

四、项目准备

4.1. 启动项目

在这里插入图片描述

4.2. 清空控制台

在这里插入图片描述

五、管控台 队列绑定交换机

5.1. 启动 RabbitMQ

双击运行
在这里插入图片描述
在这里插入图片描述

5.2. 管控台总览

在这里插入图片描述
在这里插入图片描述

5.3. 队列①绑定

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.4. 队列②绑定

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

六、管控台绑定后纵览

6.1. 在交换机菜单查看 绑定后的队列

在这里插入图片描述

在这里插入图片描述

6.2. 在队列①菜单中 查看 绑定后的交换机

在这里插入图片描述
在这里插入图片描述

6.3. 在队列②菜单中 查看 绑定后的交换机

在这里插入图片描述
在这里插入图片描述

七、生产者请求测试

7.1. 生产者①请求

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2. 生产者②请求

其他和生产①一样的,知识路由key值不一样
在这里插入图片描述
在这里插入图片描述

7.3. 消费者①请求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.4. 消费者②请求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

我的特长是计算机VF编程,2016计算机二级考试VF模拟题及答案

2016计算机二级考试VF模拟题及答案四、读程序写出运行结果 (每小题5分&#xff0c;共20分)1. 数据表(STUDENT.DBF)内容如下&#xff1a;Record# 学号 姓名 性别 班级 总分1 1458 张萧 女 1班 5202 1479 王琴 女 2班 4953 1480 陆海军 男 3班 5004 1500 李文君 女 1班 4685 1503…

vue 判断同一数组内的值是否一直_vue一些笔记

vuex action&#xff1a;尤雨溪在知乎回答了&#xff0c;区分 actions 和 mutations 并不是为了解决竞态问题&#xff0c;vuex 真正限制你的只有 mutation 必须是同步的这一点&#xff0c;只是为了devtools追踪状态变化&#xff0c;或者说出于单一职责原则。https://www.zhihu.…

python正则表达式提取字符串的字母_Python正则表达式提取一部分字符串

1要提取大量烧成的一部分。有一个目标词和之前和之后单词的数量上限。因此所提取的子必须包含单词之前和之后它的上界目标字一起。在之前和之后的部分可以包含少言&#xff0c;如果目标字更接近文本的开头或结尾。进行了串"Lorem存有胡萝卜&#xff0c;增强大学生开发者&a…

机器学习从业人员到底做什么?

这篇文章是系列文章的第1部分,第2部分将阐述AutoML和神经架构搜索、第3部分将特别地介绍Google的AutoML。 关于机器学习人才的稀缺和公司声称他们的产品能够自动化机器学习而且能完全消除对ML专业知识需求的承诺经常登上媒体的新闻头条。在TensorFlow DevSummit的主题演讲中&a…

黑科技揭秘:面对海量的文本翻译任务,阿里翻译团队是如何解决的

摘要&#xff1a; 对国际化企业来说语言问题是亟待突破的重要关口。面对海量的文本翻译任务&#xff0c;昂贵低效的人工翻译显然不能满足需求&#xff0c;利用计算机自动进行文本翻译的机器翻译才是解决这个问题的关键。阿里翻译团队在机器翻译领域做了大量技术储备&#xff0c…

(需求实战_进阶_03)SSM集成RabbitMQ 路由模式关键代码讲解、开发、测试

接上一篇&#xff1a;&#xff08;企业内部需求实战_进阶_02&#xff09;SSM集成RabbitMQ 关键代码讲解、开发、测试 https://gblfy.blog.csdn.net/article/details/104214033 上一篇给大家介绍了在RabbitMQ 的管控台中&#xff0c;将队列绑定到指定的交换机上&#xff1b;这片…

在计算机中dos代表什么意思,Boot是什么意思

Boot是什么意思如果你去问一个学计算机的人&#xff0c;“启动”是计算机中的那个单词?回答一定是Boot。可是&#xff0c;Boot原来的意思是靴子&#xff0c;“启动”与靴子有什么关系呢?原来&#xff0c;这里的Boot是bootstrap(鞋带)的缩写&#xff0c;它来自一句谚语&#x…

你知道哪些情况下不该使用深度学习吗?

深度学习不适用于什么样的任务&#xff1f;依我之见&#xff0c;以下这些主要场景的深度学习弊大于利。01低成本或者低承诺问题深网是非常灵活的模型&#xff0c;有着许多架构和节点类型&#xff0c;优化器和正则化策略。根据应用&#xff0c;你的模型可能会有卷基层&#xff0…

秒后面的单位是什么_单位与国际单位制是如何由来的?

2013年国庆期的一则网络消息说&#xff0c;11万人看升旗留下了5吨垃圾。有人认为这是一则假消息&#xff0c;因为5吨&#xff1d;5000千克&#xff0c;110000500022千克/人&#xff0c;而每人携带22千克&#xff08;44斤&#xff09;的垃圾是不可能的。以前还看过一个说法&…

Terraform 开发指南

摘要&#xff1a; 本文主要向大家展示如何为阿里云 Terraform Provider 贡献自己的力量&#xff0c;帮助开发者和志同道合的朋友尽快加入到开源生态的建设中来。 本文面向所有的对Terraform熟悉和感兴趣的朋友&#xff0c;如果您还不了解Terraform&#xff0c;快快戳这里。 本…

大学生创新创业大赛案例_七大学生创新创业大赛样本示例

1 / 15附件七&#xff1a;大学生创新创业大赛样本示例本案例为第四届“挑战杯”创业计划大赛金奖作品&#xff0c;为避免篇幅过长&#xff0c;编者对部分内容作了删减&#xff0c;仅作参考。目录、执行总结、项目背景、市场机会、公司战略、市场营销、生产管理、投资分析、财务…

(需求实战_进阶_04)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试

背景&#xff1a; 为了减轻服务器的压力&#xff0c;现在原有项目的基础上集成消息队列来异步处理消息! 此项目是企业真实需求&#xff0c;项目的代码属于线上生产代码&#xff0c;直接用于生产即可&#xff01; 此项目采用MQ发送消息模式为:通配符模式&#xff0c;如果对Rabbi…

halo多人正在连接服务器,在线人数过低 《光晕2》PC版多人服务器下月关闭

这也许是一个让粉丝略伤感的消息&#xff0c;《光晕2(Halo2)》PC多人游戏服务器将在下个月永久关闭。343 Industries注意到服务器的峰值在线人数一直仅有20人&#xff0c;因此做出了关闭服务器的决定。343 Industries在Halo Waypoint中说道&#xff1a;“我们很遗憾地宣布&…

纯Python实现鸢尾属植物数据集神经网络模型

摘要&#xff1a; 本文以Python代码完成整个鸾尾花图像分类任务&#xff0c;没有调用任何的数据包&#xff0c;适合新手阅读理解&#xff0c;并动手实践体验下机器学习方法的大致流程。 尝试使用过各大公司推出的植物识别APP吗&#xff1f;比如微软识花、花伴侣等这些APP。当你…

【明人不说暗话】我就只讲进程与线程

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 阮一峰责编 | 阿秃进程&#xff08;process&#xff09;和线程&#xff08;thread&#xff09;是操作系统的基本概念&#xff0c;但是它们比较抽象&#xff0c;不容易掌握。最近&#xff0c;我读到一篇材料&#xff0c;发现有…

python获取路径下所有文件_Python获取路径下所有文件名

交易系统使用storm&comma;在消息高可靠情况下&#xff0c;如何避免消息重复 概要:在使用storm分布式计算框架进行数据处理时,如何保证进入storm的消息的一定会被处理,且不会被重复处理.这个时候仅仅开启storm的ack机制并不能解决上述问题.那么该如何设计出一个好的方案 ...…

java职业发展路线图_软开(Java),该如何规划职业路线?

一、增强自身的设计与开发能力Java的应用领域是非常广阔的&#xff0c;从手机应用到互联网、数据库和服务器&#xff0c;从PC端到嵌入式设备和移动终端&#xff0c;Java的身影无处不在&#xff0c;而Java工程师就是这些软件产品的创造者&#xff0c;不仅要懂得产品的设计&#…

阿里云发布智能语音自学习平台,零基础训练人工智能模型

摘要&#xff1a; 业务人员甚至门卫大爷也能训练人工智能&#xff1f;曾经只出现科幻电影中的一幕真的发生了。7月18日&#xff0c;阿里巴巴机器智能技术实验室宣布在阿里云正式发布智能语音自学习平台公有云产品&#xff0c;突破性地提供一键式语音智能自助优化方案&#xff0…

(需求实战_进阶_05)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试

接上一篇&#xff1a; 文章目录一、RabbitMQ 配置文件1. RabbitMQ 生产者配置文件更新二、启动项目2.1. 启动项目2.2. 清空控制台三、管控台总览3.1. 登录管控台3.2. 交换机中查看绑定队列总览四、验证测试4.4. 生产者①请求4.5. 生产者②请求五、启动RabbitMQ5.1. 进入sbin目录…

两台邮件服务器共用一个公网地址,两个不同域邮件服务器的互通

两个不同域的邮件服务的互通如图&#xff0c;有两个不同域的邮件服务器(postfix)通过一个DNS服务器实现互通。首先说明一下IP分配情况服务器1qq.cometh0(VMnet2)&#xff1a; ip:192.168.2.2 netmask:255.255.255.0 gw 192.168.2.1 hostname:mail.qq.com服务器2(qq.neteht0VMne…