Solon

使用网关

</> markdown

使用网关,为同一套接口提供不同的输出(Solon 自带)

网关的技术本质,是一个定制了的 Solon Handler。如此理解,新切感会好些:)

//网关1
@Mapping("/api/rest/**")
@Component
public class Gateway1 extends Gateway {
    @Override
    protected void register() {
        //设定默认render
        before(c -> c.attrSet("@render", "@json"));

        //添加服务
        add("user", UserServiceImpl.class, true);

    }
}

//网关2
@Mapping("/api/rpc/**")
@Component
public class Gateway2 extends Gateway {
    @Override
    protected void register() {
        //设定默认render
        before(c -> c.attrSet("@render", "@type_json"));

        //添加服务(不带mapping的函数;需要 remoting = true,才会加载出来)
        add("user", UserServiceImpl.class, true);
    }
}

//网关3(这个比较复杂,和实战性)
@Mapping("/api/v2/app/**")
@Component
public class Gateway3 extends UapiGateway {
    @Override
    protected void register() {
    
        filter(new BreakerFilter()); //融断过滤器

        before(new StartHandler()); //开始计时
        before(new ParamsParseHandler()); //参数解析
        before(new ParamsSignCheckHandler(new Md5Encoder())); //参数签名较验
        before(new ParamsRebuildHandler(new AesDecoder())); //参数重构

        after(new OutputBuildHandler(new AesEncoder())); //输出构建
        after(new OutputSignHandler(new Md5Encoder())); //输出签名
        after(new OutputHandler()); //输出
        after(new EndBeforeLogHandler()); //日志
        after(new EndHandler("v2.api.app")); //结束计时

        addBeans(bw -> "api".equals(bw.tag()));
    }
}