spring cloud consulがipを使ってサービスを登録する方法の例
私はspring cliudをテストしてconsulを登録センターとして使った時、サービス登録を発見した時、登録したのはすべてhostnameです。
commonserviceを登録しました。consulではこのようにしています。
私が加入しているサービスの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のプロファイルを変更します。
HostInfo Environ ment PostProcessor
bootstrap.ymlのプロファイルを変更します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
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:
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を優先的に選択するという意味である。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。