自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台Nacos就是 注册中心+配置中心 的组合官网下载Nacos :home (nacos.io)解压安装包,直接运行bin目录下的 startup.cmd命令运行成功后直接访问 http://localhost:8848/nacos

2022-06-02 03:16:33 793

原创 SpringCloud 之 Stream消息驱动 详解

SpringCloud Stream 消息驱动文章目录SpringCloud Stream 消息驱动消息驱动概述设计思想标准MQ:为什么用 Cloud Stream:Stream中的消息通信方式遵循了发布-订阅模式SpringCloud Stream标准流程套路编码API和常用注解案例说明配置RabbitMQ环境三个子模块消息驱动之生产者消息驱动之消费者分组消费持久化消息驱动概述屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型设计思想标准MQ:生产者、消费者之间靠消

2022-05-31 15:58:17 765

原创 SpringCloud Bus 消息总线概述

SpringCloud Bus 消息总线概述RabbitMQ环境配置SpringCloud Bus动态刷新全局广播SpringCloud Bus动态刷新定点通知文章目录SpringCloud Bus 消息总线概述SpringCloud Bus 动态刷新 全局广播先具备RabbitMQ环境演示广播效果设计思路配置测试SpringCloud Bus 动态刷新 定点通知概述分布式自动刷新配置功能Spring Cloud Bus配合 Spring Cloud Config 使用可以实现

2022-05-31 15:50:15 199

原创 SpringCloud 之 Config服务配置 详解

Spring Cloud Config概述Config服务端配置与测试Config客户端配置与测试Config客户端之动态刷新文章目录Spring Cloud Config概述分布式系统面临的配置问题是什么能干嘛与GitHub整合配置Config服务端配置与测试Config客户端配置与测试Config客户端之动态刷新动态刷新概述分布式系统面临的配置问题是什么能干嘛集中管理配置文件不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod

2022-05-24 21:10:13 1987

原创 SpringCloud 之 Gateway网关 详解

Gateway 新一代网关概述简介三大核心概念Gateway工作流程入门配置通过微服务名实现动态路由Predicate的使用Filter的使用文章目录Gateway 新一代网关概述简介是什么能干吗微服务架构中网关在哪里为什么选择Gateway三大核心概念Gateway工作流程官网总结核心逻辑入门配置通过微服务名实现动态路由Predicate(断言)的使用是什么常用的Route PredicateAfter Route Predicate Factory:Cokiee Route Pr

2022-05-23 22:35:19 594 1

原创 SpringCloud 之 OpenFeign服务接口调用

OpenFeign服务接口调用概述OpenFeign使用步骤OpenFeign超时调用OpenFeign日志打印功能文章目录OpenFeign服务接口调用概述OpenFeign 使用步骤架构图:使用步骤OpenFeign超时控制超时设置,故意设置超时演示出错情况OpenFeign默认等待一秒钟,超过后报错OpenFeign默认支持Ribbon配置文件中需要开启OpenFeign客户端超时控制OpenFeign日志打印功能概述OpenFeign 使用步骤架构图:使用步骤

2022-05-19 00:32:27 476

原创 Spring Cloud之 Ribbon负载均衡 与 服务调用

Ribbon 负载均衡 服务调用概述Ribbon负载均衡演示Ribbon核心组件IRuleRibbon负载均衡算法文章目录Ribbon 负载均衡 服务调用概述Ribbon负载均衡演示LB(负载均衡)架构说明POMRestTemplate的作用Ribbon核心组件IRuleIRule负载均衡规则的替换Ribbon负载均衡算法原理概述一句话:Riddon就是 负载均衡+RestTemplate调用Ribbon负载均衡演示LB(负载均衡)集中式LB进程内LB架构说明

2022-05-15 22:30:30 119

原创 Spring Cloud 之 Consul服务注册与发现

Consul服务注册与发现Consul简介安装并运行Consul服务提供者服务消费者三个注册中心异同点文章目录Consul服务注册与发现Consul简介安装并运行Consul服务提供者服务消费者三个注册中心异同点CAPConsul简介功能:服务发现健康检测KV存储多数据中心可视化Web界面安装并运行Consul官网下载并解压使用开发者模式启动,cmd窗口进入软件路径运行 consul agent-dev访问Consul的首页:http://localho

2022-05-11 21:59:23 202

