自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RestTemplate与Ribbon整合原理(基于spring-cloud-starter-alibaba-nacos-discovery、LoadBalancerClient负载均衡接口)

文章目录1. RestTemplate2. 用法2.1 注册RestTemplate的Bean2.2 @LoadBalanced语法3. 负载均衡策略1. RestTemplateRestTemplate是Spring Web模块提供的一个基于Rest规范提供Http请求的工具。Ribbon是springcloud中客户端负载均衡的组件。也可以使用其他的负载均衡策略组件,类似Eurka。我们在微服务架构中,往往通过RestTemplate发送RPC请求,然后通过Ribbon做客户端负载均

2021-08-31 20:27:27 1168

原创 【SpringCloud】springcloud中RestTemplate三种使用方式(LoadBalancerClient、负载均衡、Nacos、Ribbon )

参考SpringCloud学习笔记(三)–springcloud中RestTemplate三种使用方式Spring Cloud 进阶之路 – 使用 RestTemplate 的三种方式及源码查看Ribbon负载均衡配置策略使用DiscoverClien和、LoadBalancerClient配合RestTemplate完成微服务调用的步骤...

2021-08-31 20:12:10 3576

原创 Nacos Spring Cloud 快速开始(配置中心+注册中心示例)

文章目录1. 前言2. Nacos Spring Cloud 快速开始2.1 前提条件2.2 启动配置管理2.1.1 测试2.2 启动服务发现2.2.1 测试1. 前言Nacos有很多语法,结合不同的技术,有不同的语法:本篇是讲述Nacos Spring Cloud 的用法。2. Nacos Spring Cloud 快速开始2.1 前提条件您需要先下载 Nacos 并启动 Nacos server。2.2 启动配置管理配置管理就是管理参数,放在公共配置中心,具体的业务可以访问这个配置中心

2021-08-31 15:12:29 616

原创 shell 中的${},##, %% , :- ,:+, ? 的使用

假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt可以用${ }分别替换得到不同的值:${file#/}:删掉第一个/ 及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##/}:删掉最后一个/ 及其左边的字符串:my.file.txt${file#.}:删掉第一个. 及其左边的字符串:file.txt${file##.}:删掉最后一个. 及其左边的字符串:txt${file%/}:删掉最后一个 / 及其右边的字符

2021-08-31 10:26:29 3870

原创 Nacos Spring Boot 快速开始

文章目录1. 前言2. Nacos Spring Boot 快速开始2.1 前提条件2.2 启动配置管理2.2.1 测试2.3 启动服务发现参考1. 前言Nacos有很多语法,结合不同的技术,有不同的语法:本篇是讲述Nacos Spring Boot的用法。2. Nacos Spring Boot 快速开始本文主要面向 Spring Boot 的使用者,通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理和服务发现。关于 Nacos Spring Boot 的详细文档请参看:n

2021-08-30 20:41:14 1541 1

转载 nacos、ribbon和feign(openfeign)的简明教程

文章目录1. nacos简明教程1.1 为什么需要nacos?1.2 如何使用Nacos1.2.1 Nacos server的启动1.2.2 在微服务中使用Nacos做服务注册和发现1.2.3 服务的调用2. 负载均衡的问题2.1 使用Feign参考1. nacos简明教程1.1 为什么需要nacos?在微服务架构中,微服务之间经常要相互通信和调用,而且一个服务往往存在多个实例来降低负荷或保证高可用。我们假定A服务要调用B服务,最简单的方式把B服务的地址和端口保存在A服务的配置文件中。然后通过http

2021-08-30 17:00:34 1758

转载 SimpleDateFormat是非线程安全的(可用ThreadLocal解决)

文章目录1. SimpleDateFormat存在的风险2. 解决方案2.1 解决方案1:每次来都new新的,空间浪费比较大2.2 解决方案2:方法用synchronized修饰,并发上不来2.3 解决方案3:2.4 解决方案4:用ThreadLocal,一个线程一个SimpleDateFormat对象参考1. SimpleDateFormat存在的风险基于SimpleDateFormat封装的日期工具类用在多线程环境下会存在风险,可能报错误public class DateUtil { p

2021-08-26 17:34:53 451

转载 ThreadLocal全攻略:使用实战,源码分析,内存泄露分析

参考ThreadLocal全攻略:使用实战,源码分析,内存泄露分析

2021-08-26 15:14:56 686

原创 Java线程死亡(死掉、退出、挂掉)的几种情况

文章目录1. Java线程死亡的几种情况2. 验证上述结论2.1 测试1:线程正常结束后,isAlive()返回False2.2 测试2:子线程抛出异常之后,线程的isAlive()返回False相关文章Java线程死亡(退出)的几种情况【JVM】 OOM异常会导致JVM退出吗?1. Java线程死亡的几种情况Java线程会议如下三种方式结束,结束后就处于死亡状态1、run()或者call()方法执行完成,线程正常结束;2、线程抛出一个未捕获的Exception或Error;3、直接调用该线

2021-08-26 09:55:39 4710

原创 【JVM】 OOM异常会导致JVM退出吗?

参考JVM OOM异常会导致JVM退出吗

2021-08-25 17:35:01 1303

原创 【K8s】kubectl proxy

]$ kubectl proxyStarting to serve on 127.0.0.1:8001]$ curl http://localhost:8001{ "paths": [ "/api", "/api/v1", "/apis", "/apis/", "/apis/admissionregistration.k8s.io", "/apis/admissionregistration.k8s.io/v1", "/apis/admi

