zoukankan      html  css  js  c++  java
  • Orleans MultiClient 多个Silo复合客户端

    介绍

    Orleans.MultiClient 是一个 Orleans 复合客户端,只需要简单配置就可以简单高效连接和请求 Orleans 服务。
    Orleans.MultiClient 可以轻松连接多个不同服务的 Orleans 服务,在请求 Orleans 时会根据请求的接口自动寻找 Orleans 客户端,使用者无需关心底层的实现。

    Orleans.MultiClient 的开源地址和 Demo 可以在 GitHub 源代码下载查看。

    https://github.com/AClumsy/Orleans.MultiClient/

    使用

    NuGet 下载 Orleans.MultiClient 包。

    dotnet add package Orleans.MultiClient
    

    简单例子

    如果有一个服务需要同时调用 AB 两个 Orleans 服务,看一看 Orleans.MultiClient 是怎么更简单的调用 Orleans 服务的。
    第一步:先引用 Orleans.MultiClient 包和 AB 的接口,分别为 IHelloAIHelloB
    第二步:需要把 Orleans.MultiClient 注入到 DI 容器 中,并且配置添加两个 Orleans Client。

    提示:Orleans.MultiClient 暂时只支持 .NET Core 平台上面使用。

    services.AddOrleansMultiClient(build =>
    {
        build.AddClient(opt =>
        {
            opt.ServiceId = "A";
            opt.ClusterId = "AApp";
            opt.SetServiceAssembly(typeof(IHelloA).Assembly);
            opt.Configure = (b =>
            {
                b.UseLocalhostClustering();
            });
        });
        build.AddClient(opt =>
        {
            opt.ServiceId = "B";
            opt.ClusterId = "BApp";
            opt.SetServiceAssembly(typeof(IHelloB).Assembly);
            opt.Configure = (b =>
            {
                b.UseLocalhostClustering(gatewayPort: 30001);
            });
        });
    });
    

    第二步:开始调用对应的 Orleans 服务。
    IOrleansClient 是 Orleans.MultiClient 的复合客户端,通过 IOrleansClient 调用 Orleans 服务。

    // 调用 A 服务。
    var serviceA = _serviceProvider.GetRequiredService<IOrleansClient>().GetGrain<IHelloA>(1);
    var resultA = serviceA.SayHello("Hello World Success GrainA").GetAwaiter().GetResult();
    
    // 调用 B 服务。
    var serviceB = _serviceProvider.GetRequiredService<IOrleansClient>().GetGrain<IHelloB>(1);
    var resultB = serviceB.SayHello("Hello World Success GrainB").GetAwaiter().GetResult();
    

    简单吧,只要配置好客户端之后,在使用的过程中,无需管怎么连接 Orleans ,只要通过依赖注入得到 IOrleansClient 就可以轻松的请求 Orleans 服务。

    配置

    注入到 DI 容器

    AddOrleansMultiClient :把 Orleans.MultiClient 注入到 DI 容器 中,使用时需要通过依赖注入得到 IOrleansClient

    添加多个 Client

    AddClient: 添加多个 Orleans 客户客户端,添加客户端时需要配置 Orleans 相关选项。 Orleans.MultiClient 提供了函数和 IConfiguration 两种方式进行配置。
    使用 IConfiguration 进行配置时需要注意配置文件的内容必须是 IList<OrleansClientOptions> 类型的。

    services.AddOrleansMultiClient(build =>
    {
        build.AddClient((OrleansClientOptions opt) =>{
           ...// OrleansClientOptions 配置
        }
    });
    

    全局 Orleans 服务配置

    Configure:如果所有的 Orleans 的连接配置是一样的情况下,可以配置全局的 Orleans 服务配置。
    比如:如果所有的 Orleans Silo 都是通过 Consul 进行服务发现的,就可以配置一个全局配置。

    services.AddOrleansMultiClient(build =>{
        build.Configure(b =>{
            b.UseConsulClustering(o =>{
                o.Address = new Uri("https://127.0.0.1:8500");
            });
        });
    }
    

    OrleansClientOptions 配置

    • ServiceList:用于在 IOrleansClient 调用接口时和 Orleans 连接配置建立关联。ServiceList 的值时 Orleans Silo 接口的 Assembly.FullName, 由于 Orleans Silo 可能有多个接口,所以 ServiceList 是一个数组集合。可以通过 SetServiceAssembly 方法来配置 ServiceList。

    • ServiceId:Orleans Silo 的 ServiceId,在连接 Orleans 时需要。

    • ClusterId:Orleans Silo 的 ClusterId,在连接 Orleans 时需要。

    • Configure:Orleans 服务配置,如连接组件(ConsulZookeeperr、等)。如果配置了 全局 Orleans 服务配置 这个选项可以不配置,但是这选项配置之后会覆盖上面的 全局 Orleans 服务配置

  • 相关阅读:
    JAVA数据库建表工具类
    HTML加CSS3太极图demo
    MD5加密(JAVA&JS)
    Base64工具类(JAVA&JS)
    JS模拟圆周运动
    JAVA读取写入excle表兼容版
    Math.PI和Math.sin() 与 Math.cos()搭配使用详解
    MySQL8.0数据库连接问题
    echarts饼状图案例
    JS前端使用MD5加密
  • 原文地址:https://www.cnblogs.com/lfzm/p/10606584.html
Copyright © 2011-2022 走看看