原创 Spring Cloud 之 Eureka服务注册与发现

Spring Cloud封装了 Netflix 公司开发的 Eureka 模块来 实现服务治理在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,所以需要使用服务治理,管理服务与服务之间的依赖关系,可以实现 服务调用、负载均衡、容错等,实现服务发现与注册 Eureka采用了cs的架构设计,Eureka Server作为服务注册功能的服务器,是服务注册的中心。而系统中的其他微服务,使用Eureka的客户端连接到 Eureka Server

2022-05-10 16:28:37 182

原创 商城项目store 学习小结(6)——修改密码

修改密码需要用户提交原始密码和新密码,再根据当前登录的用户进行信息的修改操作文章目录修改密码1. 修改密码-持久层1.1 规划需要执行的sql语句1.2 设计接口和抽象方法1.3 SQL的映射2. 修改密码-业务层2.1 规划异常2.2 设计接口和抽象方法3. 修改密码-控制层3.1 处理异常3.2 设计请求3.3 处理请求4. 修改密码-前端页面1. 修改密码-持久层1.1 规划需要执行的sql语句根据用户的uid修改用户的password值update t_user set passwo

2022-05-02 15:22:59 357

原创 消息队列 RabbitMQ 之 幂等性、优先级队列、惰性队列

9. RabbitMQ 其他知识点文章目录9. RabbitMQ 其他知识点9.1 幂等性9.1.1 概念9.1.2 消息重复消费9.1.3 解决思路9.1.4 消费端的幂等性保障9.1.5 唯一ID + 指纹码机制9.1.6 Redis原子性9.2 优先级队列9.2.1 使用场景9.2.2 如何添加9.3 惰性队列9.3.1 使用场景9.3.2 两种模式9.3.3 内存开销对比9.1 幂等性9.1.1 概念用户对于统一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生副作

2022-04-28 21:57:10 1945 1

原创 消息中间件 RabbitMQ 之 发布高级确认 详解

在生产环境中由于一些不明原因,导致RabbitMQ重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复于是,我们开始思考,如何才能进行RabbitMQ的消息可靠投递呢?特别是在这样比较极端的情况下,RabbitMQ集群不可用的时候,无法投递的消息该如何处理呢?

2022-04-28 00:37:25 2559

原创 消息中间件 RabbitMQ 之 延迟队列 详解&实战

延迟队列,队列内部是有序的,最重要的特性就体现在它的延迟属性上。延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。简单来说,延迟队列就是用来存放需要在指定时间被处理的元素的队列。延迟队列属于死信队列的一种,属于消息TTL过期的情况。

2022-04-26 14:50:15 3674 3

原创 消息中间件 RabbitMQ 之 死信队列的介绍及实战

死信,顾名思义就是无法被消费的消息。字面意思可以这样理解,一般来说,producer(生产者)将消息投递到 broker 或者直接到 queue(队列)里了。consumer(消费者)从queue中取出消息后进行消费,但某些时候==由于特定的原因导致 queue 中的消息无法被消费==,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。应用场景:为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制。当消息消费发生异常时,将消息投入死信队列中。比如:用户

2022-04-23 23:38:28 1171 2

原创 消息中间件 RabbitMQ 之 交换机类型及其详解

RabbitMQ 消息传递模型的核心思想是:生产者生产的消息从来不会直接发送到队列。实际上,通常生产者都不知道这些消息发送到了哪些队列中。相反,生产者只能将消息发送到交换机(exchange)。交换机的工作内容非常简单,一方面它接受来自生产者的消息,另一方面将这些消息推入队列。交换机必须知道如何处理收到的消息。是应该把这些消息放入特定队列还是说放到许多队列,或者直接丢弃,这就由交换机的类型决定。

2022-04-23 14:43:19 1714

原创 商城项目store 学习小结(5) ——注册的前端页面

3.9 注册—前端页面1.在 register 页面中编写发送请求的方法,通过前端的点击事件来完成。​ 选中对应的按钮,使用jquery的 ($(“选择器”)),再去添加点击的时间。​ $.ajax() 函数发送异步请求。2.jquery 封装了一个函数,称之为 $.ajax() 函数,通过对象调用ajax函数,可以异步加载相关的请求。依靠的是 JavaScript提供的一个对象 XHR(XmlHttpResponse),封装了这个对象3.ajax使用方式需要传递一个方法体作为方法的参数来使.

