参考:https://blog.csdn.net/hellozpc/article/details/83692496

参考:https://www.fangzhipeng.com/spring-cloud.html

Spring Cloud

spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理事件总线、全局锁、决策竞选、分布式会话等。运行环境就简单,另外说明的是

spring cloud 是基于spring boot 的。

1.1 注册中心

spring cloud netflix 的 eureka 是一个服务注册和发现模块。包括服务端与客户端。启动一个注册中心,只需要一个注解 @EnableEurekaServer ,这个注解注释到 spring boot 的启动工程类上

@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication { public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}

Eureka 是一个高可用的组件,没有后端缓存,每一个实例注册之后都要向注册中心发送心跳,在默认情况下eureka server 也是一个 eureka client ,必须指定一个server.

application.yml 配置

server:
port:
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

1.2 创建一个服务提供者( eureka client)

当 client 向 server 注册时,它会提供一些元数据,例如主机和端口,url 。每个 client 实例接受心跳消息,如果心跳超时,则通常将该实例从注册服务中删除。

eureka client 需要依赖 spring-boot-start-web

@SpringBootApplication
@EnableEurekaClient
public class ServiceHiApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHiApplication.class, args);
}
}

2.1 ribbon  是一个负载均衡客户

可以很好的控制 http 和 tcp 的一些行为。 Feign 默认集成了 ribbon首先需要导入ribbon 的依赖,在工程的启动类中通过 @EnableDiscoveryClient 向服务中心注册。并且向程序的 ioc 注入一个 bean ,

restTemplate 并通过@LoadBalance 注解表明这个 restTemplate 开启负载均衡的功能。

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRibbonApplication.class, args);
} @Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
} }
@Service
public class HelloService { @Autowired
RestTemplate restTemplate; public String hiService(String name) {
return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
}
}

3.1 Feign 是一个声明式的 http 客户端

它使得些Htpp 客户端变得简单。使用 Feign 只需要创建一个接口并注解。它具有可拔插的注解特性,可使用feign 注解和 JAX-RS 注解。Feign 支持可拔插的编码和解析器。Feign 默认集成了Ribbon ,并和Eureka 结合,默认实现了负载均很的效果。

  • Feign 是采用基于接口的注解
  • Feign 整合了ribbon

需要在程序的启动类上加 @EnableFeignClients 注解开启 Feign 的功能。

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication { public static void main(String[] args) {
SpringApplication.run(ServiceFeignApplication.class, args);
}
}

定义一个Feign 接口,通过@FeignClient("服务名")来指定调用哪个服务。

@FeignClient(value = "service-hi")
public interface SchedualServiceHi {
@RequestMapping(value = "/hi",method = RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value = "name") String name);
}

4.1 Hystrix

在微服务中,根据业务来拆分成一个个的服务,服务与服务之间可以互相调用RPC ,在spring cloud 可以用 RestTemplate + Ribbon 和 Feign 来调用。为了保证高可用,单个服务通常会集群部署,由于网络的原因或者自身的原因,服务并不能保证

100% 可以。如果单个服务出问题,调用这个服务的线程会阻塞,此时若大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务于服务之间的依赖性,故障会传播,对整个微服务系统造成严重的后果,这就是服务故障的“雪崩”效应

为了解决该问题,断路器提出来

Netflix 开源 Hystrix 组件,实现了断路器模式,Spring Cloud 对这一组件进行了整合。在微服务架构中,一个请求需要调用多个服务是常见的

较底层的服务如果故障,会导致连锁故障。当对特定的服务调用到达一个阈值(Hystrix 是 5 秒20次)断路器将会被打开。

断路器打开后,可用避免连锁故障, fallback 方法可直接返回一个固定的值。

在程序的启动类加@EnableHystrix 注解开启 Hystrix

@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class ServiceRibbonApplication { public static void main(String[] args) {
SpringApplication.run(ServiceRibbonApplication.class, args);
} @Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
} }

在方法上加@HystrixCommand 注解,该注解对方法创建了熔断功能,并指定熔断方法。

@Service
public class HelloService { @Autowired
RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "hiError")
public String hiService(String name) {
return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
} public String hiError(String name) {
return "hi,"+name+",sorry,error!";
}
}

4.2 Feign 中使用断路器

Feign 是自带断路器的,需要配置开启断路器,默认关闭

feign.hystrix.enabled=true
@FeignClient(value = "服务名称",fallback = SchedualServiceHiHystric.class)
public interface SchedualServiceHi {
@RequestMapping(value = "/hi",method = RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value = "name") String name);
}

创建类继承接口,重写接口的方法

@Component
public class SchedualServiceHiHystric implements SchedualServiceHi {
@Override
public String sayHiFromClientOne(String name) {
return "sorry "+name;
}
}

5.1 Zuul

在微服务架构中,需要几个基础的服务治理组件,包括服务注册发现、服务消费、负载均衡、断路器、智能路由、配置管理等共同组成一个简单的微服务系统。

