ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、回顾一下配置文件的方式 ~~~ server: port: 8777 spring: application: name: zimug-server-gateway cloud: gateway: routes: - id: zimug-blog # 路由 ID,唯一 uri: http://zimug.com/ # 目标 URI,路由到微服务的地址 predicates: # 请求转发判断条件 - Path=/category/** # 匹配对应 URL 的请求,将匹配到的请求追加在目标 URI 之后 ~~~ * routes指的是配置路由转发规则,可以配置多个 * 每一个route有一个id,标识该路由的唯一性 * uri指的是请求转发的目标 * predicates是请求转发的判断条件,我们的例子使用的Path条件判断 上面的路由配置的含义是当我们访问:`http://<gateway-ip>:8777/category/**`的时候,请求被转发到`http://www.zimug.com/category/**`,其中`**`匹配任意字符。 ## 二、编码方式实现路由 下面的代码可以实现和配置文件实现方式一样的效果,所有的在配置文件中可以实现的predicates匹配规则,RouteLocatorBuilder 都有对应的api函数提供实现方法。 ~~~ @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("zimug-blog", r -> r.path("/category/**") .uri("http://zimug.com")) .build(); } ~~~ route方法的第一个参数是路由id,第二个参数是一个Function(函数式编程),通过传入lambda表达式来判断匹配规则。 ![](https://img.kancloud.cn/ab/0e/ab0ee85a4c6381a82af888874993ea2d_1168x160.png) > 关于java8的lambda表达式以及函数式编程,我之前写过一系列的文章,参考学习资料:[https://www.kancloud.cn/hanxt/javacrazy/1575714](https://www.kancloud.cn/hanxt/javacrazy/1575714) 编码方式实现Predicate路由匹配规则,比配置文件的方式更繁琐一些,但是它也不是一无是处!**配置文件方式的多个predicates组合只能表达“and并且”的关系,而编码方式还可以表达“or或者”的关系。**如下图所示: ![](https://img.kancloud.cn/96/4e/964edab1194be436beb3ca44c6548883_1064x292.png) 但是笔者一般工作中很少使用编码方式实现路由的配置,因为编码代表着“写死”,也就是静态的。我们更希望配置是可以动态更新的,配置文件的方式结合nacos可以实现路由配置的动态更新,后面的章节我们再去介绍!