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() {
}
};
}
}
浙公网安备 33010602011771号