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

基于SpringBoot+RabbitMQ完成应⽤通信

前言:

经过上面俩章学习,我们已经知道Rabbit的使用方式
RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客

RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)-CSDN博客
作为⼀个消息队列,RabbitMQ也可以⽤作应⽤程序之间的通信.上述代码⽣产者和消费者代码放在不同的应⽤中即可完成不同应⽤程序的通信.

目录

前言:

一.创建项目 

二.订单系统(⽣产者) 

三.物流系统(消费者)

四.发送消息格式为对象 



接下来我们来看,基于SpringBoot+RabbitMQ完成应⽤间的通信.
需求描述:
⽤⼾下单成功之后,通知物流系统,进⾏发货.(只讲应⽤通信,不做具体功能实现)

 

一.创建项目 

为⽅便演示,把两个项⽬放在⼀个项⽬中

1)1. 创建⼀个空的项⽬rabbitmq-communication(其实就是⼀个空的⽂件夹)

2) 在这个项⽬⾥,创建Module

3)后续流程和创建SpringBoot项⽬⼀样 

 4)若发现识别不到java类文件

只需右击改项目文件,点进对应选项,修改成Maven即可


二.订单系统(⽣产者) 

1)配置相应文件 

2) 声明队列

package com.bite.order.config;import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitmqConfig {@Bean("orderQueue")public Queue orderQueue() {return QueueBuilder.durable("order.create").build();}
}

3) 编写下单接⼝,下单成功之后,发送订单消息

package com.bite.order.controller;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;@RequestMapping("/order")
@RestController
public class OrderController {@Autowiredprivate RabbitTemplate rabbitTemplate;@RequestMapping("/create")public String create() {//省略相关操作 例如校验参数 相关数据库操作 //主要测试代码是否最后成功发送即可String orderId = UUID.randomUUID().toString();rabbitTemplate.convertAndSend("","order.create","下单成功, 订单 ID:"+orderId);return "下单成功!";}
}

4) 启动订单系统(生产者,观察结果)

 


三.物流系统(消费者)

 1)配置相应文件 

8080端⼝已经被订单系统占⽤了,修改物流系统的端⼝号为9090

 2)监听队列

package com.bite.logistics.listener;import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class OrderListener {@RabbitListener(queues = "order.create")public void handleMessage(String message) {System.out.println("接收订单信息:"+message);}
}

结果: 

接收到消息:下单成功, 订单ID:a4c1dbdc-688d-430a-ac16-bca713f85940
接收到消息:下单成功, 订单ID:5d190f19-7a8c-4866-b6e7-2b2bbe79412d

四.发送消息格式为对象 

定义一个对象

import lombok.Data;
@Data
public class OrderInfo {private String orderId;private String name;
}

生产者:

    @RequestMapping("/create2")public String create2() {//省略相关操作 例如校验参数 相关数据库操作//主要测试代码是否最后成功发送即可OrderInfo orderInfo = new OrderInfo();orderInfo.setOrderId(UUID.randomUUID().toString());orderInfo.setName("商品:"+new Random().nextInt(100));rabbitTemplate.convertAndSend("","order.create",orderInfo);return "下单成功!";}

 

 

此时为乱码,因此需要序列化

SpringAMQP提供了 Jackson2JsonMessageConverter 和
MappingJackson2MessageConverter 等转换器,我们需要把⼀个 MessageConverter 设置到 RabbitTemplate 中.

在config包里面添加 

    @Beanpublic RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate template = new RabbitTemplate(connectionFactory);template.setMessageConverter(jackson2JsonMessageConverter()); // 设置消息转换器return template;}private Jackson2JsonMessageConverter jackson2JsonMessageConverter() {return new Jackson2JsonMessageConverter();}

消费者: 

    @RabbitListener(queues = "order.create")public void handleMessage2(OrderInfo orderInfo) {System.out.println("接收订单信息OrderInfo :"+orderInfo);}

 


结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!  

相关文章:

基于SpringBoot+RabbitMQ完成应⽤通信

前言: 经过上面俩章学习,我们已经知道Rabbit的使用方式RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客 RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)-CSDN博客作为⼀个消息队列,RabbitMQ也可以⽤作应⽤程…...