2021-08-25 11:39:45 3688

原创 【RPC Dubbo】本地存根和本地伪装

文章目录1. 名词解释本地存根本地伪装2. 作用3. 例子参考1. 名词解释本地存根消费端实现一个装饰器类, 实现服务接口并持有服务接口的引用, 代理远程接口, 强化接口功能, 相当于Aop的around, 可以在真正调用远程接口前做参数校验, 后做结果缓存等额外的操作一般我们系统中集成二方三方远程接口时, 都会对接口做一层封装, 以满足我们当前系统的规范, 通常这里都会做参数校验, 异常处理等操作, 和本地存根一致本地伪装消费端实现服务接口, 当消费端调用服务最终失败时, 在没有对服务调用使用

2021-08-23 20:34:04 369

原创 【RPC Dubbo】服务降级 v2.7版本

文章目录1. 官网解释服务降级2. 举例解释参考1. 官网解释服务降级可以通过服务降级功能临时屏蔽某个出错的非关键服务,并定义降级后的返回策略注册中心写入动态配置覆盖规则:其中:RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();Registry registry = registryFactory.getRegistr

2021-08-23 20:17:47 188

原创 【RPC Dubbo】集群容错

文章目录1. 什么是集群容错2. 集群容错模式参考1. 什么是集群容错集群调用失败时,Dubbo 提供的容错方案在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。各节点关系:这里的 Invoker 是 Provider 的一个可调用 Service 的抽象,Invoker 封装了 Provider 地址及 Service 接口信息Directory 代表多个 Invoker,可以把它看成 List ,但与 List 不同的是,它的值可能是动态变化的,比如注册中

2021-08-23 20:05:32 157

转载 【RPC Dubbo】各大开源rpc 框架 比较(dubbo支持的各种协议)

文章目录1. 前言2. 服务2.1 为什么要做服务2.2 服务带来的挑战2.3 2.3 服务未来的趋势3. 框架3.1 服务框架对比3.1.1 Dubbo3.1.2 Dubbox3.1.3 Spring Cloud3.1.4 Motan3.1.5 Hessian3.1.6 rpcx3.1.7 gRPC3.1.8 thrift3.1.9 总结3.2 RPC vs REST(JAX-RS)1. 前言随着现在互联网行业的发展,越来越多的框架、中间件、容器等开源技术不断地涌现,更好地来服务于业务,解决实现业务的

2021-08-23 19:05:03 2650

转载 【RPC】七大主流的HttpClient程序比较

文章目录1. 前言2. 常见的http框架2.1、HttpURLConnection:2.2、java.net.http.HttpClient2.3、Apache HttpClient:2.4、okHttp:2.5、Retrofit:2.6、RestTemplate2.7、OpenFeign1. 前言HttpClient并不和rpc划等号,也不能像dubbo那样被称之为rpc的具体实现。只是一个http请求api。2. 常见的http框架在你刚刚选择从HttpURLConnection转成Apac

2021-08-23 16:26:40 562

转载 【RPC Dubbo】dubbo超时重试和异常处理

文章目录1. 什么是Dubbo服务超时2. 配置超时参数2.1 超时在哪设置?2.2 超时设置的优先级是什么?2.3 超时是针对消费端的3. 超时的实现原理是什么?4. 超时作用参考1. 什么是Dubbo服务超时服务消费者引用服务提供者的服务时可能由于网络原因导致长时间未返回相应,此时大量的线程将会阻塞,引起性能下降等问题。可以通过引入服务超时来解决该问题服务超时指服务在给定的时间内未返回相应将立即终止该请求,一般配合retries(重试次数)使用。单位毫秒,默认值1000<!--3、声明

