分类 SpringCloud 中的文章

Config

Config 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。 在spring cloud config 组件中,分两个角色,一是config server,二是config client。 使用spring cloud config 创建config server 第一步:启动类加上@EnableConfigServer 第二步:配置文件 spring.application.name=config-server server.port=8888 spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/ spring.cloud.config.server.git.searchPaths=respo spring.cloud.config.label=master spring.cloud.config.server.git.username=your username spring.cloud.config.server.git.password=your password spring.cloud.config.server.git.uri:配置git仓库地址 spring.cloud.config.server.git.searchPaths:配置仓库路径 spring.cloud.config.label:配置仓库的分支 spring.cloud.config.server.git.username:访问git仓库的用户名 spring.cloud.config.server.git.password:访问git仓库的用户密码 创建config client 配置文件: spring.application.name=config-client spring.cloud.config.label=master spring.cloud.config.profile=dev spring.cloud.config.uri= http://localhost:8888/ server.port=8881 spring.cloud.config.label 指明远程仓库的分支 spring.cloud.config.profile dev开发环境配置文件 test测试环境 pro正式环境 spring.cloud.config.uri= http://localhost:8888/ 指明配置服务中心的网址。 用@Value可读取配置内容 refer to : https://www.fangzhipeng.com/springcloud/2017/06/06/sc06-config.html……

阅读全文

Feign

Feign Feign 采用的是基于接口的注解 Feign 整合了ribbon Feign服务调用 1.需要添加依赖spring-cloud-starter-openfeign <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.1.1.RELEASE</version> </dependency> 2.需要在启动类中添加@EnableFeignClients注解 需要在启动类中添加@EnableDiscoveryClient注解 3.Client端创建一个新的接口并定义Client端需要调用的服务方法 @FeignClient(name = "service-hello") public interface ServerApi { @GetMapping("/hello/world") String sayHelloWord(); } 使用时 @GetMapping("/sayHelloWord") public Object sayHelloWord() { return serverApi.sayHelloWord(); } refer to : https://www.fangzhipeng.com/springcloud/2017/06/03/sc03-feign.html……

阅读全文

Hystrix

Hystrix Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。 断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。 ###启用hystrix 第一步:添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> 第二步:在程序的启动类加@EnableHystrix注解开启Hystrix 第三步:在HelloService方法上加上@HystrixCommand注解。该注解对该方法创建了熔断器的功能。 指定fallbackMethod熔断方法为sayError; @Service public class HelloService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "sayError") @GetMapping("/sayHelloWord") public Object sayHelloWord() { return serverApi.sayHelloWord(); } public String sayError() { return "sorry,error!"; } } ###Feign中使用断路器 Feign是自带断路器的,在D版本的Spring Cloud中,它没有默认打开 feign.hystrix.enabled=true @FeignClient(name = "service-hello",fallback = ServiceHelloHystric.class) public interface ServerApi { @GetMapping("/hello/world") String sayHelloWord(); } ServiceHelloHystric需要实现ServerApi 接口,并注入到Ioc容器中,代码如下: @Component public class ServiceHelloHystric implements ServerApi { @Override public String sayHelloWord(String name) { return "sorry ,error"; } } Hystrix Dashboard (断路器:Hystrix 仪表盘) 在pom.……

阅读全文

Ribbon

Ribbon ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。 默认负载 均衡策略 SpringCloud默认的负载策略为轮询方式 @LoadBalanced注解会自动采用默信的负载策略(轮询) 在工程的启动类中, 通过@EnableDiscoveryClient向服务中心注册; 并且向程序的ioc注入一个bean: restTemplate; 并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。 @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } SpringCloud中提供的常见的为:随机、轮询、哈希、权重等 SpringCloud底层采用的是Ribbon来实现的负载均衡,Ribbon的核心组件为IRule IRule常见的子类有RandomRule、RoundRobinRule、WeightedResponseTimeRule等。分别对应着随机、轮询、和权重 两种方式设置负载均衡策略 - 代码方式 注入bean @Bean public IRule initIRule() { return new RandomRule(); } yml方式 注册中心服务端名字: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule refer to : https://www.fangzhipeng.com/springcloud/2017/06/02/sc02-rest-ribbon.html……

阅读全文

Zuul

Zuul 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统。 Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。 服务路由 第一步:在其启动类上添加注解@EnableZuulProxy,开启zuul的功能: 第二步:加上配置文件application.yml加上以下的配置代码: eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8769 spring: application: name: service-zuul zuul: routes: api-a: path: /api-a/** serviceId: service-hello api-b: path: /api-b/** serviceId: service-feign 以/api-a/ 开头的请求都转发给service-hello服务; 以/api-b/开头的请求都转发给service-feign服务; 服务过滤 @Component public class MyFilter extends ZuulFilter{ private static Logger log = LoggerFactory.getLogger(MyFilter.class); @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.……

阅读全文

Eureka服务注册服务发现模块

Eureka服务注册服务发现 创建服务注册中心 @EnableEurekaServer, 在application启动类上加:@EnableEurekaServer注解 具体配置文件: server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ 通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server 创建服务提供者 当client向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个client实例接收心跳消息。 如果心跳超时,则通常将该实例从注册server中删除。 @EnableEurekaClient 1.在application启动类上加:@EnableEurekaClient注解 2.在配置文件中注明自己的服务注册中心的地址 - 具体配置文件 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8762 spring: application: name: service-hello 假设存在接口/hello/word spring.application.name,服务与服务之间相互调用一般都是根据这个name 服务调用 RestTemplate 例如:RestTemplate中提供的getForObject方法 方式1: String result = template.getForObject("http://127.0.0.1:8762/hello/word", String.class); 方式2: ServiceInstance serviceInstance = loadBalancerClient.choose("service-hello"); String url = String.format("http://%s:%s/server/get", serviceInstance.getHost(), serviceInstance.……

阅读全文