spring cloud consulがipを使ってサービスを登録する方法の例


私はspring cliudをテストしてconsulを登録センターとして使った時、サービス登録を発見した時、登録したのはすべてhostnameです。
commonserviceを登録しました。consulではこのようにしています。

{
  "ID":"commonservice123",
  "address":"testcommonserver"
  ........
}
これは間違いないです。
私が加入しているサービスのpayserviceはcommServiceを呼び出す必要があります。payserviceはconsulから取得したcommserviceの住所はtestcommServerです。payserviceのサーバーアドレスは125.17.68.98です。このサーバーが解析できないのはtestcommon Serverのサーバーのipアドレスです。
unKnown HostException
……
この問題を解決するためには、登録サービスの時に、サービスをipで登録させる必要があります。
  • spring cloud Finch 1 ey.SR 2
  • consul v 1.4.3
  • bootstrap.ymlのプロファイルを変更します。
    
    spring:
     cloud:
      consul:
       host: xxx.xxx.xxx.xxxx
       port: 8500
       discovery:
        prefer-ip-address: true //     
        tags: version=1.0
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}
        healthCheckInterval: 15s
        health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/health
    
    この属性はspring cloudに内蔵されています。ipを取得するために使用されています。spring cloudバージョンによっては少し違っているかもしれません。自分のバージョンを確認したいなら、このファイルを確認してもいいです。
    HostInfo Environ ment PostProcessor
    
      @Override
      public void postProcessEnvironment(ConfigurableEnvironment environment,
          SpringApplication application) {
        InetUtils.HostInfo hostInfo = getFirstNonLoopbackHostInfo(environment);
        LinkedHashMap<String, Object> map = new LinkedHashMap<>();
        map.put("spring.cloud.client.hostname", hostInfo.getHostname());
        map.put("spring.cloud.client.ip-address", hostInfo.getIpAddress());
        MapPropertySource propertySource = new MapPropertySource(
            "springCloudClientHostInfo", map);
        environment.getPropertySources().addLast(propertySource);
      }
    
    この時にプロジェクトテストを開始したら、登録先が変わっています。
    
    {
      "ID":"commonservice123",
      "address":"10.52.xx.xx"
      ........
    }
    
    登録されたaddressはサービスのイントラネットアドレスになります。他のサービスとcommServiceが同じネットワークにあれば、イントラネットを通じてアクセスできます。これもいいですが、もしイントラネットがアクセスできないなら、他のサービスはまだアクセスできません。登録サービスが必要な時はインターネットのipで登録してください。
    bootstrap.ymlのプロファイルを変更します。
    
    spring:
     cloud:
      consul:
       host: xxx.xxx.xxx.xxx
       port: 8500
       config:
        data-key: data
        format: yaml
       discovery:
        prefer-ip-address: true //     
        tags: version=1.0
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}
        healthCheckInterval: 15s
        health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/health
      inetutils:
       preferred-networks:
        -   ip1
        -   ip2
    
    この構成は、ipを取得する際に複数のip(イントラネット、外網)を取得すると、私が設定したipの中に存在するipを優先的に選択するという意味である。
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。