Flutter踩坑记录(一)debug运行生成的项目,不能手动点击运行

问题 IOS14设备,切后台划掉,二次启动崩溃。 原因 IOS14以上 flutter 不支持debugger模式下的二次启动 。 要二次启动需要以release方式编译工程安装至手机。 操作步骤 清理项目:在命令行中运行flutter clean来清理之前的构建文件。重新构…...

React的hook✅

为什么hook必须在组件内的顶层声明? 这是为了确保每次组件渲染时,Hooks 的调用顺序保持一致。React利用 hook 的调用顺序来跟踪各个 hook 的状态。每当一个函数组件被渲染时,所有的 hook 调用都是按照从上到下的顺序依次执行的。React 内部会…...

2024.5 AAAiGLaM:通过邻域分区和生成子图编码对领域知识图谱对齐的大型语言模型进行微调

GLaM: Fine-Tuning Large Language Models for Domain Knowledge Graph Alignment via Neighborhood Partitioning and Generative Subgraph Encoding 问题 如何将特定领域知识图谱直接整合进大语言模型(LLM)的表示中,以提高其在图数据上自…...

从熟练Python到入门学习C++(record 6)

基础之基础之最后一节-结构体 1.结构体的定义 结构体相对于自定义的一种新的变量类型。 四种定义方式&#xff0c;推荐第一种&#xff1b;第四种适合大量定义&#xff0c;也适合查找&#xff1b; #include <iostream> using namespace std; #include <string.h>…...

jenkins的安装(War包安装)

‌Jenkins是一个开源的持续集成工具&#xff0c;基于Java开发&#xff0c;主要用于监控持续的软件版本发布和测试项目。‌ 它提供了一个开放易用的平台&#xff0c;使软件项目能够实现持续集成。Jenkins的功能包括持续的软件版本发布和测试项目&#xff0c;以及监控外部调用执行…...

WPS 加载项开发说明wpsjs

wpsjs几个常用的CMD命令&#xff1a; 1.打开cmd输入命令测试版本号 npm -v 2.首次安装nodejs&#xff0c;npm默认国外镜像&#xff0c;包下载较慢时&#xff0c;可切换到国内镜像 //下载速度较慢时可切换国内镜像 npm config set registry https://registry.npmmirror.com …...

【Anomaly Detection论文阅读记录】PaDiM与PatchCore模型的区别与联系

