首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IHttpClient在Orleans.NET中的实现

IHttpClient在Orleans.NET中的实现
EN

Stack Overflow用户
提问于 2020-09-30 21:59:14
回答 1查看 315关注 0票数 1

通常,是推荐来创建一个实现IHttpClientIHttpClientFactory的包装器。同时,一些新奥尔良样本表示,可以按需创建HttpClient实例,并直接从谷物中使用。

问题

  • 我应该创建Or良服务作为IHttpClient的包装器,还是直接从谷物中调用HttpClient?
  • 如果我需要一个包装器,这个实现就足够了吗?
  • GrainServiceGrainServiceClient有什么区别?
代码语言:javascript
复制
public interface IRemoteGrainService : IGrainService
{
  Task<T> Get<T>(string source) where T : new();
}

public class RemoteGrainService : GrainService, IRemoteGrainService
{
  private IGrainFactory _grainFactory;
  private HttpClient _remoteService;

  public RemoteGrainService(
    IServiceProvider services,
    IGrainIdentity id,
    Silo silo,
    ILoggerFactory
    loggerFactory,
    IGrainFactory grainFactory) : base(id, silo, loggerFactory)
  {
    _grainFactory = grainFactory;
  }

  public override Task Init(IServiceProvider serviceProvider)
  {
    return base.Init(serviceProvider);
  }

  public override async Task Start()
  {
    _remoteService = new HttpClient();

    await base.Start();
  }

  public override Task Stop()
  {
    _remoteService.Dispose();

    return base.Stop();
  }

  public Task<T> Get<T>(string source) where T : new()
  {
    return JsonConvert
      .DeserializeObject<T>(
        await _client.GetAsync(source))
          .Content
          .ReadAsStringAsync);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 23:29:47

在新奥尔良使用HttpClient时,您应该遵循标准的最佳实践。该示例正在创建一个新的示例,以简化说明,而不是作为最佳实践的指示。将示例文档更改为使用IHttpClientFactory (例如)的PR可能会被接受。

您不需要GrainService从您的谷物调用HTTP :您可以注入所需的依赖项(IHttpClientFactory或类型化客户端),并直接从谷物代码调用HTTP。

关于GrainServiceGrainServiceClient的目的问题,GrainService是一种特殊的服务,可以从谷物代码中访问。GrainServices在集群中的每个节点上实例化,每个节点都负责一组谷物。例如,在新奥尔良使用GrainService实现提醒(持久计时器),每个节点上的LocalReminderService负责一组谷物,并在提醒到期时唤醒这些谷物。GrainServiceClient被谷物用来访问负责调用谷物的GrainService实例。文档在这里解释了更多的内容:https://dotnet.github.io/orleans/Documentation/grains/grainservices.html

除非您找到一个非常适合的用例,否则我将避免使用GrainService

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64146335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档