gateway网关配置参数 设备联网智能网关(4)
gateway网关配置参数

自定义Predicate
如果我们需要自定义Predicate,怎么玩呢?其实很简单,看源码,有样学样,需要继承AbstractRoutePredicateFactory类。
下面举个例子,需求是token值为abc的则匹配路由,怎么写呢,请看代码:
@Componentpublic class TokenRoutePredicateFactory extends AbstractRoutePredicateFactory<TokenRoutePredicateFactory.Config> { public static final String TOKEN_KEY = "tokenValue"; public TokenRoutePredicateFactory() { //当前类的Config类,会利用反射创建Config并赋值,在apply传回来 super(TokenRoutePredicateFactory.Config.class); } @Override public List<String> shortcutFieldOrder() { //"tokenValue"跟Config的接收字段一致 return Arrays.asList(TOKEN_KEY); } @Override public Predicate<ServerWebExchange> apply(Config config) { //这里获取的config对象就是下面自定义的Config对象 return new Predicate<ServerWebExchange>() { @Override public boolean test(ServerWebExchange exchange) { MultiValueMap<String, String> params = exchange.getRequest().getQueryParams(); //获取请求参数 String value = params.getFirst("token"); //请求参数和配置文件定义的token进行对比,相等则返回true return config.getTokenValue() != null && config.getTokenValue().equals(value); } }; } //用来接收配置文件定义的值 public static class Config { private String tokenValue; public String getTokenValue() { return tokenValue; } public void setTokenValue(String tokenValue) { this.tokenValue = tokenValue; } }}
这里需要注意的一点是类名必须是RoutePredicateFactory结尾,前面的则作为配置名。比如TokenRoutePredicateFactory的配置名则为Token,这是一个约定的配置。
接着在配置文件中加上该配置:
spring: cloud: gateway: routes: - id: user_1 uri: http://localhost:8080/user/getList predicates: - Token=abc ##使用TokenRoutePredicateFactory进行断言
然后用POSTMAN发送请求,带上token参数,参数值为abc。

如果token的值不正确的话,会报404。

整合注册中心
为什么要整合注册中心呢?因为每个服务一般背后都不只一台机器,而且一般使用服务名进行配置,而不是配置服务的IP地址,并且要实现负载均衡调用。
这里我就使用Nacos作为注册中心。
引入Maven依赖:
<dependency><!-- SpringCloud nacos服务发现的依赖 --> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>0.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement>
启动类加上注解,开启注册中心。
@SpringBootApplication@EnableDiscoveryClientpublic class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); }}
在application.yml加上配置:
spring: application: name: api-gateway cloud: nacos: discovery: server-addr: 127.0.0.1:8848 service: ${spring.application.name} gateway: routes: - id: consumer uri: lb://consumer #使用lb协议,consumer是服务名,不再使用IP地址配置 order: 1 predicates: - Path=/consumer/** #匹配/consumer/**的请求路径server: port: 9201
创建一个consumer也注册到nacos,并提供一个接口:
@RestControllerpublic class ConsumerController { @Value("${server.port}") private String port; @RequestMapping("consumer/getDetail/{id}") public String getDetail(@PathVariable("id") String id) { return "端口号:" + port + ",获取ID为:" + id + "的商品详情"; }}
启动consumer和gateway两个项目,然后打开nacos控制台,可以看到两个服务。
相关阅读
-
高级打印怎么改为普通打印 图片高级打印怎么改为普通打印
IT袋网为大家说一说高级打印怎么改为普通打印的相关话题,关于高级打印怎么改为普通打印 图片高级打印怎么改为普通打印,接下来一起来看看吧。 图文步骤: 1、点击电脑桌面左下角的开
-
如何看笔记本电脑的配置参数 最实用的办公笔记本电脑
今日重点为您介绍如何看笔记本电脑的配置参数和最实用的办公笔记本电脑的介绍,请看下面详细的介绍。 电脑的配置一般指电脑硬件配件的高档程度和性价比,计算机的性能主要取决于主要
-
腾讯文档在线表格怎么添加一行 腾讯文档在线表格怎么添加一行编辑
本文核心内容:腾讯文档在线表格怎么添加一行的IT知识,关于腾讯文档在线表格怎么添加一行 腾讯文档在线表格怎么添加一行编辑,接下来IT袋小编就来介绍。 腾讯文档的在线表格工具是现
-
抖音一起看会显示所有内容吗 抖音显示在线就一定在看抖音吗
小编为网友们解答抖音一起看会显示所有内容吗的电脑小知识,抖音一起看会显示所有内容,仅有主持人(即用户本人)能上下滑动切换视频,对播放的视频进行点赞、评论、转发等操作。


