030-从零搭建微服务-消息队列(二)

写在最前

如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。

源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心

源码地址(前端):mingyue-ui: 🎉 基于 Vue3 + TS + Vite + Element plus 等技术,适配 MingYue 后台微服务

文档地址:Wiki - Gitee.com

mingyue-common-mq

添加依赖

根据需要在 mingyue-common-mq 模块中添加所需的 MQ 中间件,例如:RocketMQ、Kafka。

<dependencies><!-- RocketMQ --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-stream-rocketmq</artifactId></dependency>
​<!-- Kafka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId></dependency>
</dependencies>

集成 RocketMQ

引入依赖

<!-- MQ工具 -->
<dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-mq</artifactId>
</dependency>

Nacos 配置

spring:cloud:stream:function:# 重点配置 与 binding 名与消费者对应definition: rocketmqDemorocketmq:binder:# rocketmq 地址name-server: 192.168.21.32:9876bindings:rocketmqDemo-out-0:producer:# 必须得写group: defaultbindings:rocketmqDemo-out-0:content-type: application/jsondestination: stream-rocketmq-demo-topicgroup: demo-groupbinder: rocketmqrocketmqDemo-in-0:content-type: application/jsondestination: stream-rocketmq-demo-topicgroup: demo-groupbinder: rocketmq

RocketMQ 生产者

@Component
public class RocketMqProducer {
​@Resourceprivate StreamBridge streamBridge;
​public void rocketMqDemoMsg(String msg) {// 构建消息对象MqMessageDto messageDto = new MqMessageDto().setMsgId(IdUtil.fastSimpleUUID()).setMsgText(msg);
​streamBridge.send("rocketmqDemo-out-0", MessageBuilder.withPayload(messageDto).build());}
​
}

RocketMQ 消费者

@Slf4j
@Component
public class RocketMqConsumer {
​@BeanConsumer<MqMessageDto> rocketmqDemo() {log.info("Rocket MQ 初始化订阅");return msg -> {log.info("通过 Rocket MQ 消费到消息 => {}", msg.toString());};}
​
}

推送消息到 RocketMQ

@GetMapping("/sendRocketMq")
@Operation(summary = "发送消息到RocketMQ", parameters = { @Parameter(name = "msg", description = "推送的消息体", required = true) })
public R<Void> sendRocketMq(String msg) {rocketMqProducer.rocketMqDemoMsg(msg);return R.ok();
}

集成 Kafka

引入依赖

<!-- MQ工具 -->
<dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-mq</artifactId>
</dependency>

Nacos 配置

spring:cloud:stream:function:# 重点配置 与 binding 名与消费者对应definition: kafkaDemokafka:binder:brokers: 192.168.21.32:9092bindings:kafkaDemo-out-0:destination: stream-kafka-demo-topiccontentType: application/jsongroup: demo-groupbinder: kafkakafkaDemo-in-0:destination: stream-kafka-demo-topiccontentType: application/jsongroup: demo-groupbinder: kafka

Kafka 生产者

@Component
public class KafkaProducer {
​@Resourceprivate StreamBridge streamBridge;
​public void kafkaDemoMsg(String msg) {// 构建消息对象MqMessageDto messageDto = new MqMessageDto().setMsgId(IdUtil.fastSimpleUUID()).setMsgText(msg);
​streamBridge.send("kafkaDemo-out-0", MessageBuilder.withPayload(messageDto).build());}
​
}

Kafka 消费者

@Slf4j
@Component
public class KafkaConsumer {
​@BeanConsumer<MqMessageDto> kafkaDemo() {log.info("Kafka 初始化订阅");return msg -> {log.info("通过 Kafka 消费到消息 => {}", msg.toString());};}
​
}

推送消息到 Kafka

@GetMapping("/sendKafka")
@Operation(summary = "发送消息到Kafka", parameters = { @Parameter(name = "msg", description = "推送的消息体", required = true) })
public R<Void> sendKafka(String msg) {kafkaProducer.kafkaDemoMsg(msg);return R.ok();
}

拓展 RabbitMQ

mingyue-common-mq 添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

Nacos 配置

--- # rabbitmq 配置
spring:rabbitmq:host: rabbitmqIpport: 5672username: rootpassword: rootcloud:stream:function:# 重点配置 与 binding 名与消费者对应definition: rabbitmqDemorabbit:bindings:rabbitmqDemo-in-0:consumer:delayedExchange: truerabbitmqDemo-out-0:producer:delayedExchange: truebindings:rabbitmqDemo-in-0:destination: delay.exchange.democontent-type: application/jsongroup: delay-groupbinder: rabbitrabbitmqDemo-out-0:destination: delay.exchange.democontent-type: application/jsongroup: delay-groupbinder: rabbit

