
Spring Cloud
森林森
java学习
展开
-
基于 Nacos 实现 Sentinel 规则持久化
Sentinel Dashboard中添加的规则数据存储在内存,微服务停掉规则数据就消失,在⽣产环境下不合适。我们可以将Sentinel规则数据持久化到Nacos配置中⼼,让微服务从Nacos获取规则数据在微服务中pom中添加<!-- Sentinel⽀持采⽤ Nacos 作为规则配置数据源,引⼊该适配依赖 --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sen原创 2020-09-02 10:39:20 · 715 阅读 · 0 评论 -
Sentinel ⾃定义兜底逻辑
@SentinelResource注解类似于Hystrix中的@HystrixCommand注解@SentinelResource注解中有两个属性需要我们进⾏区分, blockHandler属性⽤来指定不满⾜Sentinel规则的降级兜底⽅法, fallback属性⽤于指定Java运⾏时异常兜底⽅法SentinelResourcevalue:定义资源名 就是个名称,随便起blockHandlerClass:指定Sentinel规则异常兜底逻辑所在class类blockHandler:指定Sen原创 2020-09-02 09:57:17 · 606 阅读 · 0 评论 -
Dubbo报错:Invalid name=“org.apache.dubbo.config.ApplicationConfig#0“ contains illegal character,
dubbo启动报错Invalid name="org.apache.dubbo.config.ApplicationConfig#0" contains illegal character, only digit, letter, '-', '_' or '.' is legal.Springboot2.2.9+ dubbo-spring-boot-starter2.2.1原因:没有指定name和id等属性,然后由spring会自动生成name,类似“org.apache.dubbo.config.原创 2020-09-01 18:50:16 · 16161 阅读 · 4 评论 -
Nacos 配置中⼼
Nacos 配置中⼼pom <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency>原创 2020-09-01 16:42:16 · 334 阅读 · 0 评论 -
搭建nacos集群并持久到mysql
官网教程https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html下载Nacoshttps://github.com/alibaba/nacos/tags本地mysql建立数据库数据库全名 = nacos_confighttps://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql/* * Copyright 1999-2018 Alibaba原创 2020-09-01 14:45:32 · 312 阅读 · 0 评论 -
Nacos 数据模型(领域模型)
Namespace命名空间、 Group分组、集群这些都是为了进⾏归类管理,把服务和配置⽂件进⾏归类,归类之后就可以实现⼀定的效果,⽐如隔离⽐如,对于服务来说,不同命名空间中的服务不能够互相访问调⽤Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境、测试环境和⽣产环境Group:分组,将若⼲个服务或者若⼲个配置集归为⼀组,通常习惯⼀个系统归为⼀个组Service:某⼀个服务,⽐如简历微服务DataId:配置集或者可以认为是⼀个配置⽂件Namespace + Group原创 2020-09-01 13:59:10 · 1260 阅读 · 0 评论 -
Nacos 保护阈值
保护阈值:可以设置为0-1之间的浮点数,它其实是⼀个⽐例值(当前服务健康实例数/当前服务总实例数)⼀般流程下, nacos是服务注册中⼼,服务消费者要从nacos获取某⼀个服务的可⽤实例信息,对于服务实例有健康/不健康状态之分, nacos在返回给消费者实例信息的时候,会返回健康实例。这个时候在⼀些⾼并发、⼤流量场景下会存在⼀定的问题如果服务A有100个实例, 98个实例都不健康了,只有2个实例是健康的,如果nacos只返回这两个健康实例的信息的话,那么后续消费者的请求将全部被分配到这两个实例,原创 2020-09-01 10:48:24 · 11996 阅读 · 0 评论 -
微服务统⼀认证⽅案 Spring Cloud OAuth2 + JWT
微服务架构下统⼀认证思路基于Session的认证⽅式在分布式的环境下,基于session的认证会出现⼀个问题,每个应⽤服务都需要在session中存储⽤户身份信息,通过负载均衡将本地的请求分配到另⼀个应⽤服务需要将session信息带过去,否则会重新认证。我们可以使⽤Session共享、 Session黏贴等⽅案。Session⽅案也有缺点,⽐如基于cookie,移动端不能有效使⽤等基于token的认证⽅式基于token的认证⽅式,服务端不⽤存储认证数据,易维护扩展性强, 客户端可以把toke原创 2020-08-28 19:08:31 · 630 阅读 · 0 评论 -
spring gateway-自定义路由断言工厂与局部GatewayFiler
自定义 RoutePredicateFactorypackage com.liu.predicate;import org.apache.commons.lang.StringUtils;import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;import org.springframework.stereotype.Component;import org.springf原创 2020-08-28 14:36:48 · 815 阅读 · 0 评论 -
spring cloud gatwway predicates Path多个路径
- id: service-autodeliver-router # 我们自定义的路由 ID,保持唯一 # uri: http://127.0.0.1:8096 # 目标服务地址 自动投递微服务(部署多实例) 动态路由:uri配置的应该是一个服务名称,而不应该是一个具体的服务实例的地址 uri: lb://edu-service-autodeliver # gateway网关从服务注册中心获取实例信息然后负载后路由 predicates:..原创 2020-08-28 11:48:22 · 10049 阅读 · 0 评论 -
微服务监控之分布式链路追踪技术 Sleuth + Zipkin
分布式链路追踪技术核⼼思想本质:记录⽇志,作为⼀个完整的技术,分布式链路追踪也有⾃⼰的理论和概念微服务架构中,针对请求处理的调⽤链可以展现为⼀棵树,示意如下⼀个请求通过⽹关服务路由到下游的微服务-1,然后微服务-1调⽤微服务-2,拿到结果后再调⽤微服务-3,最后组合微服务-2和微服务-3的结果,通过⽹关返回给⽤户为了追踪整个调⽤链路,肯定需要记录⽇志,⽇志记录是基础,在此之上肯定有⼀些理论概念,当下主流的的分布式链路追踪技术/系统所基于的理念都来⾃于Google的⼀篇论⽂《Dapper, a原创 2020-08-27 17:23:31 · 403 阅读 · 0 评论 -
spring cloud 常⻅问题及解决
常⻅问题及解决Eureka 服务发现慢的原因, Spring Cloud 超时设置问题新服务上线后,服务消费者不能访问到刚上线的新服务,需要过⼀段时间后才能访问?或是将服务下线后,服务还是会被调⽤到,⼀段时候后才彻底停⽌服务,访问前期会导致频繁报错?这些问题还会让你对 Spring Cloud 产⽣严重的怀疑,这难道不是⼀个 Bug?问题场景上线⼀个新的服务实例,但是服务消费者⽆感知,过了⼀段时间才知道某⼀个服务实例下线了,服务消费者⽆感知,仍然向这个服务实例在发起请求这其实就是服务发现的⼀原创 2020-08-25 18:44:52 · 371 阅读 · 0 评论 -
Spring Cloud Stream消息驱动组件
Spring Cloud Stream消息驱动组件Spring Cloud Stream 是⼀个构建消息驱动微服务的框架。应⽤程序通过inputs(相当于消息消费者consumer)或者outputs(相当于消息⽣产者producer)来与Spring Cloud Stream中的binder对象交互,⽽Binder对象是⽤来屏蔽底层MQ细节的,它负责与具体的消息中间件交互。说⽩了:对于我们来说,只需要知道如何使⽤Spring Cloud Stream与Binder对象交互即可StreamB原创 2020-08-25 18:10:04 · 175 阅读 · 0 评论 -
Spring cloud configServer配置中心简单使用
Spring cloud configServer配置中心简单使用 <dependencies> <!--eureka client 客户端依赖引⼊--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix原创 2020-08-25 16:26:07 · 340 阅读 · 0 评论 -
Spring-cloud-gateway
简单使用配置pom<?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 http://maven.apach原创 2020-08-24 20:45:21 · 326 阅读 · 0 评论 -
Feign对熔断器的⽀持
Feign对熔断器的⽀持配置server: port: 8090spring: application: name: edu-service-autodeliver# 注册到eureka注册中eureka: client: service-url: # 使用逗号分隔 多个实例, defaultZone: http://EduCloudEurekaServerB:8762/eureka,http://EduCloudEurekaServerA:87原创 2020-08-24 12:27:16 · 188 阅读 · 0 评论 -
Feign简单使用
FeignFeign是Netflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求,远程调⽤的) ,是以Java接⼝注解的⽅式调⽤Http请求,⽽不⽤像Java中通过封装HTTP请求报⽂的⽅式直接调⽤, Feign被⼴泛应⽤在Spring Cloud 的解决⽅案中。类似于Dubbo,服务消费者拿到服务提供者的接⼝,然后像调⽤本地接⼝⽅法⼀样去调⽤,实际发出的是远程的请求。Feign可帮助我们更加便捷,优雅的调⽤HTTP API:不需要我们去拼接url然后呢调⽤restTem原创 2020-08-21 20:18:23 · 491 阅读 · 0 评论 -
@EnableHystrix或者@EnableCircuitBreaker-开启熔断器
开启@EnableDiscoveryClient@SpringBootApplication//@EnableHystrix 开启 Hystrix@EnableCircuitBreaker // 开启熔断器public class AutodeliverApplication8091 {配置方法上 //HystrixCommand进行熔断控制 HystrixCommandProperties @HystrixCommand( commandPropertie原创 2020-08-21 16:12:56 · 10233 阅读 · 0 评论 -
Ribbon核⼼源码解析-@LoadBalanced
Ribbon核⼼源码解析Ribbon给restTemplate添加了⼀个拦截器负载均衡管理器LoadBalancer(总的协调者,相当于⼤脑,为了做事情,协调四肢) ,围绕它周围的多有IRule、 IPing等IRule:是在选择实例的时候的负载均衡策略对象IPing:是⽤来向服务发起⼼跳检测的,通过⼼跳检测来判断该服务是否可⽤ServerListFilter:根据⼀些规则过滤传⼊的服务实例列表ServerListUpdater:定义了⼀系列的对服务列表的更新操作@LoadBala原创 2020-08-19 10:41:30 · 342 阅读 · 0 评论 -
Ribbon负载均衡策略
Ribbon内置了多种负载均衡策略,内部负责复杂均衡的顶级接⼝为 com.netflix.loadbalancer.IRule ,类树如下public interface IRule{ /* * choose one alive server from lb.allServers or * lb.upServers according to key * * @return choosen Server object. NULL is returned i原创 2020-08-19 08:56:55 · 204 阅读 · 0 评论 -
Eureka Client注册服务
Eureka Client注册服务动过程: Eureka客户端在启动时也会装载很多配置类,我们通过spring-cloud-netflix-eureka-client-xxxx.jar下的spring.factories⽂件可以看到加载的配置类EurekaClientAutoConfiguration//标志为配置类,可以被Spring扫描与管理@Configuration//启用配置属性@EnableConfigurationProperties@ConditionalOnClass(原创 2020-08-18 18:05:42 · 653 阅读 · 0 评论 -
Eureka Client下架服务
下架com.netflix.discovery.DiscoveryClient#shutdown关闭资源,解除注册,向注册中心发送下线请求 unregister public synchronized void shutdown() { if (isShutdown.compareAndSet(false, true)) { logger.info("Shutting down DiscoveryClient ..."); if原创 2020-08-18 16:26:23 · 332 阅读 · 0 评论 -
Eureka Server服务续约接⼝(接受客户端续约
com.netflix.eureka.registry.PeerAwareInstanceRegistryImplreplicateInstanceActionsToPeers private void replicateInstanceActionsToPeers(Action action, String appName, String id, InstanceInfo info, Instanc原创 2020-08-18 14:41:00 · 199 阅读 · 0 评论 -
Eureka Server服务注册接⼝(接受客户端注册服务)
Eureka Server服务注册接⼝(接受客户端注册服务)ApplicationResource类的addInstance()⽅法中代码: registry.register(info,“true”.equals(isReplication));@POST @Consumes({"application/json", "application/xml"}) public Response addInstance(InstanceInfo info,原创 2020-08-18 14:30:40 · 208 阅读 · 0 评论 -
Eureka Server服务接⼝暴露策略
org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration启动时注册 JerseyFilter @Bean public FilterRegistrationBean jerseyFilterRegistration( javax.ws.rs.core.Application eurekaJerseyApp) { FilterRegistrationBean bean = new FilterRe原创 2020-08-18 14:03:02 · 206 阅读 · 0 评论 -
EurekaServer-@EnableEurekaServer-启动过程
标志为EurekaServer@EnableEurekaServer@SpringBootApplicationpublic class EurekaServer8761 { public static void main(String[] args) { SpringApplication.run(EurekaServer8761.class,args); }}EnableEurekaServer@Target(ElementType.TYPE)@R原创 2020-08-18 11:59:23 · 766 阅读 · 0 评论 -
Eureka-数据解析
Eureka元数据详解Eureka的元数据有两种:标准元数据和⾃定义元数据。标准元数据: 主机名、 IP地址、端⼝号等信息,这些信息都会被发布在服务注册表中,⽤于服务之间的调⽤。⾃定义元数据: 可以使⽤eureka.instance.metadata-map配置,符合KEY/VALUE的存储格式。这 些元数据可以在远程客户端中访问server: port: 8091spring: application: name: edu-service-autodeliver main原创 2020-08-18 09:30:30 · 1792 阅读 · 0 评论 -
springboot yml配置文件使用@project.xxxx@ 不生效
ymlserver: port: 8080spring: application: name: edu-service-resume datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/edu?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateT原创 2020-08-17 19:42:02 · 2082 阅读 · 0 评论 -
spring-cloud-Eureka-server-简单配置
Eureka-server-简单配置server: port: 8761spring: application: name: edu-cloud-eureka-server # 应用名称,应用名称会在Eureka中作为服务名称eureka: instance: hostname: EduCloudEurekaServerA client: service-url: # 配置客户端所交互的Eureka Server的地址(Eureka Server原创 2020-08-17 19:12:27 · 254 阅读 · 0 评论