SpringCloud及其五大常用组件之Eureka和Zuul
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-service
和consumer-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的更多相关文章
- SpringCloud及其五大常用组件之Feign、Ribbon和Hystrix
1.Feign 我们已经将Eureka和Zuul开发完毕,而且上面注册了两个微服务,现在我们实现两个微服务之间的调用. String baseUrl = "http://127.0.0.1: ...
- SpringCloud实战——(4)基于Eureka、Zuul
- SpringCloud 2020.0.4 系列之Eureka
1. 概述 老话说的好:遇见困难,首先要做的是积极的想解决办法,而不是先去泄气.抱怨或生气. 言归正传,微服务是当今非常流行的一种架构方式,其中 SpringCloud 是我们常用的一种微服务框架. ...
- spring cloud要点简介及常用组件
spring cloud基于spring boot spring cloud是通过包装其他技术框架实现的,例如OSS组件,实现了一套通过基于注解.java配置和基于模板开发的微服务框架. spring ...
- 跟我学SpringCloud | 第二篇:注册中心Eureka
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...
- springcloud学习(一)之Eureka
前言 微服务原则上是应该有多个服务提供者的实例的,在通常情况下服务提供者的数量和分布往往是动态变化的,这样在传统的单体应用中的那种硬编码服务url进行远程调用的方式就不足取.服务注册中心就是为了解决服 ...
- java基础 常用组件
几个常用组件: 在图形用户界面编程中,我们常常会提供用户登陆界面,比如登陆到会员管理系统,登陆到工资管理系统,仓库管理系统等,如下图我们就会用到: 1. 文本框(JTextField) 2. 密码框( ...
- Android常用组件
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
- Android常用组件【转】
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
随机推荐
- 2018-12-21-微软最具价值专家-MVP-如何获得-Resharper-的免费功能
title author date CreateTime categories 微软最具价值专家 MVP 如何获得 Resharper 的免费功能 lindexi 2018-12-21 11:29:0 ...
- Logstash详解之——filter模块-grok插件
1. grok插件:能匹配一切数据,但是性能和对资源的损耗也很大. grok内置字段类型参见: https://blog.csdn.net/cui929434/article/details/9439 ...
- etimer
Contiki包含一个时钟模型和5个定时器模型(timer, stimer, ctimer, etimer, and rtimer),先学习etimer吧. etimer是一个结构体,(个人用eve ...
- 预防定时重启apache服务没有起来的脚本
内容如下: #!/bin/bash test=$(ps aux | grep httpd | grep -v grep) if [ -n "$test" ] then echo & ...
- PKUSC订正
Day1 T2:最大前缀和 枚举答案集合(不直接枚举答案数,相当于状态的离散化),这个集合成为答案当且仅当存在方案使得答案集合的排列后缀和>=0(如果<0就可以去掉显然更优),答案补集的前 ...
- 一起看下Apache1.3.22版本改进和修正了啥?
Apache 1.3.20 - 1.3.22主要改进: 安全弱点: 1.在Apache1.3.20的win32平台上发现了一个漏洞.如果客户端发送一个非常长的URI可能导致用目录列表来代替缺省主页.4 ...
- Delphi ADOQuery的属性 locktype、CursorLocation 、Filter、CursorType、CancelBatch 和 UpdateBatch
以下数据,部分来自网络的收集,部分为自己测试后的原创整理,希望对你有帮助,更新会注明日期. 1.locktype 指定用户打开数据集时对数据集的锁定级别: ltUnspecified 未指定锁定 ...
- 【转载】查看Linux进程CPU过高具体的线程堆栈(不中断程序)
具体的命令经常忘记,毕竟用的不是很多.为了避免去找备份一下 1.TOP命令,找到占用CPU最高的进程 $ top top - 20:11:45 up 850 days, 1:18, 3 users ...
- delphi 特殊窗体
delphi 窗体阴影 放窗体创建事件里面 SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHAD ...
- BZOJ 4031: [HEOI2015]小Z的房间(Matrix Tree)
传送门 解题思路 矩阵树定理模板题.矩阵树定理是求图中最小生成树个数,做法是首先求出基尔霍夫矩阵,就是度数矩阵\(-\)邻接矩阵.然后再求出这个矩阵的行列式,行列式的求法就是任意去掉一行一列,然后高斯 ...