RabbitMQ应用2

news2025/4/3 14:21:19

RabbitMQ应用2

  • 一.实际业务逻辑
    • 订单系统中使用MQ(不写订单系统逻辑)
    • 1.项目的创建和准备
    • 2.代码实现
      • Controller
      • Configuration
      • properties
    • 二.物流系统使用MQ(不实现物流系统业务)
    • 1.项目创建同订单(一样)
    • 2.代码实现
      • properties
      • Listener
    • 使用对象来发送接收消息
      • 生产者(订单)代码
      • 消费者(物流)代码

一.实际业务逻辑

订单系统中使用MQ(不写订单系统逻辑)

1.项目的创建和准备

  1. 先把空项目创建好
    在这里插入图片描述
  2. 在空项目中创建其他的spring项目

在这里插入图片描述

  1. 创建新的spring项目在这个空项目中
    在这里插入图片描述
  2. 项目创建好会出现一个文件包
    在这里插入图片描述
  3. 有些情况下需要手动添加Maven
    在这里插入图片描述
  4. 在里面选择Maven后,项目就能够使用XML配置文件了
    在这里插入图片描述

2.代码实现

Controller

package com.example.orderservice.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 {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @RequestMapping("/create")
    public String create() {
        String orderId = UUID.randomUUID().toString();
        rabbitTemplate.convertAndSend("","order.create","订单信息,订单ID: " + orderId);
        return "ok";
    }
}

Configuration

package com.example.orderservice.config;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.amqp.core.QueueBuilder;


@Configuration
public class RabbitMQConfig {

    @Bean("orderQueue")
    public Queue orderQueue() {
        return QueueBuilder.durable("order.create").build();
    }
}

properties

spring.application.name=orderservice
spring.rabbitmq.addresses=amqp://账号:密码@IP:端口号/虚拟机

二.物流系统使用MQ(不实现物流系统业务)

1.项目创建同订单(一样)

2.代码实现

properties

spring.application.name=logistics
server.port=9090
spring.rabbitmq.addresses=amqp://账号:密码@IP:端口号/虚拟机

Listener

package com.example.logistics.listener;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class OrderListener {
    @RabbitListener(queues = "order.create")
    public void handMessage(String orderInfo) {
        System.out.println("接收到订单消息: " + orderInfo);
    }
}

使用对象来发送接收消息

生产者(订单)代码

Controller

@RequestMapping("/order")
@RestController
public class OrderController {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @RequestMapping("/create")
    public String create() {
        String orderId = UUID.randomUUID().toString();
        rabbitTemplate.convertAndSend("","order.create","订单信息,订单ID: " + orderId);
        return "ok";
    }


    @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 "ok2";
    }
}

Configuration

@Configuration
public class RabbitMQConfig {

    @Bean("orderQueue")
    public Queue orderQueue() {
        return QueueBuilder.durable("order.create").build();
    }

    @Bean
    public Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter jackson2JsonMessageConverter) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter);
        return rabbitTemplate;
    }
}

model

@Data
public class OrderInfo implements Serializable {
    private String OrderId;
    private String name;
}

消费者(物流)代码

Listener

@Component
@RabbitListener(queues = "order.create")
public class OrderListener {
    @RabbitHandler
    public void handMessage1(String orderInfo) {
        System.out.println("接收到订单消息String: " + orderInfo);
    }

    @RabbitHandler
    public void handMessage2(OrderInfo orderInfo) {
        System.out.println("接收到订单消息OrderInfo: " + orderInfo);
    }

}

Configuration

@Configuration
public class RabbitMQConfig {
    @Bean
    public Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter jackson2JsonMessageConverter) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter);
        return rabbitTemplate;
    }
}

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

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

相关文章

Windows 实战-evtx 文件分析--笔记

Windows 取证之EVTX日志 - 蚁景网安实验室 - 博客园 一.evtx日志文件是什么 从 Windows NT 6.0(也就是 Windows Vista 和 Windows Server 2008)开始,微软引入了一种全新的日志文件格式,称为 evtx。这种格式取代了之前 Windows 系…

【postgresql】锁概览

常规锁 场景测试案例

子组件使用:visible.sync=“visible“进行双向的绑定导致该弹窗与其他弹窗同时显示的问题

问题描述&#xff1a;最近写代码时遇到了一个问题&#xff1a;点击A弹窗后关闭&#xff0c;继续点击B弹窗&#xff0c;这时会同时弹窗A、B两个弹窗。经过排查后发现在子组件定义时使用了:visible.sync"visible"属性进行双向的数据绑定 <template> <el-dial…

【AI产品分享】面向图片的原始位置翻译功能

1. 背景 在撰写文字材料时&#xff0c;往往需要配套图像以增强表达效果。然而&#xff0c;有时自己绘制的图可能达不到理想的质量&#xff0c;而在其他文献材料中却能发现更清晰、直观的示例。希望在“站在巨人的肩膀上”优化自己的图像时&#xff0c;通常希望在保留原始图像的…

【无标题】跨网段耦合器解决欧姆龙CJ系列PLC通讯问题案例

欧姆龙CJ系列PLC不同网段的通讯问题 一、项目背景 某大型制造企业的生产车间内&#xff0c;采用了多台欧姆龙CJ系列PLC对生产设备进行控制。随着企业智能化改造的推进&#xff0c;需要将这些PLC接入工厂的工业以太网&#xff0c;以便实现生产数据的实时采集、远程监控以及与企业…

K8S学习之基础七十二:Ingress基于Https代理pod

Ingress基于Https代理pod 1、构建TLS站点 &#xff08;1&#xff09;准备证书&#xff0c;在xianchaomaster1节点操作 cd /root/ openssl genrsa -out tls.key 2048 openssl req -new -x509 -key tls.key -out tls.crt -subj /CCN/STBeijing/LBeijing/ODevOps/CNak.lucky.com…