小结

MQ 基础搭建已经完成,后续会编写一些实际开发中使用到队列的场景,如:

  1. 订单处理:

    • 电子商务平台可以使用消息队列来处理订单,确保订单的创建、支付、发货和通知等各个步骤都能按顺序和可靠地执行。

  2. 通知和提醒:

    • 网站或应用程序可以使用消息队列来发送通知和提醒,如电子邮件通知、短信通知、推送通知等,以便与用户互动。

  3. 用户注册和身份验证:

    • 当用户注册或请求密码重置时,消息队列可以用于生成和发送验证链接或令牌,确保用户身份验证的安全性和可扩展性。

  4. 数据同步:

    • 在多个系统之间同步数据,以确保数据的一致性,例如将用户配置信息从一个微服务同步到另一个微服务。

  5. 事件日志和审计:

    • 记录应用程序事件、用户活动和系统操作,以进行审计、监视和故障排除。

  6. 批量处理:

    • 处理大量数据导入、数据清洗、ETL(提取、转换、加载)操作等批处理任务,以提高性能和可维护性。

  7. 异步任务处理:

    • 处理后台任务,如图像处理、视频编码、生成报告等,以减少响应时间和提高系统的吞吐量。

  8. 队列服务:

    • 提供队列服务以支持其他应用程序或团队的异步通信需求,例如云服务提供商的消息队列服务。

  9. 数据分发:

    • 将数据从生产者分发给多个消费者,以实现发布-订阅模式,例如新闻订阅、市场报价和天气预报。

  10. 错误处理和重试:

    • 处理意外错误和故障,将失败的操作或任务放入队列,以便进行重试或错误处理。

这些业务使用场景只是消息队列的一些示例。消息队列有助于提高系统的可扩展性、弹性和可靠性,允许异步处理和解耦合组件,从而改善了应用程序的整体性能和用户体验。不同的业务需求可能需要不同类型的消息队列系统和配置。

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

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

相关文章

Neural Networks for Fingerprint Recognition

Neural Computation ( IF 3.278 ) 摘要&#xff1a; 在采集指纹图像数据库后&#xff0c;设计了一种用于指纹识别的神经网络算法。当给出一对指纹图像时&#xff0c;算法输出两个图像来自同一手指的概率估计值。在一个实验中&#xff0c;神经网络使用几百对图像进行训练&…

基于SSM的微博系统网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

十四天学会C++之第一天(入门和基本语法)

C的起源和历史 C诞生于20世纪80年代初&#xff0c;它的创造者是计算机科学家Bjarne Stroustrup。当时&#xff0c;Stroustrup在贝尔实验室工作&#xff0c;他希望为C语言添加一些功能&#xff0c;以便更好地支持系统开发。这个愿望促使他创建了C。 C的名字来源于它的基因&…

BIT.8_Linux 多线程

lesson35: 一、 1.OS调度的基本单位&#xff08;0&#xff1a;13&#xff1a;5&#xff09; 2.进程XXXX&#xff08;0&#xff1a;14&#xff1a;15&#xff09; a.进程的内核数据结构包含哪几个部分&#xff1f;&#xff08;n个&#xff09;&#xff08;0&#xff1a;15&a…

24Hibench

1. Hibench 官网 ​ HiBench is a big data benchmark suite that helps evaluate different big data frameworks in terms of speed, throughput and system resource utilizations. It contains a set of Hadoop, Spark and streaming workloads, including Sort, WordCou…

中断向量控制器(NVIC)

1. 什么是中断 在处理器中&#xff0c;中断是一个过程&#xff0c;即CPU在正常执行程序的过程中&#xff0c;遇到外部/内部的紧急事件需要处理&#xff0c;暂时中止当前程序的执行&#xff0c;转而去为处理紧急的事件&#xff0c;待处理完毕后再返回被打断的程序处继续往下执行…

博客无限滚动加载(html、css、js)实现

介绍 这是一个简单实现了类似博客瀑布流加载功能的页面&#xff0c;使用html、css、js实现。简单易懂&#xff0c;值得学习借鉴。&#x1f44d; 演示地址&#xff1a;https://i_dog.gitee.io/easy-web-projects/infinite_scroll_blog/index.html 代码 index.html <!DOCT…

