zoukankan      html  css  js  c++  java
  • 一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

    在做RabbitCloud(之前是一个RPC,现在是一个微服务框架)的时候往往避不开客户端代理,之前把这些客户端代理都算作服务框架不可缺少的一部分,随着后期的深入发现这些客户端代理其实可以互通,类似spring cloud 的 open fegin。

    因为它们最终的行为就是构建一个message进行编码,发送,然后解码服务端的返回信息。在阅读open fegin的源码之后写了Rabbit Go。

    一个简单的客户端

    image

    image

    调用示例

    image

    最新的样本:https://github.com/RabbitTeam/go/tree/master/samples

    发生了什么?

    我们使用fiddler来监听请求信息。

    GetAsync

    image

    DeleteAsync

    image

    PostAsync

    imageimage

    PutAsync

    imageimage

    特性

    1. 丰富的拦截器(IAsyncRequestInterceptor、IAsyncExceptionInterceptor)
    2. 可替换的编解码器(默认为json,使用 Newtonsoft.Json)
    3. 全局拦截器
    4. 全局模型公约
    5. 良好的抽象与实现拆分(易扩展)
    6. url支持模板
    7. 可扩展的请求程序(目前只有HttpGoClient)
    8. 不只为HTTP(未来会添加对Grpc、dubbo等服务提供者的实现)

    项目信息

    源码地址:https://github.com/RabbitTeam/go

    NuGet:https://www.nuget.org/packages/Rabbit.Go.Core

    基于 Rabbit Go 的客户端

    源码地址:DingTalk(钉钉开放平台)

    用在生产的GoClient定义

    书籍评论服务

    image

    image

    image

    账号服务

    image

    image

    ps:生产项目集成了RabbitCloud,实现了服务发现、重试、负载均衡。每次调用过程中的 comment,user 会根据一定的策略自动解析成对应服务的真实ip地址和端口进行调用。

    RabbitCloud还是一个实验性项目,目前只放出了源码,并没有任何集成文档。

    开源地址:https://github.com/rabbitteam/rabbitcloud/tree/dev

    接下来

    1. 在不使用DI的情况下使用
    2. 提供服务发现、重试、限流、断路器的支持(集成 Rabbit Cloud)
    3. 提供对Grpc的调用支持
    4. 提供对dubbo的调用支持

    写在最后

    .NET技术栈QQ群:384413261(点击加入 .NET Group

  • 相关阅读:
    js五种继承优缺点
    golang---panic/recover
    golang---应用OOM
    golang--- context
    常用工具及日常
    golang --- pipline
    golang 竞争---翻译
    深入golang之---goroutine并发控制与通信
    rpm打包
    k8s-operator指北
  • 原文地址:https://www.cnblogs.com/ants/p/8445965.html
Copyright © 2011-2022 走看看