Springboot整合MQ学习记录

Mq介绍

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。支持Windows、Linux/Unix、MAC OS X操作系统和包括JAVA在内的多种编程语言。

引入Pom

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

具体的模型。概念都不说了。直接看代码

控制器测试代码

package com.example.demoamqp.controller;import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import com.example.demoamqp.entity.Order;
import com.example.demoamqp.send.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;/*** @version 1.0.0* @className: TestSendMqController* @description: 消息发送者* @author: zhangjunfa* @date: 2023/6/16 11:05*/
@Slf4j
@RequestMapping
@RestController
public class TestSendMqController {private Sender sender;private FanoutSender fanoutSender;private TopicSender topicSender;private DeadSender deadSender;private DelayQueueSender delayQueueSender;private Delay2Sender delay2Sender;public TestSendMqController(Sender sender, FanoutSender fanoutSender, TopicSender topicSender, DeadSender deadSender, DelayQueueSender delayQueueSender, Delay2Sender delay2Sender) {this.sender = sender;this.fanoutSender = fanoutSender;this.topicSender = topicSender;this.deadSender = deadSender;this.delayQueueSender = delayQueueSender;this.delay2Sender = delay2Sender;}@PostMapping("/send")public Object send(@RequestParam(name = "param") String param) throws InterruptedException {Thread.sleep(3000);sender.send(param);return "success";}@PostMapping("/sendSimple")public Object sendSimple(@RequestParam(name = "orderName") String orderName) throws InterruptedException {Order order = new Order();order.setId(IdUtil.getSnowflakeNextId());order.setOrderName(orderName);order.setOrderNo(IdUtil.nanoId());order.setCreatedTime(DateUtil.date());sender.sendSimple(order);return "success";}@PostMapping("/sendCode")public Object sendCode() throws InterruptedException {int randomInt = RandomUtil.randomInt(100000, 999999);log.info("生产者生成了一个验证码:{}", randomInt);this.fanoutSender.sendCode(String.valueOf(randomInt));return "success";}@PostMapping("/sendTopic")public Object sendTopic(@RequestParam(name = "msg") String msg, @RequestParam(name = "routingKey") String routingKey) throws InterruptedException {this.topicSender.sendMsg(msg, routingKey);return "success";}/*** 延迟队列(死信)设计** @param msg* @return* @throws InterruptedException*/@PostMapping("/sendDead")public Object sendDead(@RequestParam(name = "msg") String msg) throws InterruptedException {this.deadSender.sendDelay(msg, 2000);return "success 我是死信队列";}/*** 延迟队列设计** @param msg* @return* @throws InterruptedException*/@PostMapping("/sendDelay")public Object sendDelay(@RequestParam(name = "msg") String msg) throws InterruptedException {this.delayQueueSender.sendMsg(msg);return "success 我是延迟队列";}/*** 延迟队列设计** @param msg* @return* @throws InterruptedException*/@PostMapping("/sendDelay2")public Object sendDelay2(@RequestParam(name = "msg") String msg,@RequestParam(name = "delayTime") Integer delayTime) throws InterruptedException {this.delay2Sender.sendDelay2(msg,delayTime);return "success 我是延迟队列";}
}

配置类代码

package com.example.demoamqp.config;import com.example.demoamqp.conatants.Constants;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 创建消息队列并注入容器中** @author ross*/@Configuration
public class QueueConfig {/*** 创建队列** @return*/@Beanpublic Queue createQueue() {return new Queue("ross_amq");}/******************************  发布、订阅者模式  *********************************/@Bean // 邮箱的队列public Queue mailQueue(){return new Queue(Constants.MQ_MAIL_QUEUE,Constants.durable,Constants.exclusive,Constants.autoDelete);}@Bean // 电话的队列public Queue phoneQueue(){return new Queue(Constants.MQ_PHONE_QUEUE,Constants.durable,Constants.exclusive,Constants.autoDelete);}@Bean // 交换机public FanoutExchange fanoutExchange(){return new FanoutExchange(Constants.MQ_FANOUT_EXCHANGE,Constants.durable,Constants.autoDelete);}/*** 邮箱绑定交换机* @return*/@Beanpublic Binding mailBinding(){return BindingBuilder.bind(mailQueue()).to(fanoutExchange());}/*** 电话绑定交换机* @return*/@Beanpublic Binding phoneBinding(){return BindingBuilder.bind(phoneQueue()).to(fanoutExchange());}/*----------------------------------------------------*/@Bean // A队列public Queue topicAQueue(){return new Queue(Constants.MQ_TOPIC_QUEUE_A,Constants.durable,Constants.exclusive,Constants.autoDelete);}/*** topic模式相关配置*/@Bean // B队列public Queue topicBQueue(){return new Queue(Constants.MQ_TOPIC_QUEUE_B,Constants.durable,Constants.exclusive,Constants.autoDelete);}@Bean // topic的交换机public TopicExchange topicMyExchange(){return new TopicExchange(Constants.MQ_TOPIC_EXCHANGE,Constants.durable,Constants.autoDelete);}@Beanpublic Binding topicAQueueBinding(){return BindingBuilder.bind(topicAQueue()).to(topicMyExchange()).with("topic.xxx"); // 规则 topic.xxx}@Beanpublic Binding topicBQueueBinding(){return BindingBuilder.bind(topicBQueue()).to(topicMyExchange()).with("topic.*"); // 规则 topic.xxx}
}

