一.Spring Cloud简介

  简单来说,Spring Cloud 就是致力于分布式系统、微服务等的一套在目前非常火热的框架。但它的本身也是一系列框架的有序集合(由多个模块组成)。

  相比较于Dubbo还是有很多不同之处的:例如Dubbo是基于RPC的服务框架,而Spring Cloud是基于RESTful API的服务框架。Dubbo是基于二进制的传输,而Spring Cloud是http协议传输等等。

二.Spring Cloud的Eureka组件

  1.Eureka的作用

    Eureka和zookeeper类似,能起到一个服务注册中心的作用

  2.使用Eureka

    在Spring Boot主类中添加@EnableEurekaServer注解即可开启Eureka(注意,需要引入相关的依赖,依赖如下)

 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

  3.Eureka配置

    在application.properties中配置如下

spring.application.name=spring-cloud-eureka
server.port=8060
eureka.instance.hostname=localhost
#配置服务中心  应将下列属性设为false
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
#访问路径
eureka.client.serviceUrl.defaultZone=http://localhost:8060/eureka/

  4.测试服务中心

    启动Spring Boot项目,访问端口后可以看到如下界面

    

  5.服务提供者

    在项目下新建一个Spring Boot项目的Module,并在主类中添加@EnableEurekaClient注解

    在配置文件中添加如下配置

spring.application.name=spring-cloud-provider
server.port=8061
eureka.client.serviceUrl.defaultZone=http://localhost:8060/eureka/

    启动项目后发现服务中心多了一个服务提供者,如下图所示

    

  6.服务消费者

    Spring Cloud创建服务消费者有两种方式,分别是使用Ribbon和使用Feign

    1.Ribbon的方式创建服务消费者

    (1)首先引入相关的依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

    (2)在主类中添加@EnableDiscoveryClient注解

    (3)最后在配置文件中配置如下

spring.application.name=spring-cloud-consumer
server.port=8063
eureka.client.serviceUrl.defaultZone=http://localhost:8060/eureka/

    (4)服务消费者调用服务提供者中的方法

    创建RestTemplate对象,并调用该对象的getForObject方法,例如下列代码

    service层

@Service
public class MyService {
@Autowired
private RestTemplate restTemplate; public String getPort(){
//调用服务提供方的方法
return restTemplate.getForObject("http://spring-cloud-provider:getPort",String.class);
}
}

    controller层

@RestController
public class MyController {
@Autowired
private MyService myService;
@RequestMapping("/getPort")
public String getPort(){
return myService.getPort();
}
}

    测试结果如下

    

    如果需要配置负载均衡策略,可以在服务消费者中添加一个配置类,再开启一个其他端口的服务提供者即可

@Configuration
public class MyConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}

    2.Feign的方式创建服务消费者

    (1)首先引入相关的依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

    (2)然后在主类中添加 @EnableFeignClients 和 @EnableDiscoveryClient 注解,配置文件与Ribbon的方式类似

    (3)服务消费者调用服务提供者中的方法

    在service层中的代码如下

@FeignClient(value = "spring-cloud-provider")
public interface MyService {
@RequestMapping(value = "getPort" , method = RequestMethod.GET)
public String getPort(); }

    在controller层中的代码如下

@RestController
public class MyController {
@Autowired
private MyService myService; @RequestMapping(value = "getPort" , method = RequestMethod.GET)
public String getPort(){
return myService.getPort();
}
}

    由于Feign的方式本身包含有了Ribbon,也实现了负载均衡,面向接口编程,写起来思路更清晰方便,实际开发中应用更广

三.Spring Cloud 熔断器

  1.Ribbon的方式下添加熔断器

    (1)导入相关的依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

    (2)在主类中添加 @EnableHystrix 注解开启熔断器

    (3)修改service层中的方法,在方法上添加 @HystrixCommand 注解,例如

    @HystrixCommand(fallbackMethod = "getError")//如果getPort方法执行失败,会直接熔断该方法并执行getError方法(避免浏览器一直去加载)
