参考: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 配置的更多相关文章

  1. spring cloud zuul 配置(Robbin 和 熔断)

    #启动负载均衡的重试机制,默认falsespring.cloud.loadbalancer.retry.enabled=true#Hystrix是否启用超时时间hystrix.command.defa ...

  2. spring cloud: zuul(二): zuul的serviceId/service-id配置(微网关)

    spring cloud: zuul(二): zuul的serviceId/service-id配置(微网关) zuul: routes: #路由配置表示 myroute1: #路由名一 path: ...

  3. spring cloud: zuul: 微网关-简单使用与路由配置

    spring cloud: zuul: 微网关-简单使用与路由配置 首先引入依赖 <dependency> <groupId>org.springframework.cloud ...

  4. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

  5. 笔记:Spring Cloud Zuul 快速入门

    Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...

  6. Spring Cloud Zuul 限流详解(附源码)(转)

    在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. ...

  7. Spring Cloud Zuul 中文文件上传乱码

    原文地址:https://segmentfault.com/a/1190000011650034 1 描述 使用Spring Cloud Zuul进行路由转发时候吗,文件上传会造成中文乱码“?”.1. ...

  8. spring cloud zuul参数调优

    zuul 内置参数 zuul.host.maxTotalConnections 适用于ApacheHttpClient,如果是okhttp无效.每个服务的http客户端连接池最大连接,默认是200. ...

  9. Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务

    API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...

随机推荐

  1. Eclipse打开时“发现了以元素'd:skin'”开头的无效内容。此处不应含有子元素的解决方法

    把有问题的 devices.xml 文件删除,再在sdk 里面 tools\lib 下找到devices.xml 文件,将这个文件拷贝到你删除的那个文件夹里,重启 eclipse 就 OK 啦!

  2. 新建用户组、用户、用户密码、删除用户组、用户(适合CentOS、Ubuntu系统)

    这个知识点,模糊了好久.!!! 生产中,习惯如下: useradd,默认会将自身新建用户,添加到同名的用户组中.如,useradd zhouls,执行此命令后,默认就添加到同名的zhouls用户组中. ...

  3. 查找checked的checkbox和raido

    <fieldset id="checkArray"> <input type="checkbox" name="chk[]" ...

  4. 弗格森&红魔

    本周日曼联对阵斯旺西时,一位名叫皮特-莫利纽克斯的58岁老人,将会举起一张老旧的床单,就如他曾做过的那样.那一次“臭名昭着”的行为要追溯到1989年12月,弗格森当时已经来到了悬崖边上,他的背后是一堵 ...

  5. 第七章、Linux 文件与目录管理

    第七章.Linux 文件与目录管理   1. 目录与路径 1.1 相对路径与绝对路径 1.2 目录的相关操作: cd, pwd, mkdir, rmdir 1.3 关於运行档路径的变量: $PATH ...

  6. Bitcoin交易及验证

    目录 UTXO 理解 交易的结构 交易的确认 交易验证 逆波兰表示法 使用逆波兰表示法验证交易 UTXO 理解 未花费交易输出: Unspent Transxtion output UTXO---用比 ...

  7. mysql存储之int

    开始之前给大家出个问题,数据库表test中两个字段  a int(2),b int(3),现在想执行下面的插入语句 ,) 思考是否可以插入? 答案是能插入 再看下面的语句 ,) 思考能不能插入?注意第 ...

  8. 搭建nginx代理,为前端页面跨域调用接口

    前端同学因开发需要,本地搭建的服务需要调用其它域名的接口,在帮助正确配置后,已能正常使用. 这里写一篇博客,记录一下. 前端页面地址为127.0.0.1:9813/a.html 接口地址http:// ...

  9. 网络IO之阻塞、非阻塞、同步、异步总结【转】

    1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解.网上有详 ...

  10. css的四种书写方式

    优先级: 外部样式 < 内部样式表 < 内联样式表: 优先级,即:同名的选择器右边的会覆盖左边 1.内部样式表 <head> <style> /*内部样式表,一般用 ...