消费者

package com.example.demoamqp.receiver;import cn.hutool.core.date.DateUtil;
import com.example.demoamqp.conatants.Constants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;/*** 死信队列消费者* @className: MqDelayReceiver* @projectName: demo-one* @auth: rosszhang* @date: 2023/12/28 16:53*/
@Slf4j
@Component
public class MqDelayReceiver {@RabbitListener(queues = Constants.MQ_DELAY_QUEUE)public void delayConsume(String msg) {log.debug("[消费者消费信息:{},时间:{}", msg, DateUtil.date());}}

发送者代码

package com.example.demoamqp.send;import cn.hutool.core.date.DateUtil;
import com.example.demoamqp.conatants.Constants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** 死信队列** @className: DeadSender* @projectName: demo-one* @auth: rosszhang* @date: 2023/12/28 16:49*/
@Slf4j
@Component
public class DeadSender {private AmqpTemplate rabbitAmqpTemplate;@Autowiredpublic void setRabbitAmqpTemplate(AmqpTemplate rabbitAmqpTemplate) {this.rabbitAmqpTemplate = rabbitAmqpTemplate;}/*** 死信队列** @param msg* @param delayTime*/public void sendDelay(String msg, int delayTime) {rabbitAmqpTemplate.convertAndSend(Constants.MQ_NORMAL_EXCHANGE,Constants.MQ_NORMAL_ROUTING_KEY,msg,process -> {process.getMessageProperties().setExpiration(String.valueOf(delayTime));return process;});log.debug("[生产者:]发送消息:{},时间{},延迟{}秒", msg, DateUtil.date(), delayTime / 1000);}
}

源码大家可以看我Gitte地址
Gitte仓库地址

下面这个是我的个人公共号 只会写Bug的程序猿,大家可以关注一下,一键三连。相互交流学习。
在这里插入图片描述

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

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

相关文章

<HarmonyOS主题课>1~3课后习题汇总

&#xff1c;HarmonyOS第一课&#xff1e;1~10课后习题汇总 1使用DevEco Studio高效开发 单选题 用哪一种装饰器修饰的组件可作为页面入口组件&#xff1f;&#xff08;B&#xff09; A. ComponentB. EntryC. PreviewD. Builder ArkTS Stage模型支持API Version 9&#xf…

智能座舱的下一个价值“爆点”——让“光”更智能

汽车智能化快速升级&#xff0c;智能座舱作为人机交互的主要窗口&#xff0c;交互模态、用户体验也呈现多维度升级。 例如&#xff0c;今年下半年上市的多款高端智能车型纷纷基于高性能座舱硬件平台&#xff0c;集成了AR-HUD、DMS/OMS等高阶功能&#xff0c;同时结合超大屏/多…

简单介绍Java 的内存泄漏

java最明显的一个优势就是它的内存管理机制。你只需简单创建对象&#xff0c;java的垃圾回收机制负责分配和释放内存。然而情况并不像想像的那么简单&#xff0c;因为在Java应用中经常发生内存泄漏。 本教程演示了什么是内存泄漏&#xff0c;为什么会发生内存泄漏以及如何预防…

SpringMVC通用后台管理系统源码

整体的SSM后台管理框架功能已经初具雏形&#xff0c;前端界面风格采用了结构简单、 性能优良、页面美观大的Layui页面展示框架 数据库支持了SQLserver,只需修改配置文件即可实现数据库之间的转换。 系统工具中加入了定时任务管理和cron生成器&#xff0c;轻松实现系统调度问…

Glide加载不出图片与请求浏览器资源时中文转码问题

报错代码如图&#xff1a;Image load failed: Failed to load resourse 首先确保你的图片 URL 地址是正确的&#xff0c;可以通过在浏览器中直接访问这个 URL 来测试。另外&#xff0c;确保 URL 地址不包含特殊字符或空格&#xff0c;以免影响加载。 然后确定依赖库没有问题&am…

地平面--高速布线

https://baijiahao.baidu.com/s?id1764139038516816855&wfrspider&forpc 概念 回顾传输线&#xff0c;由任意两条有一定长度的导线组成&#xff0c;一条为信号路径&#xff0c;一条为返回路径。基本电路理论告诉我们&#xff0c;信号是由电流传播的&#xff0c;明确的…

目标检测-One Stage-YOLOv2

