尚品汇-项目目前存在问题、引入MQ(四十二)

news/2024/9/19 4:48:09/ 标签: 数据库

目录:

(1)目前存在的问题

(2)消息队列解决什么问题

(3)消息队列工具 RabbitMQ

(4)搭建mq测试环境service-mq

下面我们先做的是前面后台管理系统商品上下架的没完成的功能,解耦操作,我们前面只做了添加上下架商品只是,写了往ES中添加数据的接口,并没有跟后台管理连接起来,下面完成链接,就用到MQ

(1)目前存在的问题

一:搜索与商品服务的问题

我们思考一下,是否存在问题?

- 商品的原始数据保存在数据库中,增删改查都在数据库中完成。

- 搜索服务数据来源是索引库,如果数据库商品发生变化,索引库数据不能及时更新。

如果我们在后台修改了商品的价格,搜索页面依然是旧的价格,这样显然不对。该如何解决?

这里有两种解决方案:

- 方案1:每当后台对商品做增删改操作,同时要修改索引库数据

- 方案2:搜索服务对外提供操作接口,后台在商品增删改后,调用接口

以上两种方式都有同一个严重问题:就是代码耦合,后台服务中需要嵌入搜索和商品页面服务,违背了微服务的独立原则。

所以,我们会通过另外一种方式来解决这个问题:消息队列

二:订单服务取消订单问题

用户下单后,如果2个小时未支付,我们该如何取消订单

- 方案1:定时任务,定时扫描未支付订单,超过2小时自动关闭

- 方案2:使用延迟队列关闭订单

三:分布式事务问题

如:用户支付订单,我们如何保证更新订单状态与扣减库存 ,三个服务数据最终一致!

(2)消息队列解决什么问题

消息队列都解决了什么问题?

异步

解耦

并行

排队 (流量削峰)

(3)消息队列工具 RabbitMQ

常见MQ产品

- ActiveMQ:基于JMS协议,java语言,jdk

- RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好

- RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会

- Kafka:分布式消息系统,高吞吐量

RabbitMQ基础概念

Broker:简单来说就是消息队列服务器实体

Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列

Queue:消息队列载体,每个消息都会被投入到一个或多个队列

Binding:绑定,它的作用就是把 exchange和 queue按照路由规则绑定起来

Routing Key:路由关键字, exchange根据这个关键字进行消息投递

vhost:虚拟主机,一个 broker里可以开设多个 vhost,用作不同用户的权限分离

producer:消息生产者,就是投递消息的程序

consumer:消息消费者,就是接受消息的程序

channel:消息通道,在客户端的每个连接里,可建立多个 channel,每个 channel代表一个会话任务

五种消息模型

RabbitMQ提供了6种消息模型,但是第6种其实是RPC,并不是MQ,因此不予学习。那么也就剩下5种。

但是其实3、4、5这三种都属于订阅模型,只不过进行路由的方式不同。

基本消息模型:生产者–>队列–>消费者

work消息模型:生产者–>队列–>多个消费者共同消费

订阅模型-Fanout:广播模式,将消息交给所有绑定到交换机的队列,每个消费者都会收到同一条消息

订阅模型-Direct:定向,把消息交给符合指定 rotingKey 的队列

订阅模型-Topic 主题模式:通配符,把消息交给符合routing pattern(路由模式) 的队列

我们项目使用的是第四种!

(4)搭建mq测试环境service-mq

搭建service-mq服务

在service目录下搭建

修改配置pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.atguigu.gmall</groupId><artifactId>service</artifactId><version>1.0</version></parent><artifactId>service-mq</artifactId><version>1.0</version><packaging>jar</packaging><name>service-mq</name><description>service-mq</description><build><finalName>service-mq</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

说明:引入依赖 ,后面会进行引入

 添加配置文件

说明:rabbitmq默认端口5672,注意更改正确

bootstrap.properties