PaDiM与PatchCore模型的区别与联系 背景介绍 PADIM(Pretrained Anomaly Detection via Image Matching)和 PatchCore 都是基于深度学习的异常检测方法,主要用于图像异常检测,尤其是在无监督学习设置下。 PADIM 是一种通过利用预训练的视觉模型(例如,ImageNet预训练的卷…...

uni-app Vue3语法实现微信小程序样式穿透uview-plus框架

1 问题描述 我在用 uni-app vue3 语法开发微信小程序时&#xff0c;在项目中使用了 uview-plus 这一开源 UI 框架。在使用 up-text 组件时&#xff0c;想要给它添加一些样式&#xff0c;之前了解到微信小程序存在样式隔离的问题&#xff0c;也在uview-plus官网-注意事项中找到…...

K8S基础概念和环境搭建

K8S的基础概念 1. 什么是K8S K8S的全称是Kubernetes K8S是一个开源的容器编排平台&#xff0c;用于自动化部署、扩缩、管理容器化应用程序。 2. 集群和节点 集群&#xff1a;K8S将多个机器统筹和管理起来&#xff0c;彼此保持通讯&#xff0c;这样的关系称之为集群。 节点…...

[服务器] 腾讯云服务器免费体验,成功部署网站

文章目录 概要整体架构流程概要 腾讯云服务器免费体验一个月。 整体架构流程 腾讯云服务器体验一个月, 选择预装 CentOS 7.5 首要最重要的是: 添加阿里云镜像。 不然国外源速度慢, 且容易失败。 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/li…...

vue中el-select 模糊查询下拉两种方式

第一种&#xff1a;先获取所有下拉数据再模糊查询&#xff0c;效果如下 1&#xff0c;页面代码&#xff1a;speciesList是种类列表List, speciesId 是speciesList里面对应的id&#xff0c;filterable是过滤查询标签 <el-form-item label"种类" prop"species…...

深入解析PostgreSQL中的PL/pgSQL语法

在数据库管理系统中&#xff0c;PostgreSQL因其强大的功能和稳定性而受到广泛欢迎。其中&#xff0c;PL/pgSQL作为PostgreSQL的过程化语言&#xff0c;为用户提供了更为灵活和强大的编程能力。本文将深入解析PL/pgSQL的语法&#xff0c;帮助读者更好地掌握这门语言&#xff0c;…...

Vue 3集成海康Web插件实现视频监控

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;组件封装篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来组件封装篇专栏内容:Vue 3集成海康Web插件实现视频监控 引言 最近在项目中使用了 Vue 3 结合海康Web插件来实…...

多目标优化算法:多目标蛇鹫优化算法(MOSBOA)求解DTLZ1-DTLZ9,提供完整MATLAB代码

一、蛇鹫优化算法 蛇鹫优化算法&#xff08;Secretary Bird Optimization Algorithm&#xff0c;简称SBOA&#xff09;由Youfa Fu等人于2024年4月发表在《Artificial Intelligence Review》期刊上的一种新型的元启发式算法。该算法旨在解决复杂工程优化问题&#xff0c;特别是…...

机器翻译基础与模型 之三:基于自注意力的模型

基于RNN和CNN的翻译模型&#xff0c;在处理文字序列时有个问题&#xff1a;它们对序列中不同位置之间的依赖关系的建模并不直接。以CNN的为例&#xff0c;如果要对长距离依赖进行描述&#xff0c;需要多层卷积操作&#xff0c;而且不同层之间信息传递也可能有损失&#xff0c;这…...

如何使用PCL处理ROS Bag文件中的点云数据并重新保存 ubuntu20.04

如何使用PCL处理ROS Bag文件中的点云数据并重新保存 要精确地处理ROS bag中的点云数据并使用PCL进行处理&#xff0c;再将处理后的数据保存回新的ROS bag文件&#xff0c;以下方案提供了详细、专业和严谨的步骤。 步骤 1: 环境设置 确保安装了ROS和PCL&#xff0c;并配置好环…...

背包问题(动态规划)

背包问题是一种组合优化的问题&#xff0c;它有多种变体&#xff0c;但最常见的两种是0/1背包问题和完全背包问题。 0/1背包问题 问题描述&#xff1a; 假设你有一个背包&#xff0c;背包的容量为W&#xff08;可以是重量或者体积等度量&#xff09;&#xff0c;同时有n个物品…...

从0开始学习机器学习--Day26--聚类算法

无监督学习(Unsupervised learning and introduction) 监督学习问题的样本 无监督学习样本 如图&#xff0c;可以看到两者的区别在于无监督学习的样本是没有标签的&#xff0c;换言之就是无监督学习不会赋予主观上的判断&#xff0c;需要算法自己去探寻区别&#xff0c;第二张…...

Vue3插槽v-slot使用方式

在 Vue 3 中&#xff0c;v-slot 是用来定义和使用插槽的指令。插槽是 Vue 的一个功能&#xff0c;允许你在组件内部定义占位内容&#xff0c;便于在父组件中提供动态内容。以下是 v-slot 的详细使用方法&#xff1a; 1. 基础使用 <template><BaseComponent><te…...

FPGA生成SPWM的另一种思路:抛弃ROM,用DDS IP核与CORDIC算法实时生成正弦波

FPGA实时生成SPWM&#xff1a;基于DDS IP核与CORDIC算法的高效实现方案 在电力电子和电机控制领域&#xff0c;SPWM&#xff08;正弦脉宽调制&#xff09;技术因其优异的谐波特性和高效率而广受青睐。传统FPGA实现方案通常采用预存波形数据的ROM方法&#xff0c;虽然实现简单&a…...

B站视频转文字终极指南:3分钟学会用开源工具提取视频内容

B站视频转文字终极指南&#xff1a;3分钟学会用开源工具提取视频内容 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为手动记录B站视频内容而烦恼吗&…...

自动化规则同步:从设计原理到Go/Python实战实现

1. 项目概述&#xff1a;一个自动化同步规则的“守门人”在运维和网络安全领域&#xff0c;我们每天都在和各种规则打交道&#xff1a;防火墙规则、入侵检测规则、内容过滤规则……这些规则是保障系统安全、优化网络流量的核心防线。然而&#xff0c;随着业务扩展和多环境部署&…...

Perplexity ScienceDirect搜索响应延迟超8秒?3种底层协议优化策略+2个隐藏headers参数,实验室实测提速5.8倍

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity ScienceDirect搜索响应延迟超8秒&#xff1f;3种底层协议优化策略2个隐藏headers参数&#xff0c;实验室实测提速5.8倍 ScienceDirect API 在与 Perplexity 的实时检索链路中常因 TLS 握手冗…...

2026主流远控软件综合横测:4款工具全方位测试,谁更适合你?

用心测评,全程无广2026主流远控软件综合横测&#xff1a;4款工具全方位测试&#xff0c;谁更适合你&#xff1f;远程控制已成为个人办公、家庭协助、企业运维、游戏串流的刚需工具。本次横测聚焦ToDesk、向日葵、TeamViewer、网易 UU 远程四款主流产品&#xff0c;从连接性能、…...

英雄联盟游戏效率工具League Akari:智能自动化与数据分析完整指南

英雄联盟游戏效率工具League Akari&#xff1a;智能自动化与数据分析完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为BP阶段手速…...

别再全网搜了!企业微信后台三步找到你的CorpID和Secret(附AccessToken一键生成工具)

企业微信开发实战&#xff1a;3分钟获取CorpID与Secret的终极指南 第一次接触企业微信API开发时&#xff0c;最让人头疼的莫过于找不到CorpID和Secret这两个关键凭证。官方文档信息分散&#xff0c;后台界面又不够直观&#xff0c;很多开发者在这个环节浪费了大量时间。本文将…...

FinalShell不止是SSH客户端:挖掘它的云端同步、命令补全和服务器管理隐藏功能

FinalShell进阶指南&#xff1a;解锁云端同步、智能补全与高效运维的隐藏技巧 如果你已经用FinalShell完成了基础的SSH连接操作&#xff0c;那么是时候探索这个工具更强大的另一面了。作为一款被低估的一体化运维工具&#xff0c;FinalShell在高效命令操作、多设备协同和服务器…...

MCP协议实践:构建AI助手与IDE间的通信中继

1. 项目概述&#xff1a;IDE与AI助手间的“通信中继”最近在折腾AI编程助手时&#xff0c;发现一个挺有意思的痛点&#xff1a;像Cursor、Claude Desktop这类IDE插件或独立应用&#xff0c;它们内置的AI助手能力很强&#xff0c;但很多时候我们希望能让它们访问到IDE之外的一些…...

从PC到移动:DRAM市场如何从周期性震荡走向结构性稳定

1. DRAM市场格局的深层演变&#xff1a;从周期性震荡到结构性稳定干了十几年硬件设计和供应链的活儿&#xff0c;我算是亲眼见证了DRAM这个行当的“过山车”行情。早些年&#xff0c;跟同行聊起内存&#xff0c;大家第一反应都是“又涨了&#xff1f;”或者“崩盘了&#xff1f…...