Zuul 的主要功能是路由 转发和过滤器,路由功能是微服务的一部分,比如 /api/user/转发到 user 服务 。api/shop 转发到shop 服务。zuul默认和ribbon 结合实现了负载均衡的功能。

Spring Cloud 从入门到入门的更多相关文章

  1. Spring Cloud实战之初级入门(六)— 服务网关zuul

    目录 1.环境介绍 2.api网关服务 2.1 创建工程 2.3 api网关中使用token机制 2.4 测试 2.5 小结 3.一点点重要的事情 1.环境介绍 好了,不知不觉中我们已经来到了最后一篇 ...

  2. Spring Cloud实战之初级入门(五)— 配置中心服务化与配置实时刷新

    目录 1.环境介绍 2.配置中心服务化 2.1 改造mirco-service-spring-config 2.2 改造mirco-service-provider.mirco-service-con ...

  3. Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控

    目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 ...

  4. 基于Spring Cloud的微服务入门教程

    (本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!) 本人也是前段时间才开始接触S ...

  5. Spring Cloud - Nacos注册中心入门单机模式及集群模式

    近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案.其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案. 包 ...

  6. spring cloud 学习(3) - feign入门

    feign 是一个让rest服务调用更简洁的开源项目,很多介绍文章或书也称它为声明式REST调用.传统的web service中,通过引用wsdl来自动生成一些client的代理类(或stub代码), ...

  7. Spring Cloud实战微服务入门

    1.spring cloud是什么? 是一个快速构建分布式系统的工具集,构建于Spring Boot之上 2.spring cloud 的特点 约定优于配置 开箱即用.快速启动 适用于各种环境 轻量级 ...

  8. 替代 Hystrix,Spring Cloud Alibaba Sentinel 快速入门

    提起 Spring Cloud 的限流降级组件,一般首先想到的是 Netflix 的 Hystrix. 不过就在2018年底,Netflix 宣布不再积极开发 Hystrix,该项目将处于维护模式.官 ...

  9. 官方文档中文版!Spring Cloud Stream 快速入门

    本文内容翻译自官方文档,spring-cloud-stream docs,对 Spring Cloud Stream的应用入门介绍. 一.Spring Cloud Stream 简介 官方定义 Spr ...

  10. 《Spring Cloud与Docker微服务架构实战》配套代码

    不才写了本使用Spring Cloud玩转微服务架构的书,书名是<Spring Cloud与Docker微服务架构实战> - 周立,已于2017-01-12交稿.不少朋友想先看看源码,现将 ...

随机推荐

  1. linux shell let, expr 命令详解

    linux命令之let.exprshell程序中的操作默认都是字符串操作,在运行数学运算符的时候可能得到意想不到的答案: var=1var=$var+1echo $var 将输出 1+1从这个例子中可 ...

  2. 【C语言】用函数实现两个数排序(指针作函数参数)

    原理就不讲了,这里用来理解指针的使用方法 #include <stdio.h> void fun(int* a,int* b) { int t; if(*a>=*b) { t = * ...

  3. UVA 11384 Help is needed for Dexter(递归)

    题目链接:https://vjudge.net/problem/UVA-11384 这道题要分析得透: 如果我们手模的话,会发现:如果先将大于$\frac{n}{2}$的数都减去$\frac{n}{2 ...

  4. Hadoop 启动/停止集群和节点的命令

    集群启动/停止Hadoop集群:start-all.sh    stop-all.sh 1) 启动NameNode, DataNode 2) 启动JournalNode, JournalNode在hd ...

  5. phpinfo(): It is not safe to rely on the system's timezone settings

    PHP调试的时候出现了警告: 问题: Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You ...

  6. AOP底层实现原理

    有两种方法实现: 当实现接口时,采用动态代理 另一种采用cglib cglib和动态代理并没有谁好谁坏,就像做菜一样,一种菜可以有多种味道,使用不同的方法就有不同的模式

  7. iframe内外的操作

    因为iframe涉及到跨域问题,有时候有的比较多,这不今天遇到了一个问题,处在iframe里头的js要操作iframe元素,查找百度,是可以实现的: 用jQuery在IFRAME里取得父窗口的某个元素 ...

  8. 【MySQL】用户管理及备份

    "我们知道我们的最高权限管理者是root用户,它拥有着最高的权限,包括select.update.delete.grant等操作.一般在公司里DBA工程师会创建一个用户和密码,让你去连接数据 ...

  9. [JLOI2009]神秘的生物

    题目链接 题目大意 给定一个\(n*n\)的矩阵,从其中选取恰好一个连通块,使选取的格子所对应的权值和最大. \(n\leq 9\) 解题思路 由于\(n\)特别小,考虑插头dp. 和一般的插头dp不 ...

  10. next_permutation的使用-Hdu1027

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ( ...