spring.application.name=service-mq
spring.profiles.active=dev
spring.cloud.nacos.discovery.server-addr=192.168.200.129:8848
spring.cloud.nacos.config.server-addr=192.168.200.129:8848
spring.cloud.nacos.config.prefix=${spring.application.name}
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml

 

启动类

package com.atguigu.gmall.mq;@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)//取消数据源自动配置
@ComponentScan({"com.atguigu.gmall"})
@EnableDiscoveryClient
public class ServiceMqApplication {public static void main(String[] args) {SpringApplication.run(ServiceMqApplication.class, args);}
}


http://www.ppmy.cn/news/1520556.html

相关文章

【nnUNet】nnUNet的出现

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 公众号&#xff1a;VTK忠粉 前言 本文分享nnUNet的一些基本情况&#xff0c;以便更好的了解&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&#xff01;…

零基础5分钟上手亚马逊云科技-基础设施即代码开发

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

Excel中.xls和.xlsx文件格式的区别,及C++操作Excel文件

‌文件结构和兼容性‌&#xff1a; XLS是Excel 97-2003版本的文件格式&#xff0c;而XLSX是Excel 2007及以上版本的文件格式。XLS格式是向下兼容的&#xff0c;意味着较新的Excel版本可以打开XLS文件&#xff0c;但较旧的版本无法打开XLSX文件。相反&#xff0c;XLSX格式是向上…

Spring Cloud Gateway之路由配置

Spring Cloud Gateway支持多种方式的路由配置&#xff0c;允许根据各种条件和需求来定义和控制请求的路由行为。以下是Spring Cloud Gateway中常用的路由配置选项和相关功能&#xff1a; 基本路由配置 路由的基本配置通常包括路由ID、目标URI、谓词&#xff08;Predicates&am…

VirtualBox Debian 自动安装脚本

概览 相较于原脚本&#xff08;安装目录/UnattendedTemplates/debian_pressed.cfg&#xff09;更新如下内容&#xff1a; 配置清华镜像源配置仅主机网卡&#xff08;后续只需添加仅主机网卡即可&#xff09;配置Root用户远程登录配置用户sudo组 脚本 debian_pressed.cfg ##…

基于layui实现简单的万智牌生命计数器页面

对照手机App“旅法师营地”的万智牌生命计数器窗口&#xff08;如下图所示&#xff09;&#xff0c;使用layui、jQuery等实现简单的万智牌生命计数器页面。   主要实现的功能如下&#xff1a;   1&#xff09;点击左右两侧的-1、1、-5、5区域更新左右两侧生命值&#xff1…

银河麒麟v10-sp3-x86系统安装k8s-1.30.4

X86-64和arm架构的区别 x86-64架构&#xff1a; 设计理念&#xff1a;x86-64架构起源于Intel的x86架构&#xff0c;并对其进行了64位扩展。这种架构的设计侧重于高性能和灵活性&#xff0c;适合处理复杂的计算任务。 性能特点&#xff1a;x86-64架构的处理器通常提供高性能的…

9 月 7-8 日,Rust China Conf 2024 来啦!

大会介绍 Rust China Conf 2024 由 Rust 中文社区发起主办、知名企业和开源组织联合协办&#xff0c;是年度国内规模最大并唯一的 Rust 线下大型会议&#xff0c;深受 Rust 中文社区开发者与相关企业的喜爱与推崇。自 2020 年起&#xff0c; RustChinaConf 大会已经连续举办四…

利用Spring Boot实现服务降级与熔断机制

利用Spring Boot实现服务降级与熔断机制 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在分布式系统中&#xff0c;服务降级和熔断是保证系统稳定性的重要机制。服务降级是指在系统负载过高或…

快速写一个自己的flutter应用(新手入门)

1、搭建开发环境 详细文档可以参考如下链接&#xff1a;跟着官方文档走就可以了。 1.3 搭建Flutter开发环境 | 《Flutter实战第二版》 (flutterchina.club) 开发 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 我的安装过程&#xff1a; 首先&…

