每日笔记8.18

Gateway路由配置

两种方法,一种是通过application.yml文件配置,一种是写一个config的bean类,两种只取其一

yml配置

配置多个路由routes

spring:
  application:
    name: gateway-20000
  cloud:
    gateway:
      routes: #配置路由,本质是list集合List<RouteDefinition> routes
        - id: member_route01
          #gateway 的 url=uri+Path
#          gateway发来 http://localhost:20000/member/get/1
#          拆分http://localhost:20000  + /member/get/1
#           /member/get/1 与断言Path=/member/get/**匹配
#          后 url=uri+Path=  http://localhost:10001/member/get/1
          uri: http://localhost:10001
          predicates: #断言
            - Path=/member/get/**
        - id: member_route02
          uri: http://localhost:10001
          predicates:
            - Path=/member/save
        - id: member_route03
          uri: http://www.baidu.com
          predicates:
            - Path=/

config配置

@Configuration
public class GateWayRoutesConfig {

    //配置 cloud:
    //    gateway:
    //      routes 路由
    @Bean
    public RouteLocator myRouteLocator04(RouteLocatorBuilder routeLocatorBuilder){

        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();

//         - id: member_route02
//          uri: http://localhost:10001
//          predicates:
//            - Path=/member/save
//        这里用了lambda表达式 r -> r.path
      return  routes.route("member_route04",r -> r.path("/member/get/**")
                .uri("http://localhost:10001")).build();
    }

}

通过使用routeLocatorBuilder创建一个路由,然后通过route方法来进行配置,其中

r -> r.path("/member/get/**")
          .uri("http://localhost:10001")

是lambda表达式,返回的是函数接口Function<PredicateSpec, AsyncBuilder>

route方法底层源码,

        public RouteLocatorBuilder.Builder route(String id, Function<PredicateSpec, AsyncBuilder> fn) {
            AsyncBuilder routeBuilder = (AsyncBuilder)fn.apply((new RouteLocatorBuilder.RouteSpec(this)).id(id));
            this.add(routeBuilder);
            return this;
        }

r表示PredicateSpec类,也就是说,函数接口Function<A, B>是通过传入A类,返回B类,.path和uri也就是PredicateSpec类的方法,其中apply则是函数接口Function的方法

@FunctionalInterface
public interface Function<T, R> {

    /**
     * Applies this function to the given argument.
     *
     * @param t the function argument
     * @return the function result
     */
    R apply(T t);

R apply(T t) 就是传入T参数,根据t设置对应的R类型(比如new R(t)),返回R。

负载均衡算法配置

在config层只需添加算法bean

@Configuration
public class RibbonRule {

    //配置自己的负载均衡算法
    @Bean
    public IRule myRibbonRule(){
        //设置算法RandomRule:随机请求
        return new RandomRule();
    }
}

然后再运行类添加注解@RibbonClient指定算法即可

@RibbonClient(name = "MEMBER-SERVICE-PROVIDER",configuration = RibbonRule.class)
//指定负载均衡算法为RibbonRule类中的myRibbonRule(RandomRule算法)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值