1.springcloud简介

SpringCloud是Spring旗下的项目之一,它是微服务架构的一种实现方式。

官网地址:http://projects.spring.io/spring-cloud/

Spring最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。

SpringCloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能。其主要涉及的组件包括:

Netflix:

  • Eureka:注册中心
  • Zuul:服务网关
  • Ribbon:负载均衡
  • Feign:服务调用
  • Hystrix:熔断器

场景模拟:

​ 现在来使用springboot创建两个微服务,为了方便直观,将服务的提供者命名为user-service,将服务的消费者命名为consumer-demo,我们利用这两个微服务之间的调用,来感受一下pringcloud这个全局的治理框架的作用

2.Eureka

废话不多说,直接上图!

renewal:续约

  • Eureka-Server:就是服务注册中心(可以是一个集群),对外暴露自己的地址。
  • 提供者:启动后向Eureka注册自己信息(地址,服务名称等),并且定期进行服务续约
  • 消费者:服务调用方,会定期去Eureka拉取服务列表,然后使用负载均衡算法选出一个服务进行调用。
  • 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

首先,Eureka是一个注册中心,和zookeeper功能类似,其中不同的一点是zookeeper是一个软件,启动直接可以使用,而Eureka是需要我们自己开发的。

下面对开发一个Eureka注册中心进项简单的解析:

1.首先一个简单的Eureka注册中心只需要一个依赖

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

2.其次,编写一个启动类,该类上加上一个注解

@SpringBootApplication
@EnableEurekaServer //开启Eureka注册服务
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class, args);
}
}

3.最后,编写该项目基本的配置文件

server:
port: 10086 #端口号
spring:
application:
name: eureka-server # 应用名称,会在Eureka中作为服务的id标识(serviceId)
eureka:
client:
service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要写其它Server的地址。
defaultZone: http://127.0.0.1:10086/eureka #注册的地址,如果是集群,应该用,隔开
register-with-eureka: false # 不注册自己
fetch-registry: false #不拉取服务

这样一个简单的Eureka就完成了,可以启动服务,访问http://127.0.0.1:10086,查看在该注册中心上注册的以及服务的基本信息。

服务的注册(客户端的开发):

​ Eureka开发完成之后,访问发现没有服务注册到Eureka中,现在我们要让user-serviceconsumer-demo注册到Eureka上。

​ 第一步:在需要注册的微服务中加入依赖

<!-- Eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

​ 第二步:在启动类上添加@EnableDiscoveryClient来开启Eureka客户端的功能

@SpringBootApplication
@EnableDiscoveryClient // 开启Eureka客户端发现功能
public class UserServiceDemoApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceDemoApplication.class, args);
}
}

​ 第三步:再次访问http://127.0.0.1:10086可以看到有两个服务注册到Eureka上

2.zuul

在微服务架构中,Zuul就是守门的大Boss!一夫当关,万夫莫开!

不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都会经过Zuul这个网关,然后再由网关来实现 鉴权、动态路由等等操作。Zuul就是我们服务的统一入口。

再来一张图:

这可以看出Zuul在整个架构中扮演着什么样的角色,其实zuul的主要作用有两个:过滤(鉴权)和路由

和Eureka相同,Zuul同样需要我们自己来开发

1.创建一个model,一个Zuul的的服务端应该导入下面这个依赖

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

2.编写启动类,这里要注意的是要打上@EnableZuulProxy开启zuul的网关功能

@SpringBootApplication
@EnableZuulProxy // 开启Zuul的网关功能
@EnableDiscoveryClient//开启Eureka的客户端发现
public class ZuulApplication { public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}

3.编写配置文件

