SprigCloud(六)Gatewayゲートウェイ
3568 ワード
目次
一.Gatewayゲートウェイの説明
1.Gateway配置
2.Gatewayブロック
一.Gatewayゲートウェイの説明
スプリング-cloud-Gatewayはスプリング-cloudのサブプロジェクトです.zulはnetflix社のプロジェクトで、springがspring-cloudに集めて使うだけです.もう一つの説はzul 2の連続ジャンプ券とzull 1の性能表現があまり理想的ではないので、spring孵化Gatewayプロジェクトが生まれたということです.総じて言えば、gatewayはzulよりも性能が優れています.
1.Gateway配置
まず、pom.xmlファイルに依存をインポートします.
2.Gatewayブロック
一.Gatewayゲートウェイの説明
1.Gateway配置
2.Gatewayブロック
一.Gatewayゲートウェイの説明
スプリング-cloud-Gatewayはスプリング-cloudのサブプロジェクトです.zulはnetflix社のプロジェクトで、springがspring-cloudに集めて使うだけです.もう一つの説はzul 2の連続ジャンプ券とzull 1の性能表現があまり理想的ではないので、spring孵化Gatewayプロジェクトが生まれたということです.総じて言えば、gatewayはzulよりも性能が優れています.
1.Gateway配置
まず、pom.xmlファイルに依存をインポートします.
org.springframework.cloud
spring-cloud-starter-gateway
server:
port: 8999
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: feign-customer
#lb://feign-customer
uri: lb://feign-customer
order: 0
predicates:
- Path=/foo/**
filters:
- StripPrefix=1
logging:
level:
org.springframework.cloud.gateway: debug
登録センターの有効性を表します.登録センターのサービス名を通じて、discovery.locator.enabled=trueを転送できます.ルートID-id:feign-customerが登録センターのサービスを指しています.lb:/サービスIDまたはhttp://localhost:8080完全なurl uri:lb:/feign-customerが行うという断言predicates:pathアドレスを表し、urlによると、fooで始まるとfeign-customerサービスに転送されます.ワイルドカードアドレス-Path=/foo/フィルタfilters:前から一つを切り取り、最初/fooを無視して、他の経路でStrip=Prefix転送します.2.Gatewayブロック
/**
* @Author wangyu
* @Description: Copyright 2019 yiYuan Networks . All rights reserved.
* @Date 2019/5/16
*/
@Component
public class WrapperResponseFilter implements GlobalFilter, Ordered {
@Override
public int getOrder() {
// -1 is response write filter, must be called before that
return -2;
}
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//
ServerHttpResponse originalResponse = exchange.getResponse();
DataBufferFactory bufferFactory = originalResponse.bufferFactory();
ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
@Override
public Mono writeWith(Publisher extends DataBuffer> body) {
//
if (body instanceof Flux) {
Flux extends DataBuffer> fluxBody = (Flux extends DataBuffer>) body;
return super.writeWith(fluxBody.map(dataBuffer -> {
// probably should reuse buffers
byte[] content = new byte[dataBuffer.readableByteCount()];
dataBuffer.read(content);
//
DataBufferUtils.release(dataBuffer);
String rs = new String(content, Charset.forName("UTF-8"));
Map response = new HashMap<>();
response.put("code","1");
response.put("message"," ");
response.put("data",rs);
// byte[] newRs = JSON.toJSONString(response).getBytes(Charset.forName("UTF-8"));
// originalResponse.getHeaders().setContentLength(newRs.length);// 。
//
return bufferFactory.wrap(rs.getBytes());
}));
}
return super.writeWith(body);
}
};
return chain.filter(exchange.mutate().response(decoratedResponse).build());
}
}