服务调用

本文所说的服务调用是指微服务之间的相互调用,它们采用 HTTP 传输协议。

示例代码:

private static readonly string s_userServiceUrl = Settings.GetSetting("UserService_Url", true);

public async Task<MysmUserInfo> GetUserLoginInfo()
{
    // 获取当前用户ID
    WebUserInfo userInfo = (WebUserInfo)this.NHttpContext.GetUserInfo();

    // 构造HTTP请求参数
    HttpOption httpOption = new HttpOption
    {
        Method = "GET",
        Url = s_userServiceUrl + "/v20/api/userservice/user/detail.svc",
        Data = new { userInfo.UserId },
        Format = SerializeFormat.Json
    };

    // 调用 UserService
    PUser pUser = await this.SendRequestAsync<PUser>(httpOption);

    // .................
}



简单来说,其实就2个步骤:

  1. 构造HttpOption对象,它表示一个HTTP请求参数
  2. SendRequestAsync(httpOption); 发起远程调用并获取远程服务的返回结果

补充说明:

  • HttpOption 还有3组(同步/异步)扩展方法:Send, GetResult, GetResult<T>,在微服务相互调用时,不要使用它们
  • SendRequestAsync 方法与上面3组方法相比,还会在调用时传递以下数据
    • 用户身份凭证(Token)
    • x-nebula- 开头的请求头
    • Cookie
      • 要求设置参数:Nebula_SendRequestWithCopyCookie = 1