public String getPort(){
//调用服务提供方的方法
return restTemplate.getForObject("http://spring-cloud-provider:getPort",String.class);
}
public String getError(){
return String.format("获取失败");
}

  2.Feign的方式下添加熔断器

    (1)Feign自带熔断器,但默认是关闭的,可以在application.properties中开启

feign.hystrix.enabled=true

    (2)在service层的接口中添加熔断回调方法(在上面的代码的基础上,在@FeignClient 中添加熔断回调如下,如果出现熔断,则执行接口的实现类中的方法)

@FeignClient(value = "spring-cloud-provider",fallback = MyServiceImpl.class)//如果下面的方法执行失败,会熔断并去执行MyServiceImpl中的方法

    (3)创建接口实现类,例如

@Component
public class MyServiceImpl implements MyService { @Override
public String getPort() {
return String.format("获取失败");
}
}

  3熔断监控

    如果需要监控熔断信息,可以做如下步骤

    (1)导入相关依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

    (2)在主类中添加注解 @EnableHystrixDashboard 开启熔断监控,启动项目,并访问/hystrix,页面如下

    

    (3)添加配置类

@Configuration
public class MyConfig {
@Bean
public ServletRegistrationBean getServlet(){
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/myhystrix");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
}

    (4)在页面中输入路径即(ip+端口号+配置类中的addUrlMappings)可查看熔断信息,例如下图

    

四.Spring Cloud 网关服务

  1.开启Zuul网关服务步骤如下

    (1)引入相关依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

    (2)在主类中添加 @EnableEurekaClient 和 @EnableZuulProxy 注解开启相应的服务