2022-04-18 21:01:54 755

原创 消息中间件 RabbitMQ 之 发布确认

4. 发布确认4.1 发布确认原理生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上的消息都会被指派一个唯一的 ID(从一开始),一旦消息被投递到所有匹配的队列后,broker 就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了如果消息和队列是持久化的,那么确认消息会在将消息写入磁盘后发出,broker 回传给生产者的确认消息中 ,delivery-tag 包含了确认消息的序列号,此外 broker 中也可以设置

2022-04-18 20:01:37 121

原创 消息中间件 RabbitMQ 之 持久化操作

3.3 RabbitMQ 持久化3.3.1 概念之前的消息应答部分已经看到了如何处理消息不丢失的情况,但是如何保障当 RabbitMQ服务停掉之后消息生产者发送过来的消息不丢失呢?默认情况下,RabbitMQ退出或者由于某种原因崩溃的时候,它会忽视队列和消息,除非告知它不要这样做。确保消息不会丢失需要做两件事:将队列和消息都标记为持久化。3.3.2 队列实现持久化之前创建的队列都是非持久化的,RabbitMQ如果重启,该队列就会被删掉,如果要队列实现持久化,需要在声名队列的时候把 dura

2022-04-17 20:15:29 1799

原创 消息中间件 RabbitMQ 之 工作队列(2)—消息应答

3.2 消息应答3.2.1 概念消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并且只完成了一部分,如果它突然挂掉了,会发生什么情况?RabbitMQ一旦向消费者传递了一条消息,就会立即将该消息标记为删除。在这种情况下突然有个消费者挂掉了,将会丢失正在处理的信息,以及后续应该发送给该消费者的信息,因为该消费者无法接收到为了保证消息在发送过程中不丢失,RabbitMQ引入消息应答机制消息应答机制指,消费者在接收到消息并且处理了该消息之后,告诉RabbitMQ它已经处理了,

2022-04-16 21:58:57 1036

原创 商城项目store 学习小结(4)——注册的控制层创建