server:
port: 10010 #服务端口
spring:
application:
name: api-gateway #指定服务名
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka #配置Eureka的地址,将zuul会代理Eureka上注册的服务
zuul:
prefix: /api # 添加路由前缀
routes:
user-service: /user-service/** # 这里是映射路径

这里的user-service在Eureka上注册的一个服务,这里配置了他的映射路径。路径就要以/api/user-service开头的请求都会被分发到该服务上。

Zuul是集成了另外一个组件负载均衡的组件Ribbon,所以,如果Eureka上有两个名称为user-service的服务,可以自动的进行负载均衡,默认的策略是轮询

熔断机制

Zuul还集成了Hystix熔断机制。但是所有的超时策略都是走的默认值,比如熔断的超时时间只有1S,也就是说,访问一个服务,如果1s没有响应,就判定为异常,我们也可以自己设置超时时间

hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 6000

SpringCloud及其五大常用组件之Eureka和Zuul的更多相关文章

  1. SpringCloud及其五大常用组件之Feign、Ribbon和Hystrix

    1.Feign 我们已经将Eureka和Zuul开发完毕,而且上面注册了两个微服务,现在我们实现两个微服务之间的调用. String baseUrl = "http://127.0.0.1: ...

  2. SpringCloud实战——(4)基于Eureka、Zuul

  3. SpringCloud 2020.0.4 系列之Eureka

    1. 概述 老话说的好:遇见困难,首先要做的是积极的想解决办法,而不是先去泄气.抱怨或生气. 言归正传,微服务是当今非常流行的一种架构方式,其中 SpringCloud 是我们常用的一种微服务框架. ...

  4. spring cloud要点简介及常用组件

    spring cloud基于spring boot spring cloud是通过包装其他技术框架实现的,例如OSS组件,实现了一套通过基于注解.java配置和基于模板开发的微服务框架. spring ...

  5. 跟我学SpringCloud | 第二篇:注册中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  6. springcloud学习(一)之Eureka

    前言 微服务原则上是应该有多个服务提供者的实例的,在通常情况下服务提供者的数量和分布往往是动态变化的,这样在传统的单体应用中的那种硬编码服务url进行远程调用的方式就不足取.服务注册中心就是为了解决服 ...

  7. java基础 常用组件

    几个常用组件: 在图形用户界面编程中,我们常常会提供用户登陆界面,比如登陆到会员管理系统,登陆到工资管理系统,仓库管理系统等,如下图我们就会用到: 1. 文本框(JTextField) 2. 密码框( ...

  8. Android常用组件

    UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...

  9. Android常用组件【转】

    UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...

随机推荐

  1. Vue之数据排序加签

    这篇随笔小编给大家带来的是数据排序加签: 所谓数据加签,就是把数据进行加密再传给后端,这样保证数据的秘密性.不容易被修改和获取:排序就是根据公司要求对字段进行排序,有些公司会把字段根据a-z排序,有些 ...

  2. Center OS 7安装 Apollo

    声明: 每个人的情况都不一样,所以大家在看教程的时候自行斟酌,最好先扫一遍,再来根据自身情况进行操作.同时,遇到的问题也可能不尽相同,要灵活处理. 了解: Apollo是从原始ActiveMQ的基础构 ...

  3. vue v-for 组件传值 enter传值

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. es6学习(一)

    之前一直听说es6,断断续续看过阮一峰老师的"ECMAScript 6 入门",觉得写得很好,但由于实际项目中没用到,所以并没有过多的去研究(人的惰性在我这里表现的淋漓尽致).直到 ...

  5. python系统模块

    Python中大多数系统接口都集中在两个模块:sys和os.这么说有点过于简单化 还有一些其他的表转模块也属于这个领域他们包括: glob 用于文件名的扩展 socket 用于网络连接和进程间通信(I ...

  6. unity 打包Apk生成签名证书keystore

    进行Android项目开发中想要将androidapp导出为apk的时候需要选择一个数字证书,即keystore文件(android.keystore),它用来对我们的APP进行签名,是导出APP的一 ...

  7. GetWindowLong

    函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值. 函数原型:LONG GetWindowLong(HWND hWnd,int nlndex): 参数: ...

  8. Hive创建表|数据的导入|数据导出的几种方式

    * Hive创建表的三种方式 1.使用create命令创建一个新表 例如:create table if not exists db_web_data.track_log(字段) partitione ...

  9. nginx+keepalive 实现高可用负载均衡方案

    转:http://ju.outofmemory.cn/entry/52165 主nginx负载均衡器:172.26.11.99  (通过keepalived配置了VIP:172.26.11.101供外 ...

  10. sqoop2安装总结

    sqoop2安装 1. 下载解压缩 此次安装版本为1.99.6 # Decompress Sqoop distribution tarball tar -xvf sqoop-<version&g ...