ZooKeeper:浅谈ZooKeeper的Watch机制

ZooKeeper&#xff1a;浅谈对ZooKeeper的认识 一、ZooKeeper的Watch机制是什么 ZooKeeper是用来协调&#xff08;同步&#xff09;分布式进程的服务&#xff0c;提供了一个简单高性能的协调内核&#xff0c;用户可以在此之上构建更多复杂的分布式协调功能。 多个分布式进程通…

docker安装prometheus、grafana监控SpringBoot

1. 概述 最新有一个需求&#xff0c; 需要安装一个监控软件&#xff0c;对SpringBoot程序进行监控&#xff0c; 包括机器上cpu, 内存&#xff0c;jvm以及一些日志的统计。 这里需要介绍两款软件&#xff1a; prometheus 和 grafana prometheus: 中文名称&#xff0c; 普罗米…

[论文笔记]Dimensionality Reduction by Learning an Invariant Mapping

引言 今天带来一篇真正远古(2005年)论文的笔记,论文是Dimensionality Reduction by Learning an Invariant Mapping。 该论文中提出的对比损失(2.1节)可以用于训练嵌入模型。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 降维涉及将一…

LLM代码实现-Qwen(下载和调用)

基本介绍 Qwen 基础模型已经稳定训练了大规模高质量且多样化的数据&#xff0c;覆盖多语言&#xff08;当前以中文和英文为主&#xff09;&#xff0c;Qwen 目前有多个版本&#xff1a;1.8B、7B、14B、72B&#xff0c;同时还开源了 Qwen-VL、Qwen-Audio 两款多模态模型。阿里可…

力扣2503.矩阵查询可获得的最大分数

力扣2503.矩阵查询可获得的最大分数 离线算法 排序 小根堆 将query数组从小到大排序&#xff0c;用小根堆存每个单元格的值从小到大遍历query&#xff0c;如果堆顶元素小于query[i]&#xff0c;弹出&#xff0c;直到全部弹出&#xff0c;总弹出个数为答案 class Solution …

Vue3项目开发——新闻发布管理系统(五)

文章目录 七、登录&注册页面设计开发4、后端接口调用4.1 AXIOS请求工具封装4.2 创建 axios 实例①安装 axios② 封装 axios 模块4.3完成 axios 基本配置5 实现 注册功能5.1 创建接口调用js文件5.2 页面中调用注册方法6 实现 登录功能6.1 创建接口调用js文件6.2 页面中调用登…

【STM32开发】GPIO最全解析及应用实例

目录 【1】GPIO概述 GPIO的基本概念 GPIO的应用 【2】GPIO功能描述 1.IO功能框图 2.知识补充 3.功能详述 浮空输入 上拉输入 下拉输入 模拟输入 推挽输出 开漏输出 复用开漏输出和复用推挽输出 【3】GPIO常用寄存器 相关寄存器介绍 4个32位配置寄存器 2个32位数据寄存器 1个32位…

能大致讲一下Chat GPT的原理吗?

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 话题群精选了三位网友的回答&#xff0c;从不同的角度阐释了Chat GPT的原理。 第一位网友的回答&#xff1a; 不给你扯长篇大论&#…

Gateway的基本概念

1.Gateway概念介绍 1.1Gateway介绍 Gateway网络为微服务架构提供简单且统一的API路由管理&#xff0c;作为系统的统一入口。 Gateway可以为客户端提供统一的服务&#xff0c;例如认证、路由转发、防刷、流量控制、监控日志等。 Gateway是无状态的&#xff0c;不存放数据&…

spring boot 项目 跟 JavaScript 简单 websocket 使用

文章目录 websocket 简绍WebSocket 的优势包括&#xff1a;JavaScript 设置处理事件 Java 服务端设置导jar包创建WebSocket端点EnableWebSocketregisterWebSocketHandlers 实现WebSocket处理器afterConnectionEstablishedafterConnectionClosedhandleTextMessage 注销WebSocket…