文章目录 前言一、YOLOv2的网络结构和流程二、YOLOv2的创新点预处理网络结构训练 总结 前言 根据前文目标检测-One Stage-YOLOv1可以看出YOLOv1的主要缺点是&#xff1a; 和Fast-CNN相比&#xff0c;速度快&#xff0c;但精度下降。&#xff08;边框回归不加限制&#xff09;…

高并发如何保证接口的幂等性?

前言 接口幂等性问题&#xff0c;对于开发人员来说&#xff0c;是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法&#xff0c;绝大部分内容我在项目中实践过的&#xff0c;给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场景&#xff1a; 有时我…

Docker(八)Python+旧版本chrome+selenium+oss2+fastapi镜像制作

目录 一、背景二、能力三、核心流程图四、制作镜像1.资源清单2.Dockerfile3.制作镜像 五、启动测试 一、背景 近几年我们线下的创业团队已从零到一开发过好几个小程序项目&#xff0c;都是和体育相关。其中生成海报分享图片好像都是不可或缺的功能。之前的项目老板给的时间都比…

如何让CHAT使用python绘制概率密度图像?

问CHAT&#xff1a;用python绘制概率密度图像 CHAT回复&#xff1a;你可以使用Python的matplotlib库和numpy库进行概率密度的绘制。 以下是一个简单的例子&#xff1a; python import numpy as np import matplotlib.pyplot as plt #随机生成1000个正态分布的数 data np.rand…

《微机原理与应用》期末考试题库(附答案解析)

第1章 微型计算机概述 1.微型计算机的硬件系统包括___A _____。 A&#xff0e;控制器、运算器、存储器和输入输出设备 B&#xff0e;控制器、主机、键盘和显示器 C&#xff0e;主机、电源、CPU和输入输出 D&#xff0e;CPU、键盘、显示器和打印机 2.微处…

安装Keras用于影像分割

conda create -n tfkeras2024 python3.9.18 activate tfkeras2024 pip install tensorflow-gpu2.9.0 pip install keras pip install scipy pip install ipykernel ipython python -m ipykernel install --name tfkeras2024 删除环境conda remove -n tfkeras2024 --all

构建高效秒杀系统的设计原理及注意事项

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

G4周:CGAN,手势生成

本文为&#x1f517;365天深度学习训练营 中的学习记录博客 原作者&#xff1a;K同学啊|接辅导、项目定制 我的环境&#xff1a; 1.语言&#xff1a;python3.7 2.编译器&#xff1a;pycharm 3.深度学习框架Pytorch 1.8.0cu111 一、CGAN介绍 条件生成对抗网络&#xff08;…

transforms图像增强(一)

一、数据增强 数据增强&#xff08;Data Augmentation&#xff09;是一种常用的数据预处理技术&#xff0c;通过对训练集进行各种变换和扩增操作&#xff0c;可以增加训练数据的多样性和丰富性&#xff0c;从而提高模型的泛化能力。 数据增强的目的是通过对训练集中的图像进行…

安装PyTorch及环境配置(应用于Python上的YOLO)

这个基本都是Bilibili网站里面叫“小手丫子”up的视频教程&#xff0c;此前自己需要装了好几次又卸载了好几次&#xff0c;现在根据视频教学整理出来自己所理解的文档。 注意事项 1.安装的pycharm版本和anaconda版本无要求。 2.运行pycharm尽量以管理员身份运行。 3.Cuda是独…

使用CentOS 7.6搭建HTTP隧道代理服务器

在现代网络环境中&#xff0c;HTTP隧道代理服务器因其灵活性和安全性而受到广泛关注。CentOS 7.6&#xff0c;作为一个稳定且功能强大的Linux发行版&#xff0c;为搭建此类服务器提供了坚实的基础。 首先&#xff0c;我们需要明确HTTP隧道代理的基本原理。HTTP隧道代理允许客户…

Mac解决node-sass: Command failed 问题

1.以为Command failed 错误是因为缺少依赖项或者版本不兼容导致的&#xff08;不适用我&#xff09; 此项目的package版本&#xff0c;node版本14.21.3为版本对应正确 "node-sass": "^4.13.0","sass": "^1.24.2","sass-loader&q…

【Pytorch】学习记录分享10——TextCNN用于文本分类处理

【Pytorch】学习记录分享10——PyTorchTextCNN用于文本分类处理 1. TextCNN用于文本分类2. 代码实现 1. TextCNN用于文本分类 具体流程&#xff1a; 2. 代码实现 # coding: UTF-8 import torch import torch.nn as nn import torch.nn.functional as F import numpy as np…

MongoDB笔记

文章目录 安装查看数据库命令手册 学习地址&#xff1a;https://www.bilibili.com/video/BV16u4y1y7Fm 安装 下载地址 https://www.mongodb.com/try/download/community-kubernetes-operator查看数据库 查看当前数据库 show dbs show databases切换数据库 use 数据库名称cls…