- 博客(43)
- 收藏
- 关注
原创 SpringCloud系列--Nacos(4)集群和持久化
1、nacos部署模式介绍Nacos支持三种部署模式单机模式 - 用于测试和单机试用。集群模式 - 用于生产环境,确保高可用。多集群模式 - 用于多数据中心场景。2 数据库说明默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。2.1 单机模式支持mysql在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据
2021-05-26 22:00:08
191
原创 SpringCloud系列--Nacos(3)服务配置中心(分类配置)
1、问题说明在SpringCloud系列–Nacos(2)服务配置中心介绍了Nacos作为配置中心-基础配置。但是在多环境多项目管理中通常会存在以下两个问题:在实际开发中,通常一个系统会准备dev开发环境、test测试环境、prod生产环境。那么如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?一个大型分布式系统会有很多微服务子项目,每个微服务项目都会有相应的开发环境、测试环境、预发环境、正式环境,那怎么对这些微服务配置进行管理呢?今天我们将一起学习 Nacos作为
2021-05-25 22:39:22
355
3
原创 SpringCloud系列--Nacos(2)服务配置中心
1、Nacos作为配置中心-基础配置1.1 概述Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring
2021-05-25 21:40:52
242
原创 SpringCloud系列--Nacos(1)服务注册
1、Nacos简介1.1 为什么叫Nacos?前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service.1.2 什么是 Nacos?Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。一句话:一个更易于构建
2021-05-23 00:47:06
155
原创 SpringCloud系列--Alibaba(1)入门简介
1、为什么出现SpringCloud alibaba?Spring Cloud Netflix 项目进入维护模式。https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-nowThe following Spring Cloud Netflix modules and corresponding starters will be placed into maintenance mode:spring-cloud-
2021-05-22 23:00:02
139
原创 SpringCloud系列--Sleuth(1)分布式请求链路追踪
1、Sleuth概述1.1 为什么会出现这个技术?需要解决哪些问题?在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。1.2 什么是链路追踪?“链路追踪”一词是在2010年提出的,当时谷歌发布了一篇Dapper论文《Dapper,大规模分布式系统的跟踪系统》,介绍了谷歌自研的分布式链路追踪的实现原理,还介绍了他们是怎么低成本实现对应用
2021-05-22 22:05:24
320
2
原创 SpringCloud系列--Stream(3)分组消费与持久化
在前一章节中,我们简述了Spring cloud Stream的案例实现(含生产者和消费者),在这一节中,我们将一起来学习Stream的分组消费与持久化。1、发现问题依照上一章节中的8802,我们clone出一份8803(过程省略,与8802基本一致,除了端口)。启动如下程序:RabbitMQ7001:服务注册8801:消息生产8802:消息消费8803:消息消费当我们运行后,会发现如下两个问题:有重复消费问题消息持久化问题2、消费2.1 现象当8801生产消息到rabb
2021-05-22 15:21:35
340
原创 SpringCloud系列--Stream(2)案例实现
在前一章节中,我们对Stream消息驱动作了概述,在这一节中,我们将一起来学习Stream的案例实现。1、案例说明首先我们需要搭建RabbitMQ环境,RabbitMQ的安装配置可参考官网:Downloading and Installing RabbitMQ然后新建三个模块:cloud-stream-rabbitmq-provider8801(作为生产者进行发消息模块)cloud-stream-rabbitmq-provider8801(作为消息接收模块)cloud-stream-rabbit
2021-05-22 14:04:37
211
1
原创 SpringCloud系列--Stream(1)消息驱动概述
1.什么是Springcloud Stream?Springcloud Stream 是一个构建消息驱动微服务的框架。应用程序通过inputs 或者 outputs 来与Springcloud Stream中binder对象交互。通过配置来绑定(binding),而与Springcloud Stream 的binder对象负责与消息中间件交互。所以我们只需要清楚如何与Stream的binder交互就可以了,屏蔽了与底层MQ交互。通过使用Spring Integration来连接消息代理中间件以实现消息
2021-05-22 12:15:29
199
4
原创 每天一题LeetCode--(PAT)1013 数素数
1、题目令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104 ,请输出 PM 到 PN 的所有素数。输入格式:输入在一行中给出 M 和 N,其间以空格分隔。输出格式:输出从 PM 到 PN 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。输入样例:5 27输出样例:11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8997 101 1032、解题
2020-10-15 08:34:36
135
原创 每天一题LeetCode--(PAT)1012 数字分类
1、题目给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:A1 = 能被 5 整除的数字中所有偶数的和;A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯;A3 = 被 5 除后余 2 的数字的个数;A4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;A5 = 被 5 除后余 4 的数字中最大数字。输入格式:每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,
2020-09-30 08:33:34
146
原创 每天一题LeetCode--(PAT)1011 A+B 和 C
1、题目给定区间 [−231 ,231 ] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。输入格式:输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。输出格式:对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。输入样例:41 2 32 3 4214748
2020-09-28 20:54:13
112
原创 每天一题LeetCode--(PAT)1010 一元多项式求导
1、题目设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1 。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。输入样例:3 4 -5 2 6 1 -2 0输出样例:12 3 -10 1 6 02、解题思路这道题可以从头开始遍历系数
2020-09-27 20:25:05
238
原创 每天一题LeetCode--(PAT)1009 说反话
1、题目给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I Come输出样例:Come I Here World Hello2、解题思路这题读入一行字符
2020-09-26 00:32:06
95
原创 每天一题LeetCode--(PAT)1008 数组元素循环右移问题
1、题目一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1 ⋯AN−1)变换为(AN−M ⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。输出格式:在一行中输出循环右移M位以后的整数序列
2020-09-25 21:51:25
330
原创 每天一题LeetCode--(PAT)1007 素数对猜想
1、题目让我们定义dn 为:dn =pn+1 −pn,其中pi 是第i个素数。显然有d1 =1,且对于n>1有dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<105 ),请计算不超过N的满足猜想的素数对的个数。输入格式:输入在一行给出正整数N。输出格式:在一行中输出不超过N的满足猜想的素数对的个数。输入样例:20输出样例:42、解题思路从2开始遍历到正整数N,并以pm记录前一个素
2020-09-24 18:31:20
210
原创 每天一题LeetCode--(PAT)1005 继续(3n+1)猜想
1、题目卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他
2020-09-23 21:55:22
304
原创 每天一题LeetCode--(PAT)1006 换个格式输出整数
1、题目让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12…n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。输入格式:每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。输出格式:每个测试用例的输出占一行,用规定的格式输出 n。输入样例 1:234输出样例 1:BBSSS1234输入样例 2:23输出样例
2020-09-22 21:57:24
219
原创 每天一题LeetCode--(PAT)1004 成绩排名
1、题目读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩 ... ... ...第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格式:对每
2020-09-21 22:11:39
129
原创 SpringCloud系列--Bus(1)消息总线介绍
1、概述上一篇SpringCloud系列–Config(2)动态刷新中我们实现了SpringCloud Config手动版的自动刷新,并且知道还存在以下问题:假如有多个微服务客户端3355/3366/3377。每个微服务都要执行一次post请求,手动刷新?可否广播,一次通知,处处生效?可否大范围的自动刷新?现在我们来学习SpringCloud Bus,它是SpringCloud Config的增强:广播型的、自动版的自动刷新,是SpringCloud Config的绝配,一起使用:实现分
2020-09-20 21:24:24
1079
原创 每天一题LeetCode--(PAT)1002 写出这个数
1、题目读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100 。输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:yi san wu2、解题思路题目要求将一个任意输入整数各位数字之和相加,然后以拼音形式输出。那么由于是自然
2020-09-20 16:01:39
100
原创 每天一题LeetCode--(PAT)1001 害死人不偿命的(3n+1)猜想
现在打算先把算法笔记两本书再刷一遍(去年已经刷过一遍,当时是用C语言刷的,现在用java),同时也刷PAT的题目: PTA | 程序设计类实验辅助教学平台。等刷完算法笔记,以及刷完PAT的95道题再刷Leetcode~。1、题目卡拉兹(Callatz)猜想:对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个
2020-09-20 11:11:28
187
原创 SpringCloud系列--Config(2)动态刷新
1、背景在前一篇SpringCloud系列–Config(1)分布式配置中心介绍和使用中我们介绍了SpringCloud Config的概念和使用;但是大家可以发现问题随之而来,分布式配置的动态刷新:Linux运维修改GitHub上的配置文件内容做调整;刷新3344,发现ConfigServer配置中心立刻响应;刷新3355,发现ConfigServer客户端没有任何响应;3355没有变化除非自己重启或者重新加载;难道每次运维修改配置文件,客户端都需要重启?今天我们就来了解一下如何实现动态
2020-09-19 19:07:13
227
原创 SpringCloud系列--Config(1)分布式配置中心介绍和使用
1、Config介绍1.1 微服务面临的问题每个微服务都需要一个配置文件,并且,如果有几个微服务都需要连接数据库 那么就需要配4次数据库相关配置,并且S当数据库发生改动,那么需要同时修改4个微服务的配置文件才可以。所以就需要SpringConfig配置中心。1.2 SpringCloud Config介绍SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。SpringCloud Config分为
2020-09-19 18:30:56
176
原创 SpringCloud系列--Gateway(4) Filter的使用
1、简述Filter(过滤)指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。路由过滤器可用于修改传入的HTTP请求或返回的HTTP响应。路由过滤器适用于特定路由。Spring Cloud Gateway内置了多种路由过滤器,它们都由GatewayFilter的工厂类来产生;Spring Cloud Gateway有许多内置的GatewayFilter工厂。Spring Cloud Gateway 的 Filter 的生命周期有两个:“pr
2020-09-19 12:45:45
758
原创 每天一题LeetCode--无重复字符的最长子串
1、题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不
2020-09-19 10:41:16
222
原创 SpringCloud系列--Gateway(3) Predicate的使用
1、简述1.1Route Predicate Factories是什么?Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。Spring Cloud Gateway包括许多内置的Route Predicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配,可以组合多个路由断言工厂,并通过逻辑and进行组合。SpringCloud Gateway创建Route对象时,使用RoutePredicateFacto
2020-09-18 23:03:54
469
原创 SpringCloud系列--Gateway(2)动态路由
在前面SpringCloud系列–GateWay(1)服务网关简介中我们介绍了GateWay的一些概念以及GateWay的入门配置,今天我们来看一下SpringCloud Gateway的动态路由实现和Predicate的使用。1 通过微服务名实现动态路由:默认情况下Gateway会根据注册中心的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能。在SpringCloud系列–GateWay(1)服务网关简介中的入门配置已经介绍了如何集成使用Gateway,这里我们只叙述
2020-09-18 21:48:26
448
原创 每天一题LeetCode--两数相加
1、题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 8072、解题...
2020-09-18 21:09:53
99
原创 SpringCloud系列--Gateway(1)服务网关简介
1、简介Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project Reactor等技术。Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能, 例如:熔断、限流、重试等。SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代Zuul。为了提升网关的性能,SpringCloud Gateway 是基于WebFlux框架实现的,而WebFlux框架底
2020-09-17 22:07:00
268
原创 每天一题LeetCode--两数之和
1、题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]2、解题自己的思路:1、题目要求数组中找出两数之和等于目标值 target的两数所在下标组成的数组。2、采取遍历的方式,
2020-09-17 08:44:31
108
原创 SpringCloud系列--Hystrix(3)服务熔断
1、概述服务熔断类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示。过程:服务的降级->进而熔断->恢复调用链路什么是断路器?一句话,就是家里的保险丝!熔断是什么?熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。在Spring Cloud框架里,熔断机制通过Hystr
2020-09-16 22:10:38
213
原创 SpringCloud系列--Hystrix(2)统一降级处理
1、背景在上一篇SpringCloud系列–Hystrix(1)简介和概念中我们介绍了Hystrix服务降级的概念以及介绍了如何使用Hystrix,但是给出的示例还存在一些问题:降级方法与业务方法写在了一块,耦合度高;每个业务方法都写了一个降级方法,重复代码多。接下来我们介绍如何解决上述两个问题。2、全局的降级方法解决重复代码的问题:配置一个全局的降级方法,所有方法都可以走这个降级方法,至于某些特殊创建,再单独创建方法。集成Hystrix的操作在SpringCloud系列–Hystr
2020-09-15 22:04:56
1005
原创 SpringCloud系列--Hystrix(1)简介和概念
1、Hystrix服务降级1.1、服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的”扇出”,如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的”雪崩效应”。对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级
2020-09-15 08:50:47
273
原创 SpringCloud系列--Ribbon(3)负载均衡算法
负载均衡算法:Rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标,每次服务重启动后Rest接口计数从1开始。
2020-09-13 22:33:00
162
原创 SpringCloud系列--Ribbon(2)核心组件IRule
1、IRule简介IRule:根据特定算法从服务列表中选取一个要访问的服务。IRule类在ribbon-loadbalancer包中:public interface IRule{ /* * choose one alive server from lb.allServers or * lb.upServers according to key * * @return choosen Server object. NULL is returned if
2020-09-13 21:04:19
587
原创 SpringCloud系列--Ribbon(1)介绍和使用
1、Ribbon简介Spring Cloud Ribbon是基于Netflix Ribbon实现的一个基于HTTP和TCP的客户端负载均衡工具。简单地说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询、随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡
2020-09-12 20:58:05
240
原创 SpringCloud系列--eureka(三)服务发现DiscoveryClient
对于注册到Eureka的微服务,可以通过服务发现来获得该服务的信息。下面将介绍如何使用DiscoveryClient获取注册中心上的实例信息。1、Controller中注入DiscoveryClient@RestController@Slf4jpublic class PaymentController { @Resource private PaymentService paymentService; @Resource private DiscoveryCli
2020-09-11 22:58:44
2038
翻译 Spring--RestTemplate简述
1、概述RestTemplate提供了多种便捷访问远程HTTP服务的方法,是一种简单便捷访问Restful服务的模块类,是Spring提供的用于访问Rest服务的客户端模块工具集。在Spring应用中访问REST服务涉及到Spring RestTemplate类的使用。RestTemplate类与Spring中其他 *Template类(如JdbcTemplate,JmsTemplate)类似,提供一种用于执行复杂任务的具有默认行为的简化方法。。RestTemplate类是用于在客户端中同步调用RES
2020-09-10 13:41:56
406
原创 SpringCloud系列--OpenFeign入门
Feign是一个声明式的Web Service客户端,使用Feign能让编写Web Service客户端更加简单,只需创建一个接口并在接口上添加注解即可完成微服务之间的调用。它的使用方法是定义一个服务接口,然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring cloud对Feign进行了封装,使其支持了springmvc标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
2020-09-01 21:17:36
297
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人