前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud-Zuul服务网关[容错Hystrix]

SpringCloud-Zuul服务网关[容错Hystrix]

作者头像
用户4919348
发布2019-06-24 10:03:49
5320
发布2019-06-24 10:03:49
举报
文章被收录于专栏:波波烤鸭波波烤鸭

  zuul作为网关服务,用来分配调度其他服务的,那么难免就会出现调用的服务出现问题的请求,或者用户访问急剧增多的情况,那么此时我们的网关服务就应该具有容错能力,zuul本身也考虑到了这点,所以默认集成的有Hystrix。

一、zuul 和 hystrix 无缝结合

  在 zuul 的 jar 包中包含了 hystrix 的 jar 包。所以我们不需要在项目中添加 Hystrix 的坐标。

在这里插入图片描述
在这里插入图片描述

二、访问网关服务的数据监控流

  启动我们的provider的服务和网关服务后,就可以查看到对应的数据监控流了,如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、启动dashboard-view服务可视化查看

  启动dashboard-view服务我们可以很方便的查看监视的数据,

在这里插入图片描述
在这里插入图片描述

四、服务降级处理

  接下来我们看下在网关服务中怎么实现服务的降级处理

1.创建项目

在这里插入图片描述
在这里插入图片描述

2.pom文件

代码语言:javascript
复制
<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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.13.RELEASE</version>
	</parent>
	<groupId>com.bobo</groupId>
	<artifactId>zuul-gateway-fallback</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR5</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zuul</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

3.配置文件

代码语言:javascript
复制
spring.application.name=zuul-gateway-fallback
server.port=9030
#\u8BBE\u7F6E\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740\uFF0C\u6307\u5411\u53E6\u4E00\u4E2A\u6CE8\u518C\u4E2D\u5FC3
eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/

4.添加ProviderProductFallback类

  创建一个java类,实现ZuulFallbackProvider接口,并重写相关方法,具体如下:

代码语言:javascript
复制
package com.bobo.zuul.fallback;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;

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;

/**
 * 商品服务的服务降级的工具类
 * 
 * @author dengp
 *
 */
@Component
public class ProviderProductFallback implements ZuulFallbackProvider {

	@Override
	public ClientHttpResponse fallbackResponse() {
		// 设置降级后给客户端响应的信息
		return new ClientHttpResponse() {
			
			/**
			 * 设置相关的header信息
			 */
			@Override
			public HttpHeaders getHeaders() {
				HttpHeaders header = new HttpHeaders();
				// 返回json数据
				MediaType mt = new MediaType("application","json",Charset.forName("utf-8"));
				header.setContentType(mt);
				return header;
			}
			/**
			 * 设置响应的内容
			 */
			@Override
			public InputStream getBody() throws IOException {
				
				return new ByteArrayInputStream("product服务不可用,请于管理员联系!".getBytes());
			}
			
			/**
			 * 返回状态码
			 */
			@Override
			public String getStatusText() throws IOException {
				// TODO Auto-generated method stub
				return this.getStatusCode().getReasonPhrase();
			}
			
			@Override
			public HttpStatus getStatusCode() throws IOException {
				// TODO Auto-generated method stub
				return HttpStatus.OK;
			}
			
			@Override
			public int getRawStatusCode() throws IOException {
				// TODO Auto-generated method stub
				return this.getStatusCode().value();
			}
			
			@Override
			public void close() {
				
			}
		};
	}

	/**
	 * 对哪个服务做降级处理
	 */
	@Override
	public String getRoute() {

		return "e-book-product";
	}

}

关闭provider服务,启动网关服务访问查看:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年06月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、zuul 和 hystrix 无缝结合
  • 二、访问网关服务的数据监控流
  • 三、启动dashboard-view服务可视化查看
  • 四、服务降级处理
    • 1.创建项目
      • 2.pom文件
        • 3.配置文件
          • 4.添加ProviderProductFallback类
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档