SpringCloud学习记录|day6

学习材料

2024最新SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等)

复习MQ,学过的,应该会轻松一点吧。

RabbitMQ

在这里插入图片描述
交换机没有存储功能,必须和队列进行绑定。

1.虚拟主机:数据隔离

Java客户端

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

1.Work Queues

在这里插入图片描述

2.Fanout,Direct,Topic交换机

队列只能发送给一个消费者,有了交换机就可以实现多个消费者同时消费一个消息。
在这里插入图片描述
在这里插入图片描述

3.如何在java代码中声明队列和交换机

有给定的Queue,Exchange和Binder类或者接口。可以基于注解实现(注解位置是使用消息的地方),或者编写配置类(Config包下)。

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue1"),exchange = @Exchange(name = "hmall.direct", type = ExchangeTypes.DIRECT),key = {"red", "blue"}
))
public void listenDirectQueue1(String msg){System.out.println("消费者1接收到direct.queue1的消息:【" + msg + "】");
}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue2"),exchange = @Exchange(name = "hmall.direct", type = ExchangeTypes.DIRECT),key = {"red", "yellow"}
))
public void listenDirectQueue2(String msg){System.out.println("消费者2接收到direct.queue2的消息:【" + msg + "】");
}
package com.itheima.consumer.config;import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class DirectConfig {/*** 声明交换机* @return Direct类型交换机*/@Beanpublic DirectExchange directExchange(){return ExchangeBuilder.directExchange("hmall.direct").build();}/*** 第1个队列*/@Beanpublic Queue directQueue1(){return new Queue("direct.queue1");}/*** 绑定队列和交换机*/@Beanpublic Binding bindingQueue1WithRed(Queue directQueue1, DirectExchange directExchange){return BindingBuilder.bind(directQueue1).to(directExchange).with("red");}/*** 绑定队列和交换机*/@Beanpublic Binding bindingQueue1WithBlue(Queue directQueue1, DirectExchange directExchange){return BindingBuilder.bind(directQueue1).to(directExchange).with("blue");}/*** 第2个队列*/@Beanpublic Queue directQueue2(){return new Queue("direct.queue2");}/*** 绑定队列和交换机*/@Beanpublic Binding bindingQueue2WithRed(Queue directQueue2, DirectExchange directExchange){return BindingBuilder.bind(directQueue2).to(directExchange).with("red");}/*** 绑定队列和交换机*/@Beanpublic Binding bindingQueue2WithYellow(Queue directQueue2, DirectExchange directExchange){return BindingBuilder.bind(directQueue2).to(directExchange).with("yellow");}
}

4.消息转化器

在这里插入图片描述
放在启动类即可。

@Bean
public MessageConverter messageConverter(){// 1.定义消息转换器Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();// 2.配置自动创建消息id,用于识别不同消息,也可以在业务中基于ID判断是否是重复消息jackson2JsonMessageConverter.setCreateMessageIds(true);return jackson2JsonMessageConverter;
}

5.动手完成

怎么在common包下定义一个rabbitTemple实例,包含addBeforePublishPostProcessors() 和 addAfterReceivePostProcessors()。
有点难办,目前卡在怎么创建rabbiteTemplate哈哈哈

MQ高级部分

1.发送者的可靠性:发送者连接重试,发送者确认。

发送者重连就是配置那里定义一下就好,启动重试机制,重试时间间隔次数等等。

发送者确认就比较麻烦了。需要配置,还需要指定确认机制。(极少数情况下会发生,但不推荐使用。)

2.MQ的可靠性:数据持久化,LazyQueue。

主要还是MQ宕机不丢失消息最重要。

为了解决这个问题,从RabbitMQ的3.6.0版本开始,就增加了Lazy Queues的模式,也就是惰性队列。惰性队列的特征如下:

  • 接收到消息后直接存入磁盘而非内存
  • 消费者要消费消息时才会从磁盘中读取并加载到内存(也就是懒加载)
  • 支持数百万条的消息存储

3.消费者的可靠性:消费者确认机制,失败重试,失败处理,业务幂等,兜底方案。

消费者确认机制最简单的方法就是在配置文件中配置auto就好了。
本地失败重试。
经过本地失败重试后,该怎么处理,1.reject,直接丢弃,2.nack,消息重新入队,3.失败消息发送到指定交换机。

业务幂等–》消息不重复消费(处理方案:消息ID唯一或者业务逻辑上处理)。

兜底方案就是,业务定时主动去查询数据,以确定一致性。

4.延迟消息

实现方案:

  • 死信交换机+TTL
  • 延迟消息插件

作业

配置很简单,但是其中的逻辑,helper和消息转换器等等怎么处理不是很懂。需要再深入学习。

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

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

相关文章

Jupyter Notebook汉化(中文版)

原版jupyter notebook是英文的,想要将其改为中文 在jupyter notebook所在环境输入以下命令 pip install jupyterlab-language-pack-zh-CN打开jupyter notebook,在设置语言中将其设置为中文

Java中的进程与线程(如果想知道Java中有关进程与线程的知识点,那么只看这一篇就足够了!)

前言:在现代计算机系统中,进程和线程是实现并发和高效任务管理的核心概念。理解这两者的区别和联系,不仅对软件开发者至关重要,还能帮助用户更好地理解计算机的工作原理。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容…

12、论文阅读:SpikeYOLO:高性能低能耗目标检测网络

