spring cloud zuul 配置

mac2022-06-30  76

 

参考: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

 

转载于:https://www.cnblogs.com/douJiangYouTiao888/p/9258446.html

最新回复(0)