服务调用
本文所说的服务调用是指微服务之间的相互调用,它们采用 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个步骤:
- 构造HttpOption对象,它表示一个HTTP请求参数
- SendRequestAsync
(httpOption); 发起远程调用并获取远程服务的返回结果
补充说明:
- HttpOption 还有3组(同步/异步)扩展方法:Send, GetResult, GetResult<T>,在微服务相互调用时,不要使用它们
- SendRequestAsync 方法与上面3组方法相比,还会在调用时传递以下数据
- 用户身份凭证(Token)
- x-nebula- 开头的请求头
- Cookie
- 要求设置参数:Nebula_SendRequestWithCopyCookie = 1