首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从0.5到1写个rpc框架 - 7:网关支持(gateway)

从0.5到1写个rpc框架 - 7:网关支持(gateway)

作者头像
acupt
发布2019-08-26 11:28:12
9950
发布2019-08-26 11:28:12
举报
文章被收录于专栏:一杯82年的JAVA一杯82年的JAVA

微服务除了在内部相互调用,有时某些服务也会提供给外部应用。当然不能让外部应用也加入到“大家庭”里,毕竟知人知面不知源码,我们可以派出一个“前台”去接待它们,这就是“网关”。

网关负责对接外部来宾,因此要做好安全措施,什么登陆、权限该上就上。

流程如下:

  • 网关收到请求
  • 解析请求(服务名,方法,参数等)
  • 选择一个实例(来自注册中心)
  • RPC调用
  • 结果返回给请求方
@RestController
@RequestMapping("/api")
public class ApiController {

    /**
     * 动态调用rpc服务的关键,在acuprpc-spring-boot-starter中已经生成,可以随时引用
     */
    private RpcClientManager rpcClientManager;

    public ApiController(RpcClientManager rpcClientManager) {
        this.rpcClientManager = rpcClientManager;
    }

    @RequestMapping(method = RequestMethod.POST, produces = "application/json")
    public Object invoke(@RequestBody RpcRequestDTO requestDTO) {
        RpcServiceInfo serviceInfo = new RpcServiceInfo(requestDTO.getApp(), requestDTO.getService());
        RpcClient client = rpcClientManager.lookup(serviceInfo);//获取一个可以提供所需服务的连接
        RpcRequest request = new RpcRequest(requestDTO.getApp(), requestDTO.getService(), requestDTO.getMethod());
        if (requestDTO.getParameters() != null) {
            Map<String, String> map = new HashMap<>();
            requestDTO.getParameters().forEach((k, v) -> map.put(k, JsonUtil.toJson(v)));
            request.setNamedParameter(map);
        }
        return client.invoke(request);//调用服务获得返回的json字符串
    }
}

这个demo作为一个子模块(acuprpc-spring-boot-starter-gateway)加入了框架的全家桶,直接引入依赖就能使用这个功能。

基于这个方法,可以实现更加复杂的也无需求,这里就不细讲了,本系列结束。

关注我查看本系列其他内容:

1:服务注册/发现(eureka)

2:远程服务调用(grpc)

3:远程服务调用(thrift)

4:request filter

5:服务监控和管理(actuator)

6:调用异常节点自动重试

7:网关支持(gateway)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一杯82年的JAVA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档