续 Eureka+Hystrix+Zuul(Zuul API网关)
2024-08-31 20:41:22
概述:
服务的合并,转发,验证,异构协议。将上百个请求融为一个发送到后台,返回大的JSON返回处理;
作用:这减少了客户端与应用程序间的交互次数,还简化了客户端代码。
Zuul可以通过加载动态过滤机制,从而实现以下各项功能:
l 验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。
l 审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。
l 动态路由: 以动态方式根据需要将请求路由至不同后端集群处。
l 压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。
l 负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。
l 静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。
l 多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。
除此之外,Netflix公司还利用Zuul的功能通过金丝雀版本实现精确路由与压力测试。
具体实现:Eureka整合Zuul,并实现断路器
1.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>client.Zuul</groupId>
<artifactId>client-Zuul</artifactId>
<version>0.0.1-SNAPSHOT</version> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- Hystrix,Feign是基于Hystrix的 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> </project>
2.启动项 ZuulRunApp
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication
@EnableZuulProxy
public class ZuulRunApp { public static void main(String[] args) {
SpringApplication.run(ZuulRunApp.class, args);
} }
application.yml
server:
port: 8050
spring:
application:
name: client-Zuul
eureka:
client:
serviceUrl:
defaultZone: http://user:password123@localhost:8761/eureka
zuul:
routes:
app-a:
path: /user/**
serviceId: consumer-Hystrix
ZuulFallBack.java
package cn.hz.fallback; import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream; import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component; @Component
public class ZuulFallBack implements ZuulFallbackProvider{ @Override
public String getRoute() {
//为了通用,写了个*
return "*";
} @Override
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() { @Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
return headers;
} @Override
public InputStream getBody() throws IOException {
String msg = "This is responseContext!";
return new ByteArrayInputStream(msg.getBytes());
} @Override
public String getStatusText() throws IOException {
return HttpStatus.BAD_REQUEST.getReasonPhrase();
} @Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.BAD_REQUEST;
} @Override
public int getRawStatusCode() throws IOException {
return HttpStatus.BAD_REQUEST.value();
} @Override
public void close() { }
};
} }
执行:
依次启动:eurekaserver, provider , consumer , Zuul
确保访问正常后,关闭provider;
执行结果:http://localhost:8050/user/hello/82
最新文章
- OpenMesh 将默认的 float 类型改为 double 类型
- java 读取文件内容 三种形式及效率对比
- Java自定义异常类
- Spark和hadoop的关系
- Power Station POJ 4045
- Cmake调用NSIS(一个可执行文件,其实就是一个编译器)编译NSIS脚本问题研究
- 转载:Struts2+Jquery实现ajax并返回json类型数据
- 2014.06.20 (转)IEEE与论坛灌水
- CKPlayer 只调用HTML5播放器时全屏问题 这只是Chrome浏览器的渲染bug
- LOOKUP函数入门
- Git Learning2 GitHub upload
- linux系统(CentOS7)虚拟机上安装oracle 11g,解决oracle图形界面卡住无法点击next问题
- gitlab-ci + k8s 之gitlab-ci(一)
- Python中常用的模块
- 说说MySQL索引
- Node.js IO处理输入和回显,以及当今web应用程序的发展史
- arcgis python图形信息
- eclipse注释任务标记
- DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)
- VS2017下编译iconv