④. 硬编码 注入RouteLocator的Bean
- ①. 当我们访问http://localhost:9527/guonei 会跳转到http://news.baidu.com/guonei(了解)
@Configuration public class GateWayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) { RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes(); /* id相当于yml中配置的唯一标识 当你访问http://localhost:9527/guonei 就会跳转到http://news.baidu.com/guonei */ routes.route("path_rote_xiaozhi", r -> r.path("/guonei") .uri("http://news.baidu.com/guonei")).build(); return routes.build(); } @Bean public RouteLocator customRouteLocator2(RouteLocatorBuilder builder) { RouteLocatorBuilder.Builder routes = builder.routes(); routes.route("path_route_xiaozhi2", r -> r.path("/guoji").uri("http://news.baidu.com/guoji")).build(); return routes.build(); } }
⑤. 通过微服务名实现动态路由
- ①. 默认情况下Gateway会根据注册中心注册的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能
- ②. 一个eureka7001 + 两个服务提供者8001/8002
③. YML 掌握
- 需要注意的是uri的协议为lb,表示启用Gateway的负载均衡功能
- lb://serviceName是spring cloud gateway在微服务中自动为我们创建的负载均衡uri
server: port: 9527 spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由 routes: - id: payment_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名 #uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://CLOUD-PAYMENT-SERVICE #匹配后提供服务的路由地址 predicates: - Path=/payment/get/** #断言,路径相匹配的进行路由 - id: payment_routh2 #uri: http://localhost:8001 uri: lb://CLOUD-PAYMENT-SERVICE #匹配后提供服务的路由地址 predicates: - Path=/payment/lb/** #断言,路径相匹配的进行路由 eureka: instance: hostname: cloud-gateway-service client: service-url: register-with-eureka: true fetch-registry: true defaultZone: http://eureka7001.com:7001/eureka
④. 测试:http://localhost:9527/payment/lb (8001/8002两个端口切换)