2021-08-23 14:10:34 1754

原创 【RPC Dubbo】dubbo负载均衡策略

文章目录前言参考前言在上一篇博客中,介绍了zookeeper作为dubbo的注册中心是如何工作的,有一个很重要的点,我们的程序是分布式应用,服务部署在几个节点(服务器)上,当消费者调用服务时,zk返回给dubbo的是一个节点列表,但是dubbo只会选择一台服务器,那么它究竟会选择哪一台呢?这就是dubbo的负载均衡策略了,本篇博客就来聚焦dubbo的负载均衡策略。参考dubbo负载均衡策略...

2021-08-23 11:32:27 357

原创 【idea】Application context not configured for this file(导入dubbo官网例子)

文章目录1. 问题描述2. 如何解决1. 问题描述本文例子是dubbo官网例子导入diea后报的提示信息spring配置文件中时常会出现这个提示这个警戒的意思大概就是:spring配置检查找到未映射的Spring配置文件。请配置Spring的Facet。虽然有提示信息,但是不影响程序的运行。可以不解决。其实就是diea未能发现配置文件,有可能确实没有该配置,有可能已存在配置文件,但是路径和命令不在默认路径下,识别不到。一般该提示出现在xml配置文件中:另外,从项目上也能

2021-08-22 12:17:33 1931

原创 ShardingSphere分库分表实战--HintShardingStrategyHint强制路由