[Linux 基础] 一篇带你了解linux权限问题

文章目录 1、Linux下的两种用户2、文件类型和访问权限&#xff08;事物属性&#xff09;2.1 Linux下的文件类型2.2 基本权限2.3 文件权限值的表示方法&#xff08;1&#xff09;字符表示方法&#xff08;2&#xff09;8进制数值表示方法 2.4 文件访问权限的相关设置方法(1) chm…

R语言中更改R包安装路径

看到这些包下载到我的C盘&#xff0c;我蛮不爽的&#xff1a; 所以决定毫不犹豫的改到D盘&#xff1a; 首先&#xff0c;我们需要在RStudio中新建一个初始启动文件&#xff1a; file.edit(~/.Rprofile) 然后去你喜欢的环境新建一个文件夹存放安装的包的位置&#xff0c;我喜欢…

数据结构与算法课后题-第三章(顺序队和链队)

#include <iostream> //引入头文件 using namespace std;typedef int Elemtype;#define Maxsize 5 #define ERROR 0 #define OK 1typedef struct {Elemtype data[Maxsize];int front, rear;int tag; }SqQueue;void InitQueue(SqQueue& Q) //初始化队列 {Q.rear …

春招秋招,在线测评应用得越来越普及

这年代提到测评&#xff0c;很多人都比较熟悉&#xff0c;它有一种根据所选的问题给予合适答案方面的作用。因为不同的测评带来的影响不一样&#xff0c;所以很多人都会关注在线测评的内容有哪些。在校园招聘上面&#xff0c;在线测评也频繁出现了&#xff0c;这让很多人好奇它…

[Linux]线程互斥

[Linux]线程互斥 文章目录 [Linux]线程互斥线程并发访问问题线程互斥控制--加锁pthread_mutex_init函数pthread_mutex_destroy函数pthread_mutex_lock函数pthread_mutex_unlock函数锁相关函数使用示例使用锁的细节加锁解锁的实现原理 线程安全概念常见的线程不安全的情况常见的…

CV面试知识点总结

一.卷积操作和图像处理中的中值滤波操作有什么区别&#xff1f; 1.1卷积操作 卷积操作是一种线性操作&#xff0c;通常用于特征的提取&#xff0c;通过卷积核的加权求和来得到新的像素值。1.2中值滤波 原文&#xff1a; https://blog.csdn.net/weixin_51571728/article/detai…

【Linux】UDP的服务端 + 客户端

文章目录 &#x1f4d6; 前言1. TCP和UDP2. 网络字节序2.1 大小端字节序&#xff1a;2.2 转换接口&#xff1a; 3. socket接口3.1 sockaddr结构&#xff1a;3.2 配置sockaddr_in&#xff1a;3.3 inet_addr&#xff1a;3.4 inet_ntoa&#xff1a;3.5 bind绑定&#xff1a; 4. 服…

【面试经典150 | 矩阵】旋转图像

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;原地旋转方法二&#xff1a;翻转代替旋转 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带…

线性表的链式存储结构——链表

一、顺序表优缺点 优点&#xff1a;我们知道顺序表结构简单&#xff0c;便于随机访问表中任一元素&#xff1b; 缺点&#xff1a;顺序存储结构不利于插入和删除&#xff0c;不利于扩充&#xff0c;也容易造成空间浪费。 二、链表的定义 ①&#xff1a;概念&#xff1a; 用一组任…

Springboot+vue的在线试题题库管理系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的在线试题题库管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的在线试题题库管理系统&#xff0c;采用M&…

PHP 数码公司运营管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 数码公司运营管理系统系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php 数码公司运营管理系统 代码 https://download.csdn.net/download/qq_41…

基于 jasypt 实现spring boot 配置文件脱敏

前言 在项目构建过程中&#xff0c;保护敏感信息的安全性至关重要&#xff0c;为了提高系统的安全性能&#xff0c;我们采用了Jasypt来对配置文件中的敏感信息进行加密处理&#xff0c;以确保系统的机密信息不被轻易泄露。 步骤 添加Maven依赖 首先&#xff0c;我们需要添加…

【kubernetes】kubernetes中的StatefulSet使用

TOC 1 为什么需要StatefulSet 常规的应用通常使用Deployment&#xff0c;如果需要在所有机器上部署则使用DaemonSet&#xff0c;但是有这样一类应用&#xff0c;它们在运行时需要存储一些数据&#xff0c;并且当Pod在其它节点上重建时也希望这些数据能够在重建后的Pod上获取&…