- 博客(664)
- 资源 (21)
- 问答 (1)
- 收藏
- 关注
原创 谷粒商城实战笔记-285~290-分布式事务
CAP定理,由加州大学伯克利分校的教授埃里克·布鲁尔(Erich Brewer)提出,并由塞思·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)证明,是分布式系统设计中的一个基础理论。这个理论指出,在一个分布式系统中,不可能同时实现一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三个特性。因此,分布式系统必须在这三个特性中做出权衡。
2024-09-03 15:37:17
756
原创 谷粒商城实战笔记-284-商城业务-分布式事务-本地事务隔离级别&传播行为等复习
ACID是Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的缩写,这是事务处理的基本原则。事务的传播性是指在一个事务方法中调用另一个事务方法时,如何处理事务边界的问题。为了实现事务的隔离性,数据库支持不同的隔离级别,以控制事务之间可能产生的并发副作用。:读未提交是最弱的隔离级别,它允许事务读取其他事务尚未提交的数据。:序列化是最强的隔离级别,它完全消除了脏读、不可重复读和幻读。此外,事务的传播性是指在多层调用中如何继承事务的行为。
2024-08-29 16:34:20
704
原创 谷粒商城实战笔记-282~283-商城业务-订单服务-提交订单的问题
Services Panel 是 IntelliJ IDEA 提供的一个功能模块,旨在帮助开发者更好地管理和监控应用程序中的服务组件。它位于 IDE 的右侧面板中,可以方便地访问一系列与项目相关的服务和工具。
2024-08-29 15:40:34
1186
原创 谷粒商城实战笔记-281-商城业务-订单服务-锁定库存
创建订单时,有一个非常重要的步骤,就是锁定库存,或者称之为预占库存。尽管还没有卖出去,但是因为订单已经创建,所以要确保这个订单对应商品是有库存的,就需要提前告知库存服务,需要准备多少库存,库存服务就会在当前库存基础上减去一部分库存,避免超卖。
2024-08-29 14:28:26
749
原创 谷粒商城实战笔记-279~280-商城业务-订单服务-订单验价-保存订单
在保存订单之前,代码设置了订单的创建和修改时间,这有助于记录订单的创建时间,并且在需要时可以用于跟踪订单的最后更新时间。:对于订单项的保存,使用了批量保存方法,这有助于提高性能,尤其是在处理包含大量订单项的订单时。:除了价格信息,该方法还设置了订单的删除状态,这是一个好的做法,确保订单实体的完整性。方法是订单处理流程中的一个关键步骤,确保了订单价格的准确性和订单信息的完整性。这一节的主要内容生保存订单数据,把订单头和订单明细的数据保存到数据库中。的私有方法,主要用于保存订单及其相关订单项到数据库中。
2024-08-28 09:57:05
528
原创 谷粒商城实战笔记-277~278-商城业务-订单服务-构造订单和订单明细
方法负责根据当前登录用户的信息和提交的订单数据,构建一个新的订单实体,并填充所有必要的属性,为订单的创建和保存做准备。:将解析出的收货地址信息设置到订单实体的相关属性中,包括收货人姓名、电话、邮编、省市区信息和详细地址。(可能是一个枚举值,表示新创建的订单),自动确认天数为7天,确认状态为0(可能表示未确认)。:方法最后返回构建好的订单实体对象,这个对象可以被用于后续的订单保存操作。获取当前登录用户的信息,这些信息将用于设置订单的会员ID、用户名等。的私有方法,其主要作用是构建一个新的订单实体(
2024-08-28 09:25:25
339
原创 谷粒商城实战笔记-275~276-商城业务-订单服务-订单确认页完成
这段代码主要是在使用 Redis 来实现一个基于 Lua 脚本的原子性操作。用于验证并删除一个订单令牌(:删除了token,前端再次提交订单无效,如果第一次创建订单失败,token又被删除了该怎么办?:后端创建失败,给前端一个反馈,前端重新去购物车点击“去结算”,重新走生成订单的流程。这三个步骤是一个原子操作,需要使用lua脚本。这一节是订单提交的业务,核心是防止重复提交,),以确保每个订单只能被处理一次。) 中存储的值是否与提供的参数 (首先,定义了一个 Lua 脚本。,其功能是检查给定的键 (
2024-08-28 08:48:14
1344
原创 谷粒商城实战笔记-274-商城业务-订单服务-接口幂等性讨论
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。
2024-08-27 10:42:50
1005
原创 谷粒商城实战笔记-269~271-商城业务-订单服务-bug修改
注意运费是库存服务提供的,实际上应该是物流服务比如运输服务提供的,或者是第三方物流平台提供的。这一节,模拟运费的计算,根据用户选择的地址,查询到用户信息,根据手机号码模拟一个运费。查询库存信息时,因为要跨服务查询,索引最佳实践是批量查询,不要一次次的查询。并没有复现这个bug。
2024-08-27 10:24:42
532
原创 谷粒商城实战笔记-265~268-商城业务-订单服务-订单确认页模型抽取和数据填充-Feign丢失数据问题
在请求多个信息时,我们使用了多线程,这就带来了一个问题,前面我们解决Feign丢失请求头的方案在多线程下,不再有效,丢失请求头的问题再度出现。在请求多个信息时,我们使用了多线程,这就带来了一个问题,前面我们解决Feign丢失请求头的方案在多线程下,不再有效,丢失请求头的问题再度出现。:在Feign远程调用过程中,创建了一个新的request,这个新request没有任何请求头,没把浏览器携带的请求头复制到新的请求头中。这意味着,当另一个线程处理请求时,它不会访问到前一个线程的请求数据,包括请求头。
2024-08-27 08:27:37
1048
原创 谷粒商城实战笔记-问题记录-Feign异步调用丢失请求头问题
在请求多个信息时,我们使用了多线程,这就带来了一个问题,前面我们解决Feign丢失请求头的方案在多线程下,不再有效,丢失请求头的问题再度出现。
2024-08-27 08:02:48
684
原创 谷粒商城实战笔记-问题记录-Feign远程调用丢失请求头问题
Feign远程调用过程中,由于创建了一个新的request,这个新request没有携带任何请求头,包括原本在浏览器请求中自动携带的cookie,导致。:在Feign远程调用过程中,创建了一个新的request,这个新request没有任何请求头,没把浏览器携带的请求头复制到新的请求头中。:由于新request没有携带任何请求头,因此丢失了原本在浏览器请求中自动携带的cookie。通过这种方式,即使在Feign远程调用过程中创建了新的请求,这个新的请求也会携带原来的。对象,从而获取到当前请求的请求头。
2024-08-27 07:29:50
588
原创 谷粒商城实战-264-商城业务-订单服务-订单登录拦截
preHandle: 在控制器方法执行之前被调用。postHandle: 在控制器方法执行之后,但在视图渲染之前被调用。: 在整个请求处理完成之后被调用,包括视图渲染。提供了一个强大的机制来扩展 Spring MVC 应用程序的功能。通过实现这些方法,你可以轻松地添加诸如身份验证、日志记录、性能监控等功能,而无需修改现有的控制器代码。
2024-08-26 16:25:00
845
原创 谷粒商城实战笔记-261~262-商城业务-订单服务-页面环境搭建-SpringSession
将订单涉及的4类页面静态资源上传到nginx的order目录下的4个目录。访问订单列表,原因是order服务没有配置nacos注册中心。比如支付页面模板html中,js的资源地址前要加上。的访问都转发到订单服务。
2024-08-26 11:17:45
493
原创 谷粒商城实战笔记-260-商城业务-消息队列-可靠投递-消费端确认
消费者端的确认机制(ACK/NACK)是RabbitMQ中一种重要的特性,它允许消费者告知Broker它们是否成功处理了接收到的消息。basic.ack:当消费者成功处理了一条消息时,它可以发送一个basic.ack(肯定确认)给Broker,指示这条消息可以安全删除。// deliveryTag是消息的唯一标识符,multiple参数设为false表示仅确认这一条消息如果消费者无法处理消息,它可以发送一个basic.nack(否定确认)。这可以让Broker重新分发消息,或者直接丢弃它。
2024-08-26 09:57:54
787
原创 谷粒商城实战笔记-259-商城业务-消息队列-可靠投递-发送端确认
RabbitMQ的消息确认机制主要包括以下几种:发布者确认(Publisher Confirm):在发布者和代理之间建立一个确认协议。当发布者发送一条消息到代理时,代理会返回一个确认信息给发布者。如果确认信息是positive ack(即确认收到),那么表示消息已经被代理成功接收;如果是negative ack(即拒绝或丢失),则表示消息没有被正确处理。返回回调(Return Callback):当发布者发送的消息无法路由到任何队列时,代理会将该消息返回给发布者。
2024-08-26 07:43:14
953
原创 谷粒商城实战笔记-255~256-商城业务-消息队列-SpringBoot整合RabbitMQ
综上所述,这三个方法分别用于创建交换机、队列和绑定关系。这些操作通常在测试环境中使用,以确保RabbitMQ的基本配置正确无误。这意味着你可以通过在application.properties或application.yml文件中定义。这三个方法都是测试方法,分别用于创建交换机、队列以及绑定关系。自动配置:当引入了AMQP场景后,Spring Boot会自动加载。我们通过单元测试来试用RabbitmMq的Java客户端。前缀的属性来设置RabbitMQ的相关参数。属性配置:所有的属性都通过。
2024-08-24 10:26:25
606
原创 谷粒商城实战笔记-252~254-商城业务-消息队列-Exchange-三种type的使用
这一节的内容是实操-direct exchange的信息发送。
2024-08-24 09:01:53
450
原创 谷粒商城实战笔记-251-商城业务-消息队列-Exchange类型
它的基本思想是将接收到的所有消息广播给与之关联的所有队列,类似于子网内的广播通信方式。如果一个队列绑定了交换机,并且要求路由键为"dog",那么只有当routing key标记为"dog"的消息才会被转发到这个队列,而不会转发"dog.puppy"或"dog.guard"等其他不完全匹配的消息。无论消息的 routing_key 是什么,只要消息被发送到了这个交换机,它就会被转发到所有的队列中去。图中展示了Fanout Exchange的工作原理,它将所有发送到该交换机的消息都转发到所有绑定的队列上去。
2024-08-24 06:46:20
872
原创 谷粒商城实战笔记-250-商城业务-消息队列-RabbitMQ安装-Docker
RabbitMQ 是一个开源的消息代理软件,广泛用于实现异步通信和应用程序解耦。使用 Docker 容器化技术可以简化 RabbitMQ 的安装和部署过程。以下是使用 Docker 安装 RabbitMQ 的详细步骤。
2024-08-23 17:58:14
749
原创 谷粒商城实战笔记-249-商城业务-消息队列-RabbitMQ工作流程
一条消息在RabbitMQ中从生产者(Producer)到消费者(Consumer)的全过程涉及多个步骤和组件。RabbitMQ是一个流行的开源消息代理软件,它实现了高级消息队列协议(AMQP)。
2024-08-23 17:25:09
745
原创 谷粒商城实战笔记-248-商城业务-消息队列-RabbitMQ简介
AMQP就是这样一个标准,它是一种开放的协议,定义了消息如何在网络上传输。在这个场景中,JMS就像是这家咖啡店内部使用的通信规范或规则手册,它规定了各个门店应该如何发送订单请求以及总部应该如何接收这些请求。根据您提供的文件内容,这是一个比较JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol)的表格。根据您提供的文件内容,这是一段关于Spring框架对消息队列(MQ)的支持以及市场上常见的消息队列产品的介绍。
2024-08-23 17:08:36
747
原创 谷粒商城实战笔记-247-商城业务-消息队列-MQ简介
通过这种方式,订单系统不需要知道库存系统的内部实现细节,也不需要等待库存系统处理完成,从而实现了两个系统之间的解耦。这种场景主要用于处理突发的流量高峰,尤其是对于一些促销活动、秒杀活动等可能导致系统压力剧增的业务。通过这种方式,消息队列帮助系统平滑地处理流量高峰,防止因流量突增导致的服务质量下降或系统崩溃,同时也为用户提供了更稳定的服务体验。在这个场景中,消息队列作为不同应用系统之间的中间件,帮助实现系统间的松耦合,提高系统的模块化和可扩展性。消息队列(MQ)的第二个应用场景是应用解耦。
2024-08-23 16:47:59
757
原创 谷粒商城实战笔记-244~247-商城业务-购物车-获取&合并购物车
① 加购② 用户登录后,在线购物车合并临时购物车数据③ 删除购物车数据④ 选中或者取消选中购物车中的商品⑤ 购物车中的商品的数量增减。
2024-08-23 15:43:32
890
原创 谷粒商城实战笔记-243-商城业务-购物车-RedirectAttribute-解决重复提交
参考京东的做法,我们可以在用户点击加购请求后不直接返回success页面,而是让浏览器重定向到一个新的地址,这个地址会返回sucess页面,但是这个地址不会有其他的业务逻辑。避免了表单重复提交的问题,因为浏览器会对相同的 GET 请求进行缓存,而重定向请求会生成一个新的请求,因此不会触发重复提交。会导致一个问题,如果用户刷新这个页面,就会重复提交加购请求,这个商品会被重复加购,导致不好的客户体验。这段代码展示了如何处理购物车商品添加的请求,并防止重复提交。用户刷新页面,并不会导致加购的重复提交。
2024-08-23 15:12:11
1115
原创 谷粒商城实战笔记-239-商城业务-购物车-ThreadLocal用户身份鉴别
在 Spring MVC 中,接口提供了一种在控制器方法执行前后添加逻辑的方法。通常,拦截器可以用来做一些横切关注点的事情,例如认证、授权、记录日志等。preHandle:在控制器方法执行前调用,可以用来做一些预处理工作,如验证用户身份等。postHandle:在控制器方法执行后,但在视图渲染之前调用,可以用来修改模型数据或添加响应头等。:在整个请求处理完成之后调用,即在视图渲染之后调用,可以用来释放资源或记录异常等。
2024-08-23 11:28:17
761
原创 谷粒商城实战笔记-ThreadLocal的原理
这些变量在每个线程中都有一个独立的副本,因此对这些变量的操作不会影响到其他线程中的相应副本。这对于避免多线程环境下的数据竞争和同步问题非常有用。是 Java 中的一个实用工具类,它提供了线程局部变量。方法时,会将当前线程与该值关联起来,并保存在当前线程的。在这个例子中,两个线程分别设置了不同的值到同一个。类本身并不直接存储线程局部变量的值,而是通过。变量,但每个线程只能看到自己设置的值。方法时,返回的是当前线程中与该。用来存放线程局部变量。的基本原理和实现方式。
2024-08-23 10:04:14
618
原创 谷粒商城实战笔记-236~238-商城业务-购物车-环境搭建
这一节的内容主要分析购物的业务逻辑和设计存储购物车的选型及数据结构。①把整个购物车封装为一个对象CartVo。
2024-08-22 12:29:03
1050
原创 谷粒商城实战笔记-233~235-商城业务-认证服务-单点登录流程-原理
包含以下三节的内容:单点登录的原理总结,假设有以下三个服务:单点登录的流程如下:
2024-08-22 07:26:20
300
原创 谷粒商城实战笔记-232-商城业务-认证服务-框架效果演示-xxl-sso-徐雪里
相信大多数人都学习或者使用过,一个非常优秀的分布式任务调度平台,其作者是许雪里,xxl是他名字的拼音首字母。要实现单点登录,即上面三个网站中任一个网站登录成功后,其他网站不用登录即可获得用户登录的效果。和上一步操作相同,但是端口是8081,打开启动配置界面,在配置界面配置环境变量。注意,虽然启动的是同一个启动类,但是因为端口不同,实际上是启动了两个服务。这就是单点登录的效果,对于多个域名完全不同的系统,只需要登录一次即可。,同上面一样,因为没有登陆过,所以也会重定向到单点登录服务的登录界面。
2024-08-21 14:00:21
1041
原创 谷粒商城实战笔记-231-商城业务-认证服务-单点登录简介
图片中有多个系统,例如"谷粒学院-在线教育"、"谷粒商城-电商系统"等,如果它们都实现了单点登录,用户只需要在其中一个系统登录,就可以访问所有这些服务,而不需要在每个服务上都单独登录。如果它们都实现了单点登录,用户只需要在其中一个系统登录,就可以访问所有这些服务,而不需要在每个服务上都单独登录。他们都是尚硅谷的系统,每个系统的域名不同,由于浏览器的限制,不同的域名不可以共享cookie,按照之前的方案,三个系统要分别登录,用户体验差。前面的课程中,学习了单系统间如何跨父子域名、跨服务解决登录问题,
2024-08-21 12:37:12
458
原创 谷粒商城实战笔记-229-商城业务-认证服务-SpringSession原理
Spring Session 是 Spring Framework 的一部分,它提供了一种灵活的方式来管理分布式环境中的 HTTP Session。Spring Session 的核心思想是将 Session 数据从单个应用服务器中抽离出来,存储在一个集中的地方,如 Redis、Memcached 或数据库等,从而解决了分布式环境中 Session 共享的问题。下面将结合源码简要介绍 Spring Session 的关键组件和工作原理。
2024-08-20 14:59:19
706
原创 谷粒商城实战笔记-228-商城业务-认证服务-自定义SpringSession完成子域session共享
浏览器端跨域名cookie不能共享服务端跨服务session不能共享我们已经在上一节解决了扩服务session共享的问题,即利用将session存储在redis中,所有有需要的服务都可以从redis中获取session。这一节主要是解决① 浏览器端跨域名cookie不能共享的问题② session在redis中的序列化方式,默认是jdk的序列化,改为json序列化。
2024-08-20 14:49:30
840
2
原创 谷粒商城实战笔记-227-商城业务-认证服务-SpringSession整合
Spring Session 是 Spring Framework 的一部分,它提供了一个抽象层来管理分布式环境中的 HTTP Session。Spring Session 的主要目的是使 Session 管理更加灵活和可扩展,特别是在分布式环境中。它允许将 Session 数据存储在多种后端存储系统中,如 Redis、Memcached、数据库等,从而避免了单点故障和横向扩展的问题。可插拔的存储层:可以很容易地切换 Session 的存储方式,如从内存切换到 Redis。无状态服务。
2024-08-20 14:35:46
934
原创 谷粒商城实战笔记-225~226-商城业务-认证服务-分布式session不共享不同步问题
如果使用集中式的 Session 存储方案,例如内存中的 Map 或者文件,那么随着服务实例的增加,这种方案将不再适用,因为新的实例无法自动获取其他实例的 Session 信息。分布式系统的每个服务实例都是独立运行的,并且为了提高可伸缩性和容错性,通常设计为无状态的。未被替换,再次点击这个超链接,不会跳转到登录界面,说明后台认为已经登录成功,直接重定向到首页了,但是首页没有拿到用户信息。例如,如果 Cookie 的。,正常情况下应该跳转到Auth模块的login页面,登录成功后,会重定向到首页,超链接。
2024-08-20 12:47:53
1052
原创 谷粒商城实战笔记-问题记录-首页没有显示用户名-跨域session问题
未被替换,再次点击这个超链接,不会跳转到登录界面,说明后台认为已经登录成功,直接重定向到首页了,但是首页没有拿到用户信息。父域名获取不到子域名的cookie,这个可以在后台定制cookie,把域名的cookie设置为父域名。,正常情况下应该跳转到Auth模块的login页面,登录成功后,会重定向到首页,超链接。但是实际开发过程中出现了这样一个问题,登录成功后,超链接。即便如此,首页在渲染时仍然拿不到用户信息,因为用户。梳理登录流程,看看问题可能出现在哪个环节。任务服务的内存中,首页所在的。
2024-08-20 12:46:28
365
原创 AI提效实例-借助AI高效生成Markdown格式的超链接
通过使用通义千问这样的AI工具,我们可以极大地提高工作效率,减少重复劳动,确保文档格式的一致性和准确性。这种方式特别适合处理大量的数据整理工作,不仅节省了时间,还能避免人为错误,让我们的工作更加高效和专业。
2024-08-19 20:06:31
1043
2.Hadoop-lzo.7z lzo源码+包
2021-11-21
squirrelsqlclientxz.7z
2021-06-01
hadoop2.7.5-Windows版.zip
2021-04-15
java多线程设计模式
2016-01-23
空间数据分析与R实践
2016-01-05
android界面卡死,光标还在闪烁,没有ANR,百分百必现,求大神解救?
2020-04-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人