• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
飝飝JAVA
博客园    首页    新随笔    联系   管理    订阅  订阅

SpringCloud

http://www.ityouknow.com/springcloud/2017/06/01/gateway-service-zuul.html
http://blog.csdn.net/forezp/article/details/69939114
http://blog.csdn.net/dream_broken/article/details/77097219

spring.application.name=gateway-service-zuul zuul注册中心
server.port=8888

zuul.routes.baidu.path=/it/**
zuul.routes.baidu.url=http://www.ityouknow.com/ 直接进行转发

zuul网关的启动类
@SpringBootApplication
@EnableZuulProxy 启动类添加@EnableZuulProxy,支持网关路由
public class GatewayServiceZuulApplication {

public static void main(String[] args) {
	SpringApplication.run(GatewayServiceZuulApplication.class, args);
}

}
启动gateway-service-zuul-simple项目,在浏览器中访问:http://localhost:8888/it/spring-cloud,
看到页面返回了:http://www.ityouknow.com/spring-cloud 页面的信息,如下:

spring.application.name=gateway-service-zuul
server.port=8888

zuul.routes.api-a.path=/producer/**
zuul.routes.api-a.serviceId=spring-cloud-producer

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

package com.fei.springcloud.fallback;  
  
import java.io.ByteArrayInputStream;  
import java.io.IOException;  
import java.io.InputStream;  
  
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;  
import org.springframework.stereotype.Component;  
  
import com.alibaba.fastjson.JSONObject;  
  
/** 
 * 向用户管理api-user-server路由发起请求失败时的回滚处理 
 * hystrix的回滚能力 
 * @author Jfei 
 * 
 */  
@Component  
public class ServerFallback implements ZuulFallbackProvider{  
  
      
    @Override  
    public String getRoute() {  
        return "api-user-server";//api服务id,如果需要所有调用都支持回退,则return "*"或return null  
    }  
    /** 
     * 如果请求用户服务失败,返回什么信息给消费者客户端 
     */  
    @Override  
    public ClientHttpResponse fallbackResponse() {  
          
        return new ClientHttpResponse(){  
  
            @Override  
            public InputStream getBody() throws IOException {  
                JSONObject r = new JSONObject();  
                r.put("state", "9999");  
                r.put("msg", "系统错误,请求失败");  
                return new ByteArrayInputStream(r.toJSONString().getBytes("UTF-8"));  
            }  
  
            @Override  
            public HttpHeaders getHeaders() {  
                HttpHeaders headers = new HttpHeaders();  
                //和body中的内容编码一致,否则容易乱码  
                headers.setContentType(MediaType.APPLICATION_JSON_UTF8);  
                return headers;  
            }  
  
            /** 
             * 网关向api服务请求是失败了,但是消费者客户端向网关发起的请求是OK的, 
             * 不应该把api的404,500等问题抛给客户端 
             * 网关和api服务集群对于客户端来说是黑盒子 
             */  
            @Override  
            public HttpStatus getStatusCode() throws IOException {  
                  
                return HttpStatus.OK;  
            }  
  
            @Override  
            public int getRawStatusCode() throws IOException {  
                  
                return HttpStatus.OK.value();  
            }  
  
            @Override  
            public String getStatusText() throws IOException {  
                  
                return HttpStatus.OK.getReasonPhrase();  
            }  
  
            @Override  
            public void close() {  
                  
                  
            }  
              
        };  
    }  
  
}
posted @ 2018-01-22 09:47  飝飝JAVA  阅读(117)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3