-
Notifications
You must be signed in to change notification settings - Fork 9
启动客户端
Owen edited this page Apr 26, 2019
·
8 revisions
客户端跟服务端基本一样,也支持Web Host和Generic host
调用AddClient方法启用客户端
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddUragano(Configuration, builder =>
{
builder.AddClient();
builder.AddConsul();
});
}
在实际微服务应用中,肯定会有一个服务调用另一个服务的情况,也就是说一个服务它既是服务端也是客户端,Uragano也是支持这种情况的,只需要同时调用AddClient和AddServer启动客户端和服务端即可
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddUragano(Configuration, builder =>
{
builder.AddServer();
builder.AddClient();
builder.AddConsul();
});
}
在客户端项目引入服务接口项目,注入对应的服务接口即可,就像调用本地方法一样调用远程方法
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
private IHelloService HelloService { get; }
public ValuesController(IHelloService helloService)
{
HelloService = helloService;
}
// GET api/values
[HttpGet]
public async Task<IActionResult> Get()
{
return Ok(await HelloService.SayHello("Jack"));
}
}
元数据你可以理解成http里的headers,是k/v类型的。
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
private IHelloService HelloService { get; }
public ValuesController(IHelloService helloService)
{
HelloService = helloService;
}
// GET api/values
[HttpGet]
public async Task<IActionResult> Get()
{
return Ok(await HelloService.SetMeta(("token", "Bearer .....")).SayHello("Jack"));
}
}
注意:元数据在服务对象实例的生命周期(Scoped)内,是共享一个字典对象,可能存在并发问题,目前还没有好的解决方案,如果你有好的建议请开一个issue。
那元数据在哪里接收呢?请查看拦截器
"Uragano": {
"Client": {
"DefaultCert": {
"url": "",
"pwd": ""
},
"ServicesCert": {
"RPC": {
"url": "",
"pwd": ""
}
}
},
"ServiceDiscovery": {
"Consul": {
"Client": {
"Address": "http://localhost:8500"
}
}
}
}
如服务器端启用了Tls,客户需就要配置相应的证书:
ServicesCert:客户端需要连接的服务验证证书,Key是对应的服务名称,上面示例“RPC”即为服务的名称.
DefaultCert:默认证书,如果服务端启用了Tls,并且ServicesCert下找不到对应的证书时会默认采用此项配置。当所有的服务都使用相同的证书时就可以只配置默认证书即可。