    (3)在配置文件中配置如下

spring.application.name=spring-cloud-zuul
server.port=8065
eureka.client.serviceUrl.defaultZone=http://localhost:8060/eureka/
#指定网关路径,并设置其映射路径
zuul.routes.api-a.path=/api/ribbon/**
zuul.routes.api-a.serviceId=spring-cloud-consumer-ribbon
zuul.routes.api-b.path=/api/feign/**
zuul.routes.api-b.serviceId=spring-cloud-consumer-feign

    (4)启动项目,可以通过网关来访问项目,例如下图

    

  2.网关路由失败回调

    编写一个回调实体类,并实现 FallbackProvider 接口即可,详细可以参考官方api文档

  3.zuul过滤功能

    编写一个过滤器,并实现ZuulFilter接口即可

五.Spring Cloud 配置中心

  1.服务端配置

    (1)导入相关依赖并在主类中开启@EnableEurekaClient 和 @EnableConfigServer注解

    (2)在配置文件中配置如下(以github作为配置文件存放中心)

spring.application.name=spring-cloud-config
spring.cloud.config.label=master
#gitHub仓库地址
spring.cloud.config.server.git.uri=git@github.com:RetimeFor/spring-cloud-config-test.git
#存放配置文件的文件夹(相对以上仓库地址)
spring.cloud.config.server.git.search-paths=spring-cloud-config/others
spring.cloud.config.server.username=gitHub账号
spring.cloud.config.server.password=gitHub密码
#端口号配置为8888(不要在这里修改)
server.port=8888
eureka.client.serviceUrl.defaultZone=http://localhost:8060/eureka/

    (3)测试结果如下(端口后直接跟  /文件的名字/master)

    

  2.客户端配置

    以Feign的服务端为例,只需要将配置文件中的内容用如下代码替换即可

spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.name=other
spring.cloud.config.label=master

【Spring Cloud】 总结的更多相关文章

  1. spring/spring boot/spring cloud开发总结

    背景        针对RPC远程调用,都在使用dubbo.dubbox等,我们也是如此.由于社区暂停维护.应对未来发展,我们准备尝试新技术(或许这时候也不算什么新技术了吧),选择使用了spring ...

  2. 转 Netflix OSS、Spring Cloud还是Kubernetes? 都要吧!

    Netflix OSS.Spring Cloud还是Kubernetes? 都要吧! http://www.infoq.com/cn/articles/netflix-oss-spring-cloud ...

  3. spring cloud 学习研究- spring-cloud-microservice-example

    spring cloud + docker 微服务架构 http://www.open-open.com/lib/view/open1437363835818.html 实例项目 https://gi ...

  4. Spring Cloud集成相关优质项目推荐

    Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储.Git以及Subversion. Spring Cloud Bus 事件.消 ...

  5. spring boot分布式技术,spring cloud,负载均衡,配置管理器

    spring boot分布式的实现,使用spring cloud技术. 下边是我理解的spring cloud的核心技术: 1.配置服务器 2.注册发现服务器eureka(spring boot默认使 ...

  6. Spring Cloud 配置服务

    Spring Cloud 配置服务 1. 配置服务简介 产生背景: 传统开发中,我们通常是将系统的业务无关配置(数据库,缓存服务器)在properties中配置,在这个文件中不会经常改变,但随着系统规 ...

  7. Microservices Reference Architecture - with Spring Boot, Spring Cloud and Netflix OSS--转

    原文地址:https://www.linkedin.com/pulse/microservices-reference-architecture-spring-boot-cloud-anil-alle ...

  8. 综合使用spring cloud技术实现微服务应用

    在之前的章节,我们已经实现了配置服务器.注册服务器.微服务服务端,实现了服务注册与发现.这一章将实现微服务的客户端,以及联调.实现整个spring cloud框架核心应用. 本文属于<7天学会s ...

  9. Spring cloud实现服务注册及发现

    服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务. 本文属于<7天学会spring cloud系列& ...

  10. 使用spring cloud实现分布式配置管理

    <7天学会spring cloud系列>之创建配置管理服务器及实现分布式配置管理应用. 本文涉及到的项目: 开源项目:http://git.oschina.net/zhou666/spri ...

随机推荐

  1. LVS系列三、LVS集群-IP-TUN模式

    一.LVS-IP TUN集群概述 DR方式是通过MAC,规模是一个交换网络.而TUN方式,是通过给数据包加上新的IP头部来实现,这个可以跨整个广域网.TUN模式可以解决DR模式下不能跨网段的问题,甚至 ...

  2. Scrapy+redis实现分布式爬虫

    概述 什么是分布式爬虫 需要搭建一个由n台电脑组成的机群,然后在每一台电脑中执行同一组程序,让其对同一网络资源进行联合且分布的数据爬取. 原生Scrapy无法实现分布式的原因 原生Scrapy中调度器 ...

  3. laravel redis存数组并设置过期时间

    $data = [ 'zoneList'=>$zoneList, 'eqList' => $eqList, 'mdateList' => $mdateList ]; Redis::s ...

  4. .Netcore 2.0 Ocelot Api网关教程(3)- 路由聚合

    在实际的应用当中,经常会遇到同一个操作要请求多个api来执行.这里先假设一个应用场景:通过姓名获取一个人的个人信息(性别.年龄),而获取每种个人信息都要调用不同的api,难道要依次调用吗?在Ocelo ...

  5. 第四章 信息收集之nmap

    @nmap扫描工具 nmap是使用最广泛的扫描工具,主要的使用范围有,嗅探,扫描,ping. 局域网扫描 nmap扫描的基本命令: 首先在桌面右键选择open in terminal进入命令窗口,输入 ...

  6. 【HANA系列】SAP HANA SQL IFNULL和NULLIF用法与区别

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL IFN ...

  7. Django:(02)项目配置

    上一篇我们创建了一个Django项目,并且让它运行了起来了. 当是,我们还没有使用到我们创建的应用,以及templates模版目录. 需求: 在此之前我们根据需要对我们的项目进行配置修改. 在项目开发 ...

  8. Android MVC MVP MVVM (一)

    示例效果 一共三个控件,EditText,Button,TextView 成功显示账号信息,查询失败显示错误信息. <?xml version="1.0" encoding= ...

  9. Linux特殊权限位suid、sgid深度详细及实践

    特殊权限位基本说明: Linux系统基本权限位为9位权限,但还有额外3位权限位,共12位权限: suid    s(有x)     S    4   用户对应的权限位(用户对应的3位上) sgid  ...

  10. Linux 文件和目录的属性及权限

    一.Linux中的文件 1.1文件属性概述 Linux里一切皆文件! Linux系统中的文件或目录的属性主要包括;索引节点(inode).文件类型.权限属性.链接数.所归属的用户组.最近修改时间等内容 ...