spring cloud zuul网关

1.新建模块spring boot工程
2.引入依赖:

     <!--  eureka-client依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.1.5.RELEASE</version>
        </dependency>

        <!--zuul依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>

在启动类添加注解:

@EnableEurekaClient  服务提供者
@EnableZuulProxy     //开启zuul

配置yml文件:

spring:
  application:
    name: service-zuul
server:
  port: 5000
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

zuul:
  routes:     #下面目录的个数应该对应项目模块数吧
    providerAPI:    #该词是自定义的,对应自己的某一个工程
      #可以使以“/provapi”开头的RTL路由到eureka-client
      path: /provapi/**           #自定义的路径
      serviceID: eureka-client    #对应服务提供者的工程名

    ribbonAPI:
      path: /ribbonapi/**
      serviceID: eureka-ribbon-client
    feignAPI:
      path: /feignapi/**
      serviceID: eureka-feign-client
  #stripPrefix: false




访问:
在这里插入图片描述
再次访问;
在这里插入图片描述

2.在zuul添加熔断器
实现接口:

package com.wxz.eurekazuulclient.netflixHystrix;

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 java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author Wangxingze
 * @date 2019-08-24 01:11
 */

/**
 * 路由到eureka-client服务的熔断器
 */
public class EurekaClientHystrix implements FallbackProvider {

    /**
     * 指定熔断器作用与哪一个服务
     * @return
     */
    @Override
    public String getRoute() {
        return "eureka-client";
    }

    /**
     * 快速失败的执行逻辑板
     * @param route
     * @param cause
     * @return 必须返回一个 clientresponse
     */
    @Override
    public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
        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("oh! 我是fallback".getBytes());
            }

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders headers=new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_JSON);
                return headers;
            }
        };
    }
}

正常访问:
在这里插入图片描述
关闭服务提供者:eureke-client的所有实例再次访问

在这里插入图片描述
可是这里还是显示的是在服务消费者里面配置的快速失败返回的数据啊。。。

oh上面应该直接访问服务提供者啊啊啊啊啊啊啊啊,所以我们正常访问一下服务提供者,而不在通过消费者去调用
在这里插入图片描述
成功,并且有了负载均衡。
关闭服务提供者,再次访问
在这里插入图片描述
ok.
所以上面访问消费者时,因为在消费者服务上加了熔断器,所以直接在快速失败函数返回了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值