consul .netcore
2022-05-17 21:12 qgbo 阅读(67) 评论(0) 编辑 收藏 举报.netcore 读取配置文件。可以读 consul 的 key value.
Winton.Extensions.Configuration.Consul 这个库可以实现读取。
下载他的源码,测试部分是个项目。
这个lib 也可以热加载,改变值之后,。netcore 可以感到改变值。
源码上 看,这个只是用一个while 死循环实现的。
修改配置之后,如下代码可以接收到配置的更改。
services.Configure<PositionOptions>( this.Configuration.GetSection(PositionOptions.Position), bo => { Console.WriteLine(this.Configuration["Position"]); }); //services.Configure<PositionOptions>( // bo => // { // Console.WriteLine(bo); // });
如果某个接口没有实现, 如下写法,将会触发OnWatchException 。
cfgBuilder.AddConsul( $"my.json", options => { options.Optional = true; options.ReloadOnChange = true; options.OnLoadException = e => OnLoadException(e); options.OnWatchException = e => OnWatchException(e); options.PollWaitTime = TimeSpan.FromSeconds(5); options.ConsulConfigurationOptions = cco => { cco.Address = consulConf.Address; cco.Datacenter = consulConf.Datacenter; cco.Token = consulConf.Token; }; });
root cause: 这个bug 出现在后台进程程序。程序有主线程,和读取consul KV的线程。 如果某个接口没有实现,主进程将退出。而读取consul KV的线程还在读取。将导致IO错误。
System.Threading.Tasks.TaskCanceledException: The operation was canceled.
---> System.IO.IOException: Unable to read data from the transport connection: Operation canceled.
---> System.Net.Sockets.SocketException (125): Operation canceled
k8s 搭建consul
1. helm 下载cosnul 安装上之后,有几个service.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE consul-connect-injector ClusterIP 10.103.51.243 <none> 443/TCP 38d consul-dns ClusterIP 10.96.212.39 <none> 53/TCP,53/UDP 38d consul-server ClusterIP None <none> 8500/TCP,8502/TCP,8301/TCP,8301/UDP,8302/TCP,8302/UDP,8300/TCP,8600/TCP,8600/UDP 38d consul-ui ClusterIP 10.110.157.219 <none> 80/TCP
2. kubctl port-forward --address 0.0.0.0 services/consul-ui 8085:80 访问8085 即可打开UI
3. ingress
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cosnul-ui namespace: consul spec: ingressClassName: nginx rules: - http: paths: - backend: service: name: consul-ui port: number: 80 path: /consul pathType: Prefix