3.7 注册控制层3.7.1 创建响应响应分为三部分数据:状态码、状态描述信息、响应数据可以将这一固定不变的部分功能封装进一个类中,将这个类作为方法返回值,返回给前端浏览器@Data@NoArgsConstructorpublic class JsonResult<E> implements Serializable { /** * 状态码 */ private Integer state; /** * 描述信息

2022-04-16 14:59:07 310

原创 商城项目(store)学习小结(三)——注册登录的业务层创建

3.5 创建业务层-注册3.5.1 规划异常1.用户名在进行注册时可能会产生用户名被占用的错误,抛出一个异常:使用Java原生的异常处理会很笼统。比如RuntimeException异常,如果抛出该异常,只能代表程序在运行过程中产生了一个误操作,这其中有很多种情况导致这个异常,比如用户名错误、密码错误、被占用或者插入时数据库宕机这些情况所以在使用时开发者无法第一时间定位到错误的类型,在解决时效率会降低。使用另一种思路,将用户操作时产生的任何异常作为RuntimeException异常的

2022-04-16 12:02:09 676

原创 商城项目(store)学习小结(2)——注册登录的持久层创建

3.2 创建持久层3.2.1 准备工作在src/test/java下的com.cy.store.StoreApplicationTests测试类中编写并执行“获取数据库连接”的单元测试,以检查数据库连接的配置是否正确。@Autowiredprivate DataSource dataSource;@Testpublic void getConnection() throws Exception { System.out.println(dataSource.getConnection

2022-04-13 17:25:36 819

原创 商城项目(store)学习小结(1)

项目学习小结(store(商城项目))1. 项目分析在开发某个项目之前,应先分析这个项目中可能涉及哪些种类的数据。本项目中涉及的数据:用户、商品、商品类别、收藏、订单、购物车、收货地址。关于数据,还应该要确定这些数据的开发顺序。设计开发顺序的原则是:先开发基础、简单或熟悉的数据。以上需要处理的数据的开发流程是:用户-收货地址-商品类别-商品-收藏-购物车-订单。在开发每种数据的相关功能时,先分析该数据涉及哪些功能。在本项目中以用户数据为例,需要开发的功能有:登录、注册、修改密码、修改资

2022-04-13 14:53:12 451

原创 消息中间件 RabbitMQ 之 Work Queues(工作队列)

Work Queues 工作队列工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成的情况。相反我们安排任务在之后执行。把任务封装为消息并将其发送给到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。3.1 轮训分发消息​ 在这个案例中我们会启动两个线程,一个消息发送线程,我们来看看这两个工作线程是如何工作的3.1.1 抽取工具类将单一不变的操作提取出来,成为工具类,方便使用代码如下:packag

2022-04-12 17:31:03 156

原创 Hello World 一个简单的Java程序来介绍RabbitMQ的使用

Hello world在这一部分中,将使用 Java编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。并介绍其中的一些细节。在下图中,P 是生产者,C 是消费者。中间的框是一个队列,RabbitMQ代表使用者保留的消息缓冲区。2.1 依赖 <!--rabbitmq依赖--> <dependency> <groupId>com.rabbitmq</groupId>

2022-04-11 18:23:48 1177

原创 消息队列 RabbitMQ的介绍及安装

1.2 RabbitMQ1.2.1 RabbitMQ 的概念RabbitMQ 是一个消息中间件:接收并转发消息。​ 你可以把它当作一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的包裹送到收件人那里。按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件​ RabbitMQ 与快递站的主要区别在于,不处理快件,而是接收、存储、转发消息数据1.2.2 四大核心概念生产者产生数据并发送消息的程序交换机交换机是 RabbitM

2022-04-11 00:46:25 1872

原创 链表 Linked List——单链表的讲解和实现

3.1 链表(Linked List)介绍链表是有序的列表,在逻辑结构上是有序的,但它在内存中的物理结构是乱序的 小结:链表是以节点的方式来存储,属于链式存储每个节点包含 data域:存储数据,next域:指向下一个节点链表的各个节点不一定是连续存储链表分为 带头结点的链表 和 不带头结点的链表,根据实际需求确定3.2 单链表的应用实例使用带head头的单向链表实现:​ 水浒英雄排行榜管理,完成对英雄的增删改查操作​ 步骤:第一种方法在添加英雄时

2022-04-10 16:36:11 543

原创 消息队列 MQ 简介

1.1 MQ 的相关概念1.1.1 什么是MQ​ MQ(message queue),从字面意思来看,本质是一个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。​ 在互联网架构中,MQ 是一种非常常见的上下游 “逻辑解耦 + 物理解耦” 的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ ,不用依赖其他服务。1.1.2 为什么要用 MQ (作用、功能)1. 流量消峰举例:​ 如果订单系统

2022-04-10 00:51:04 450

原创 队列——使用数组实现环形队列(2)

2.2.4 数组模拟环形队列对前面的数组模拟队列的优化,充分利用数组,因此将数组看作为一个环形的。(通过取模的方式实现即可)分析说明尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,判断队列满的条件为:(rear+1)%maxSize ==front 表示队列已满rear == front 表示队列为空分析示意图:思路如下:front 变量的含义做一个调整:front 指向队列的第一个元素,也就是说arr[front] 就是队列的第一个元素,f

2022-04-08 22:30:07 353

原创 队列——使用数组实现队列(1)

2.2 队列(使用数组实现队列)2.2.1 队列的一个使用场景银行排队的案例:先到先排队,先处理业务2.2.2 队列介绍 队列是一个有序列表,可以用数组或是链表来实现 遵循先进先出的原则。即:先进入队列的数据,要先取出,后存入的要后取出 示意图: rear指向队列尾部的数据,front指向队列头部数据的前一位,因为队列从0开始,所以队列的最后一个位置为队列的最大容量 maxSize-1 2.2.3 数组模拟队列思路 队列本身是有序.

2022-04-07 22:45:23 916

原创 稀疏数组 sparsearray

2.1.1 先看一个实际的需求 编写的五子棋中,有存盘退出和续上盘的功能 使用二维数组记录棋盘 分析问题: 因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据 由此提出 稀疏数组 的概念2.1.2 稀疏数组 基本介绍当一个数组中大部分元素为0或者为同一个值时,可以使用稀疏数组来保存该数组稀疏数组的处理方法: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素的行列信息以及值记录在一个小规模的数组中,从而缩小程序的规模

2022-04-07 01:11:08 69

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除