node.js版本管理

概述 遇到了版本升级后&#xff0c;以前项目不兼容的问题。 下载一个node.js的版本管理工具&#xff0c;官网下载地址&#xff0c;可以选择版本下载&#xff0c;我选择的1.11.1版本的。下载完成后点击安装&#xff0c;分别选择nvm安装目录和nodejs的安装目录&#xff0c;点击安…

Gartner预计2025年AI支出达6440亿美元:数据中心与服务器市场的关键驱动与挑战

根据Gartner最新预测&#xff0c;2025年全球生成式人工智能&#xff08;GenAI&#xff09;支出将达到6440亿美元&#xff0c;较2024年增长76.4%&#xff0c;其中80%的支出将集中于硬件领域&#xff0c;尤其是集成AI能力的服务器、智能手机和PC等设备。这一增长的核心驱动力来自…

重新安装VMware tools为灰色无法点击问题解决|读取电脑文件的共享文件夹方法

1.问题VMware tools为灰色 sudo systemctl status vmware-tools 显示&#xff1a;Unit vmware-tools.service could not be found. 改 检测方式 弹出&#xff08;之前没有&#xff09; 在重启的瞬间点安装 弹出&#xff1a; 双击打开 右键打开终端&#xff0c;解压 cd ~ ta…

构造超小程序

文章目录 构造超小程序1 编译器-大小优化2 编译器-移除 C 异常3 链接器-移除所有依赖库4 移除所有函数依赖_RTC_InitBase() _RTC_Shutdown()__security_cookie __security_check_cookie()__chkstk() 5 链接器-移除清单文件6 链接器-移除调试信息7 链接器-关闭随机基址8 移除异常…

Outlook客户端无法连接到服务器,添加账户显示“无网络连接,请检查你的网络设置,然后重试。[2603]”

1、先切换一下到手机热点或者其他网络&#xff0c;判断是不是现在所连接的网络的问题。如果有VPN代理软件&#xff0c;网银软件&#xff0c;加密软件在后台运行&#xff0c;麻烦退出一下。 2、打开电脑上的 控制面板——网络和Internet——Internet选项——高级——先点击还原…

LlamaIndex实现RAG增强:融合检索(Fusion Retrieval)与混合检索(Hybrid Search)

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…

蓝桥杯冲刺:一维前缀和

系列文章目录 蓝桥杯系列&#xff1a;一维前缀和 文章目录 系列文章目录前言一、暴力的写法&#xff1a;二、一维前缀和的模板&#xff1a; 具体实现&#xff1a; 三、具体例题&#xff1a;求和 1.题目参考&#xff1a;2.以下是具体代码实现&#xff1a; 总结 前言 上次我介绍…

Ubuntu24.04-中文输入法的切换

Ubuntu24.04在安装后自带中文全拼输入法。。 根据官方的说明&#xff0c;需使用 shift super 空格 切换输入法&#xff0c;但在之前使用windows或者ubuntu的早些版本&#xff0c;多使用 Ctrl 空格 的方式切换输入法&#xff0c;本文就介绍如何进行输入法快捷键切换的配置&a…

技术回顾day3

1.获取文件信息、获取视频信息 走的都是同一个方法&#xff1a;baseController里面的getFile。 在getFile方法里面进行判断文件的类型&#xff0c;判断是不是m3u8类型或者ts类型做一些额外的处理。 获取信息底层就是读取文件&#xff0c;然后写入response的OutputStream ou…

埃文科技企业AI大模型一体机——昇腾体系+DeepSeek+RAG一站式解决方案

面对企业级市场海量数据资产与复杂业务场景深度耦合的刚需&#xff0c;埃文科技重磅推出基于华为昇腾算力DeepSeek大模型的企业一体机产品&#xff0c;提供DeepSeek多版本大模型一体机选择&#xff0c;为企业提供本地昇腾算力DeepSeek大模型RAG知识库的一体化解决方案&#xff…

JavaWeb开发基础知识-Servlet终极入门指南(曼波萌新版)

(✪▽✪)曼波~~~~&#xff01;欢迎来到Servlet新手村&#xff01;准备好开启Web开发的奇妙冒险了吗&#xff1f;让曼波用最有趣的方式带你飞~ &#x1f680; &#x1f308; 第①章 什么是Servlet&#xff1f; // 本质就是一个Java类&#xff01; public class HelloServlet e…

游戏引擎学习第198天

回顾并为今天的内容设定 今天我们有一些代码需要处理。昨天我们进行了一些调试界面的整合工作&#xff0c;之前我们做了一些临时的、粗糙的操作&#xff0c;将一些东西读进来并放到调试界面中。今天&#xff0c;我们并不打算进行大规模的工作&#xff0c;更多的是对之前的代码…

Walrus 基金会启动 RFP 计划,推动生态发展

Walrus 基金会正式推出 Walrus RFP 提案申请计划&#xff0c;为推动和支持 Walrus 生态的项目提供资金支持。该计划旨在助力构建符合协议使命的解决方案&#xff0c;解锁去中心化和可编程存储的潜力。 无论项目是开发新工具、探索集成&#xff0c;还是提出创新用例&#xff0c…

智能配电箱:重塑未来电力管理的核心枢纽

哇塞&#xff01;智能配电箱可是未来电力管理的超级核心枢纽呀&#xff0c;正以超燃的态势引领着电力行业迈向智能化变革的新征程呢&#xff01;它在众多方面所展现出的独特优势和那广阔无垠的应用前景&#xff0c;简直太令人激动啦&#xff01;下面就来瞧瞧智能配电箱在重塑未…