文章目录HintShardingStrategy配置参考HintShardingStrategyHint强制路由,通过Hint指定分片值而非从SQL中提取分片值的方式进行分片的策略。在分库分区中,有些特定的SQL,Sharding-jdbc、Mycat、Vitess都不支持(可以查看相关文档各自对哪些SQL不支持),例如:insert into table1 select * from table2 where …这种SQL 路由很麻烦,需要解析table2的路由(是在ds0 /ds1 table2_

2021-08-19 18:38:01 2426 2

原创 【分库分表】ShardingSphere分库分表实战--inline策略

参考【分库分表】sharding-jdbc—分片策略Sharding JDBC(四) 分片策略一:标准分片策略StandardShardingStrategy

2021-08-18 22:34:15 2684 1

原创 【分库分表】sharding-jdbc(shardingsphere)—分片策略

文章目录1. 分片策略2. 分片算法3. 自定义分片算法3.1 标准分片策略(StandardShardingStrategy)3.1.1 a、PreciseShardingAlgorithm实现:(Precise处理 = 和 in 的路由)3.1.2 b. PreciseShardingAlgorithm + RangeShardingAlgorithm3.2 ComplexShardingStrategy参考1. 分片策略Sharding-JDBC认为对于分片策略存有两种维度:数据源分片策略(D

2021-08-18 19:07:23 3716

原创 Springboot之application.properties的使用

文章目录1. 概述参考1. 概述SpringBoot中免除了大部分手动配置,但是对于一些特定的情况,还是需要我们进行手动配置的,SpringBoot为我们提供了application.properties配置文件,让我们可以进行自定义配置,来对默认的配置进行修改,以适应具体的生产情况,当然还包括一些第三方的配置。几乎所有配置都可以写到application.peroperties文件中,这个文件会被SpringBoot自动加载,免去了我们手动加载的烦恼。但实际上,很多时候我们却会自定义配置文件,这些文

2021-08-18 15:07:55 3529

转载 Mybatis-Plus Boot 版本 mybatisplus-boot-starter

mybatisplus-spring-boot-starter 为 Mybatis-Plus 快速集成 spring-boot 简化配置而生,不再需拿 MyBatis 和 Hibernate 相比,mybatis-plus 作为 mybatis 的好拍档补充了它的短板,让 mybatis 兼具了 hibernate 的优点。mybatisplus-boot-starter 项目及实例mybatis-plus 使用说明帮助文档mybatis 实战教程、应用实例 | Demo,参见原文:Spring

2021-08-17 22:55:22 8947

原创 【mysql】MySQL 分库分表方案,总结的非常好!

文章目录参考参考添加链接描述

2021-08-17 21:59:32 2109

原创 【mysql】集群(主从、互为主从、多主、多级主从)

1. 一主一从最简单的是一主一从,主服务器上的数据可以往从服务器同步,而反之不可以,即从数据库上的数据不可以同步至主服务器。先配置配置master主服务器,再配置从服务器,核心是从服务器有个属性,指向主服务器。2. 一主多从基于一主一从基础上,再新增一个作为主服务器的从服务器,而多个从节点之间没有任何关系3. 多级主从基于一主一从基础上,假设A是主,B是从,再新增一个C作为B的从节点,这样就是三层结构。4. 互为主从的集群基于主从架构,2个服务器互为主从,即配置A的master属性指向B,A

2021-08-17 20:02:47 4218

转载 【RocketMQ】RocketMQ支持事务消息机制 二

文章目录1. 消息发送2. 消息确认3. rollback4. commit参考相关文章:RocketMQ支持事务消息机制 一RocketMQ支持事务消息机制 二1. 消息发送普通发送消息,是直接根据topic的queue最终写入到commitlog的,然后可以被消费者消费。比如现在往broker的orderTopic发送事务,不会先把half消息的offset写入orderTopic的queue里面去,而是写入broker内部的“RMQ_SYS_TRANS_HALF_TOPIC”对应的Consu

2021-08-16 16:55:33 114

转载 【RocketMQ】RocketMQ支持事务消息机制 一

文章目录1. 事务消费1.1 分布式事务—————— 两阶段提交协议1.2 使用消息队列来避免分布式事务1.2.1 业务与消息耦合的方式1.2.2 业务与消息解耦方式2.那么如何解决消息重复投递的问题?2.1 大事务 = 小事务 + 异步2.2 RocketMQ的实现2.2.1 RocketMQ事务实现原理2.2.2 消费失败和消费超时2.2.3 交易事务处理示例3. 如何保证扣钱与加钱的事务的最终一致性参考1. 事务消费我们经常支付宝转账余额宝,这是日常生活的一件普通小事,但是我们思考支付宝扣除转账的

2021-08-16 16:23:47 510

原创 【RocketMQ】消息存储(CommitLog、ConsumeQueue、offsetTable )

文章目录概述1. MQ消息队列的一般存储方式2. RocketMQ消息存储整体架构2.1 RocketMQ消息存储结构类型及缺点2.2 RocketMQ消息存储架构深入分析2.2.1 CommitLog2.2.2 ConsumeQueue2.2.2.1 ConsumeQueue的作用2.3 PageCache与Mmap内存映射参考概述MQ分布式消息队列大致流程在于消息的一发一收一存,本篇将为大家主要介绍下RocketMQ存储部分的架构消息存储是MQ消息队列中最为复杂和最为重要的一部分,所以小编也就放

2021-08-13 14:32:21 2364

原创 【Kafka】如何保证百万级写入速度(顺序写、页缓存)

添加链接描述

2021-08-13 10:35:38 1419 2

原创 【RocketMQ】过滤消息(tag过滤、sql过滤)

文章目录概述Tag过滤SQL过滤概述在大多数情况下,可以使用Message的Tag属性来简单快速的过滤信息。Tag过滤使用Tag过滤消息的消息生产者案例见:org.apache.rocketmq.example.filter.TagFilterProducer使用Tag过滤消息的消息消费者案例见:org.apache.rocketmq.example.filter.TagFilterConsumer主要是看消息消费者。consumer.subscribe(“TagFilterTest”, “Ta

2021-08-12 15:53:55 1495

原创 【RocketMQ】批量消息

文章目录1. 批量消息2. 示例1. 批量消息批量消息是指将多条消息合并成一个批量消息,一次发送出去。这样的好处是可以减少网络IO,提升吞吐量。大家在官网以及测试代码中都看到了关键的注释:如果批量消息大于1MB就不要用一个批次发送,而要拆分成多个批次消息发送。也就是说,一个批次消息的大小不要超过1MB实际使用时,这个1MB的限制可以稍微扩大点,实际最大的限制是4194304字节,大概4MB。但是使用批量消息时,这个消息长度确实是必须考虑的一个问题。而且批量消息的使用是有一定限制的,这些消息应该有

2021-08-12 11:44:05 833

原创 【RocketMQ】延迟消息(延迟队列)

文章目录1. 什么是延迟消息1.1 延时消息的使用场景2. 示例3. 原理参考1. 什么是延迟消息发送消息后,消费者要等待一定的时间才能消费到该消息。RocketMQ 不支持任意时间自定义的延迟消息,仅支持内置预设值的延迟时间间隔的延迟消息。预设值的延迟时间间隔为:1s、 5s、 10s、 30s、 1m、 2m、 3m、 4m、 5m、 6m、 7m、 8m、 9m、 10m、 20m、 30m、 1h、 2h对于开源版是这样,而对于专业版,是可以自定义时间的。1.1 延时消息的使用场景

2021-08-12 11:22:24 5704

原创 【RocketMQ】广播消息(广播模式)

文章目录概述示例参考概述这篇文章主要是用来讲解RocketMq广播模式消费实现逻辑,核心差别在于:1、广播模式消费位移使用本地文件存储、2、Rebalance过程中同一个ConsumeGroup下的consumer不会进行MessageQueue的分配;而是每个consumer负责消费所有MessageQueue。示例public class Consumer { public static void main(String[] args) throws InterruptedExce

2021-08-12 10:46:56 2639

原创 【Kafka】kafka消费者的三种模式(最多/最少/恰好消费一次)&生产者幂等性

文章目录概述回顾ack配置幂等性参考概述at most once(消费者最多收到一次消息,0--1次):acks = 0 可以实现。acks=0 保证producer往leader只发送一次,不管是否发送成功,因此可能丢数据,但不会重复发送at least once(消费者至少收到一次消息,1--多次):ack = all 或-1可以实现。exactly once(消费者刚好收到一次消息):at least once 加上消费者幂等性可以实现,还可以用kafka生产者的幂等性来实现。

2021-08-10 18:16:53 8111

原创 【Kafka】如何保证消息有序性

文章目录1. 消息有序性2. 发送端消息有序性2.1 Kafka如何保证单partition有序?2.2 client消息发送原理接收端消息有序性参考1. 消息有序性我们需要从2个方面看待消息有序性第一,发送端能否保证发送到服务器的消息是有序的第二,接收端能否有序的消费服务器中的数据发送端一般通过同步发送实现,即一次仅发送一条,等返回成功后,再发送下一条,接收端一般仅通过一个消费者参与消费实现2. 发送端消息有序性2.1 Kafka如何保证单partition有序?Kafka分布式的单位

2021-08-10 14:59:24 3280 1

原创 【Kafka】深入图解Kafka producer 发送过程

文章目录producer 发送过程参考producer 发送过程在新版本的kafka中(从0.9开始),其实只有异步方式一种,是批量发送的方式在producer端,存在2个线程:一个是producer主线程,用户端调用send消息时,是在主线程执行的,数据被缓存到RecordAccumulator中,send方法即刻返回,也就是说此时并不能确定消息是否真正的发送到broker。另外一个是sender IO线程,其不断轮询RecordAccumulator,满足一定条件后,就进行真正的网络IO发送

2021-08-10 11:35:29 4127 1

原创 【Kafka】如何保证消息可靠性(ack机制)

文章目录1. 消息可靠性2. 发送端如何保证高可用性2.1 ack参数解释2.2 ack详细流程参考1. 消息可靠性什么是消息可靠性?就是如何确保消息一定能发送到服务器进行存储,并且发生宕机等异常场景,能够从备份数据中恢复。消息的可靠性需要从2个方面看待消息可靠性第一,发送端能否保证发送的消息是可靠的第二,接收端能否可靠的消费消息消息发送端:通过ack机制,定义不同的策略。消息消费端:如果消费这边配置的是自动提交,万一消费到数据还没处理完,就自动提交offset了,但是此时你consu

2021-08-09 21:04:33 3701 1

转载 【Kafka】消息的同步发送和异步发送

文章目录概述1. sync vs async2. 可靠性机制2.1 oneway3. 一般配置参考概述kafka有同步(sync)、异步(async)以及oneway这三种发送方式,某些概念上区分也可以分为同步和异步两种,同步和异步的发送方式通过“producer.type”参数指定,而oneway由“request.require.acks”参数指定。1. sync vs async在官方文档Producer Configs中有如下:翻译过来就是:producer.type的默认值是syn

2021-08-09 20:50:25 14649

转载 【Kafka】unclean.leader.election.enable

参数作用就是当ISR列表内的节点都挂掉后,没有办法选举了,通过unclean.leader.election.enable=true 允许,ISR列表外的节点参与选举。详细解释如何提高Kafka可靠性是一个可以长篇大论的主题。很多初学者会简单的认为将客户端参数acks设置为-1即可保证Kafka的可靠性,显然这是很片面的观点。就可靠性本身而言,它并不是一个可以用“是”或者“否”来衡量的一个指标,而一般是用几个9来衡量。就参数方面而言,与Kafka可靠性相关的参数不止acks这一个,比如retries、

2021-08-09 19:45:31 680

空空如也

空空如也

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

TA关注的人

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