SpikeYOLO:高性能低能耗目标检测网络 前言解释介绍相关工作论文提出的方法网络输入SpikeYOLO架构概述网络输出宏观设计微观设计I-LIF脉冲神经元LIFI-LIF实验代码前言 脉冲神经网络(Spiking Neural Networks, SNNs)具有生物合理性和低功耗的优势,相较于人工神经网络(Artif…

SCCB协议与IIC协议不同

SCCB开始信号与结束信号都与IIC协议的大概一致,这里就不细讲了 开始、结束信号参考:【I2C】IIC读写时序_iic读时序-CSDN博客 SSCB写时序: 即:start phase_1 phase_2 phase_3 stop SCCB读时序: 即&#xff…

推荐IDE中实用AI编程插件,目前无限次使用

插件介绍 一款字节跳动推出的“基于豆包大模型的智能开发工具” 以vscode介绍【pycharm等都可以啊】,这个插件提供智能补全、智能预测、智能问答等能力,节省开发时间 直接在IDE中使用,就不用在网页中来回切换了 感觉还可以,响应速…

2024/10/23 (easycovery密匙激活码为什么这么贵)

2023年12月23号出现的问题又在今天遇到了,fuck. 已知文件删除前原位置路径和最后访问时间,如何恢复文件数据。

SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载

文章目录 前言一、控制器层代码二、服务层代码三、代码亮点分析 前言 SpringBoot的同步excel导出方式中,服务会阻塞直到Excel文件生成完毕,如果导出数据很多时,效率低体验差。有效的方案是将导出数据拆分后利用CompletableFuture,…

oracle数据库---基本查询(单表查询、多表查询、子查询、分页查询、oracle内置函数、行列转换、集合运算)

思维导图 单表查询 数据准备 -- 练习的表如果存在 请先删除 -- 如果不存在直接创建 drop table t_owners;--业主表 create table t_owners (id number primary key,name varchar2(30),addressid number,housenumber varchar2(30),watermeter varchar2(30),adddate date,owner…

docker环境安装mongoDB实现平滑迁移实战

docker环境安装mongoDB实现平滑迁移实战 一、备份原始数据(从别的服务器备份到当前服务器)二、数据迁移三、迁移过程日志打印四、验证迁移数据准确性 一、备份原始数据(从别的服务器备份到当前服务器) 使用mongodump工具对原始mo…

【C++ 算法进阶】算法提升四

数组查询问题 (数组优化) 题目 数组为 {3 , 2, 2 ,3 ,1} 查询为(0 ,3 ,2) 这个查询的意义是 在数组下标0~3这个范围上 有多少个2 (答案为2&…

《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)

PP-OCR: A Practical Ultra Lightweight OCR System论文地址PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System论文地址PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System论文地址PaddleOCR Github OCR工具库 43.5K个star PP-OCRv1由百度…

医院信息化与智能化系统(6)

医院信息化与智能化系统(6) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应的…

Java项目-基于springboot框架的疫苗接种管理系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

PYQT5 简单项目实践

在VSCode编辑器我们通过引入pyqt5,用QTdesigner 实现拖拽实现图形化界面 下面我们实现一个简单项目实践一下吧 效果图: 用法:Python编写逻辑,用pyqt实现界面显示。 功能: 第一行把处理的数据文件拖拽到文本框中第二…

powerdesign字体太小,powerdesign Sql preview字体太小

一。powerdesign字体太小修改兼容性 右键点击PowerDesign软件图标-->点击属性-->兼容性-->点击下图中的红框 打勾“使用此设置修复此程序的缩放问题,而不是设置中的缩放问题” 打勾“替代高DPI缩放行为” 缩放执行改为“系统增强”,确定 重启…

页面中包含多个el-popover,点击其中一个显示,其他的关闭(多个el-popover,click触发,点击都不消失的问题)

问题背景:需求是el-tree中的每个树节点后都有一个按钮,点击触发el-popover的显示,但是由click触发的el-popover,在点击下一个节点时,之前的都不消失。 解决办法:注:最主要的就是:ref"data…

Git_IDEA集成Git

Git_IDEA集成Git 配置 Git 忽略文件 创建忽略规则文件 引用忽略配置文件 定位 Git 程序 初始化本地库 添加到暂存区 提交到本地库 切换版本 创建分支 切换分支 合并分支 解决冲突 配置 Git 忽略文件 创建忽略规则文件 引用忽略配置文件 在 .gitconfig 文件中进行&…

房屋租赁网站毕业设计基于SpringBootSSM框架的计算机毕业设计

计算机毕业设计/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 目录 一、项目背景与目的‌ ‌二、系统需求分析‌ 2.1功能需求 2.2 技术需求 2.3 可执行性 ‌三、系统设计与实现‌ ‌3.1系统架构设计‌: ‌3.2功能模块开发‌: ‌3.3…

AWD的复现

学习awd的相关资料:速成AWD并获奖的学习方法和思考记录- Track 知识社区 - 掌控安全在线教育 - Powered by 掌控者(包含使用脚本去批量修改密码) 在复现之前去了解了以下AWD的相关脚本 资料:AWD批量攻击脚本使用教程-CSDN博客 …

全新子比主题7.9.2开心版 子比主题最新版源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 wordpress zibll子比主题7.9.2开心版 修复评论弹授权 可做付费下载站 含wordpress搭建视频教程zibll子比主题安装视频教程支付配置视频教程,视频都是语音讲解,…