场景描述

用户使用域名连接公有云或者三方系统时,需要使用到域名解析系统。在不同的系统、不同的框架使用的域名解析机制都可能不太一样。所以我们有必要提供一个统一的配置入口,以便开发运维人员可以自定义DNS解析机制,而不完全受制于系统配置。

DNS配置

DNS配置项写在microservice.yaml文件中,支持统一制定证书,也可以添加tag进行更细粒度的配置,有tag的配置会覆盖全局配置,配置格式如下:

  1. addressResolver.[tag].[property]

常见的tag如下表:

项目tag
服务中心sc.consumer
配置中心cc.consumer
看板中心mc.consumer
用户自定义self.tag

各个properties详细说明(设置Vertx DNS解析)

  1. addressResolver:
  2. servers: 8.8.8.8,8.8.4.4 #对应Linux /etc/resolv.conf的nameserver,DNS服务器地址,支持配置多个,以逗号隔开
  3. ndots: 1 #对应linux /etc/resolv.conf里面的options: ndots, 作用就是如果给的域名里面包含的点的个数少于该阈值,那么DNS解析的时候就会默认加上searchDomains的值,这个必须和searchDomains搭配使用,Linux默认为1
  4. searchDomains: a,b,c #对应linux /etc/resolv.conf里面的search,和ndots搭配使用,如果当前域名的点个数少于设置值,解析时就会把这些值添加到域名后面一起解析,比如ndots设置的为4,当前域名为servicecomb.cn-north-1.myhwclouds.com,只有三个点,那么解析的时候就会自动加上servicecomb.cn-north-1.myhwclouds.com.a去解析,没解析出来在用servicecomb.cn-north-1.myhwclouds.com.b,直到能最后解析出来
  5. optResourceEnabled: true #optional record is automatically included in DNS queries
  6. cacheMinTimeToLive: 0 #最小缓存时间
  7. cacheMaxTimeToLive: 10000 #最大缓存时间
  8. cacheNegativeTimeToLive: 0 #DNS解析失败后,下次重试的等待时间
  9. queryTimeout: 5000 #查询超时时间
  10. maxQueries: 4 #查询次数
  11. rdFlag: true #设置DNS递归查询
  12. rotateServers: true #设置是否支持轮询

示例

  1. VertxOptions vertxOptions = new VertxOptions();
  2. vertxOptions.setAddressResolverOptions(AddressResolverConfig.getAddressResover("self.tag"));
  3. Vertx vertx = VertxUtils.getOrCreateVertxByName("registry", vertxOptions);
  4. // this has to set the client options
  5. HttpClientOptions httpClientOptions = createHttpClientOptions();
  6. ClientPoolManager<HttpClientWithContext> clientMgr = new ClientPoolManager<>(vertx, new HttpClientPoolFactory(httpClientOptions));
  7. clientMgr.findThreadBindClientPool().runOnContext(httpClient -> {
  8. // do some http request
  9. });