spring cloud zuul 配置
参考:http://www.ityouknow.com/springcloud/2017/06/01/gateway-service-zuul.html
spring boot版本:2.0.3.RELEASE
pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!-- 通过注册中心调用时需要引入此依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
application.properties
可以手动配置固定地址调用,也可以通过注册中心调用,二选一
spring.application.name=gateway-service-zuul-wly
server.port=8088
#1.显式将所有/wly/**请求转发给http://localhost:8081处理,例如/wly/a等同于http://localhost:8081/a
#zuul.routes.wly.path=/wly/**
#zuul.routes.wly.url=http://localhost:8081
#2.配置注册中心地址,默认通过注册中心调用,规则“/注册中心serviceId/xxx”
eureka.client.serviceUrl.defaultZone=http://localhost:8765/eureka/
启动类
package com.wang.springcloudzuul; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication
@EnableZuulProxy
public class SpringcloudzuulApplication { public static void main(String[] args) {
SpringApplication.run(SpringcloudzuulApplication.class, args);
}
}
启动一个注册中心、1个生产者、2个消费者、1个zuul服务,如下图:

单独访问消费者服务
http://localhost:8081/a/c?name=sb
页面
Hello World!sb
使用zuul通过eureka多次访问消费者服务
http://localhost:8088/spring-cloud-consumer/a/c?name=sb
页面
Hello World!sb
查看控制台日志
多次请求zuul的服务,请求会被分发到不同的消费者服务里
zuul服务熔断机制
新增一个类
package com.wang.springcloudzuul.fallback; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
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; import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream; /**
* @Author wly
* @Date 2018/7/3 15:53
*/
@Component
public class ProducerFallBack implements FallbackProvider {
private final Logger logger = LoggerFactory.getLogger(FallbackProvider.class); /**
* 定义对那个服务做熔断
* @return
*/
@Override
public String getRoute() {
return "spring-cloud-provider";
} /**
* 提供者路由熔断返回值
*
* @return
*/
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() {
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
} @Override
public int getRawStatusCode() throws IOException {
return 200;
} @Override
public String getStatusText() throws IOException {
return "OK";
} @Override
public void close() { } @Override
public InputStream getBody() throws IOException {
return new ByteArrayInputStream("The service is unavailable.".getBytes());
} @Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return headers;
}
};
} @Override
public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
if (cause != null && cause.getCause() != null) {
String reason = cause.getCause().getMessage();
logger.info("Excption {}", reason);
}
return fallbackResponse();
}
}
当服务调用失败,会返回
The service is unavailable.
zuul服务重连机制
pom.xml新增配置
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
applicaiton.yml新增配置
#服务重试功能
zuul.retryable=true
#重试次数
ribbon.MaxAutoRetries=2
#重试其他实例的最大次数
ribbon.MaxAutoRetriesNextServer=0
提供者controller
package com.wang.eurekaprovider.controller; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @Author wly
* @Date 2018/6/27 16:15
*/
@RestController
@RequestMapping("/a")
public class HelloController {
@RequestMapping("/b")
public String hello(String name) throws InterruptedException {
System.out.println("11111111111111111");
Thread.sleep(100000L);
return "Hello World!" + name;
}
}
服务调用失败后自动重试
通过zuul访问http://localhost:8088/spring-cloud-provider/a/b?name=sb
控制台输出3次:11111111111111111
spring cloud zuul 配置的更多相关文章
- spring cloud zuul 配置(Robbin 和 熔断)
#启动负载均衡的重试机制,默认falsespring.cloud.loadbalancer.retry.enabled=true#Hystrix是否启用超时时间hystrix.command.defa ...
- spring cloud: zuul(二): zuul的serviceId/service-id配置(微网关)
spring cloud: zuul(二): zuul的serviceId/service-id配置(微网关) zuul: routes: #路由配置表示 myroute1: #路由名一 path: ...
- spring cloud: zuul: 微网关-简单使用与路由配置
spring cloud: zuul: 微网关-简单使用与路由配置 首先引入依赖 <dependency> <groupId>org.springframework.cloud ...
- Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。
时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...
- 笔记:Spring Cloud Zuul 快速入门
Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...
- Spring Cloud Zuul 限流详解(附源码)(转)
在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. ...
- Spring Cloud Zuul 中文文件上传乱码
原文地址:https://segmentfault.com/a/1190000011650034 1 描述 使用Spring Cloud Zuul进行路由转发时候吗,文件上传会造成中文乱码“?”.1. ...
- spring cloud zuul参数调优
zuul 内置参数 zuul.host.maxTotalConnections 适用于ApacheHttpClient,如果是okhttp无效.每个服务的http客户端连接池最大连接,默认是200. ...
- Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...
随机推荐
- (转)Asp.Net Mvc视图引擎Razor介绍
Asp.Net Mvc视图引擎Razor介绍 1.Razor介绍 程序园原创,转载请注明:http://www.kwstu.com/ArticleView/dabaomvc_2014082408205 ...
- linux安装使用xdebug
我还是来给大家一个正确的配方,每个人的php版本不一样 所以下载的xdebug应该是不一样的 1,https://xdebug.org/wizard.php 进入这个网页 把自己phpinfo的信 ...
- Oracle 12c 创建用户
本文转载自 http://blog.itpub.net/29047826/viewspace-1453577/,侵删. 12c推出了可插拔库,管理用户也分为两种:本地用户和公用用户.本地用户是指在 ...
- multi-threads JavaEE 容器
Thread -- Request What is recommended way for spawning threads from a servlet in Tomcat [duplicate] ...
- fgets()函数读取键盘,去掉换行符或丢弃多余的字符
在上一遍随笔中,我们知道可以用fgets()函数来代替不安全的gets()函数.fgets函数中的第二个参数限制了读取的个数. 上篇文章也提到,fgets是会读取回车换行符的.有时候我们并不希望在字符 ...
- CI中使用log4php调试程序
下载log4php.我下载的版本是:apache-log4php-2.3.0-src.zip.借压缩,将压缩文件中的src/main/php/文件夹拷贝到CI的application/thrid_pa ...
- maven备忘
maven常见命令 mvn clean mvn compile mvn package mvn clean compile package mvn -Djetty.port= jetty:run mv ...
- Object的原型拷贝-create、assign、getPrototypeOf 方法的结合
一.实现原型拷贝 1.1.代码 tips:为了体现原型链,写了继承实现的代码,这部分可跳过- <script> /* 创建包含原型链的实验对象obj1-- start */ ...
- 【转】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。
检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 ...
- Java学习--JavaWeb简介