springcloudに登録してhostnameあるいはipのあれらの事


SprigCloud概要
Spring cloudはSpring Bootに基づいて実現されたサービス治理キットであり、マイクロサービスアーキテクチャにおいてサービスを管理し、調整するためのものである。
マイクロサービス:1つの単体プロジェクトを複数のマイクロサービスに分割し、各マイクロサービスは独立した技術選択、独立した開発、独立した配置、独立した運行維持ができます。
Spring Cloudは一連の枠組みの秩序ある集合である。Spring Bootの開発の利便性を利用して、分散システムのインフラストラクチャの開発を巧みに簡略化しました。例えば、サービス発見登録、配置センター、メッセージバス、負荷バランス、ブレーカー、データ監視など、Spring Bootの開発スタイルでワンタッチで起動と配置ができます。

五つの重要部品
サービス発見――Netflix Eureka
サービス側の負荷バランス――Netflix Ribbon/Feign
サービスゲートウェイ――Netflix Zuul
遮断器――Netflix Hystrix
分散配置――Spring Cloud Cofig
デフォルトでは、Eurekaはhostnameを使ってサービス登録を行い、サービス情報の表示を行います。もし私達がIPアドレスを抱き合う方式であれば、設定ファイルに配置することができます。  eureka.instance.prefer-ip-address=trueideaのctrl+マウスの左ボタンをクリックして、 eureka.instance.prefer-ip-address=true をクリックして表示に入ります。  EurekaInstanceConfigBeanはこの属性を導入します。

EurekaInstanceConfigBean
/**
 * Flag to say that, when guessing a hostname, the IP address of the server should be
 * used in prference to the hostname reported by the OS.
 */
 private boolean preferIpAddress = false;
preferIpAddress:優先的なIPアドレスです。デフォルトのfalse、つまりデフォルトではipを登録しません。
判断したところがあります。 EurekaInstance ConfigBen検索preferIpAddres、発見しました。 get HostName方法は、得られたhostnameまたはipを返す方法です。

@Override
public String getHostName(boolean refresh) {
 if (refresh && !this.hostInfo.override) {
  this.ipAddress = this.hostInfo.getIpAddress();
  this.hostname = this.hostInfo.getHostname();
 }
 return this.preferIpAddress ? this.ipAddress : this.hostname;
}
1.まず判断します this.hostInfo.override属性は、setIpAddressメソッドに設定されます。set IpAddress方法に対応するのは  eureka.instance.ip-address= この構成属性。
つまり、 eureka.instance.ip-addressと eureka.instance.prefer-i-p-address=trueは同時に設定して優先的に取ります。 eureka.instance.ip-addressの配置

public void setIpAddress(String ipAddress) {
 this.ipAddress = ipAddress;
 this.hostInfo.override = true;
 }
2.preferIpAddresはfalseのためにHostname属性に戻り、trueのためにipAddres属性に戻り、EurekaInstance ConfigBenでhostnameを検索すると、hostnameとipAddresはhostInfoから取得することができます。hostInfoはinetUtis.findFirst NonLoopbackHostInfoから獲得しました。

public EurekaInstanceConfigBean(InetUtils inetUtils) {
 this.inetUtils = inetUtils;
 this.hostInfo = this.inetUtils.findFirstNonLoopbackHostInfo();
 this.ipAddress = this.hostInfo.getIpAddress();
 this.hostname = this.hostInfo.getHostname();
}
このInetUtils.findFirst NonLoopbackHostInfo方法に重点を置いています。

public InetAddress findFirstNonLoopbackAddress() {
 InetAddress result = null;
 try {
  //         
  int lowest = Integer.MAX_VALUE; 
  //       
  for (Enumeration<NetworkInterface> nics = NetworkInterface
   .getNetworkInterfaces(); nics.hasMoreElements();) {
  NetworkInterface ifc = nics.nextElement();
  if (ifc.isUp()) {//        
   log.trace("Testing interface: " + ifc.getDisplayName());
   if (ifc.getIndex() < lowest || result == null) {
   lowest = ifc.getIndex();
   }
   else if (result != null) {
   continue;
   }
   // @formatter:off
   //        
   if (!ignoreInterface(ifc.getDisplayName())) {
   for (Enumeration<InetAddress> addrs = ifc
    .getInetAddresses(); addrs.hasMoreElements();) {
    InetAddress address = addrs.nextElement();
    if (
 address instanceof Inet4Address// IPV4
 && !address.isLoopbackAddress()//      (127.***)
 && isPreferredAddress(address)) {//     ,         ip
    log.trace("Found non-loopback interface: "
     + ifc.getDisplayName());
    result = address;
    }
   }
   }
   // @formatter:on
  }
  }
 }
 catch (IOException ex) {
  log.error("Cannot get first non-loopback address", ex);
 }
 if (result != null) {
  return result;
 }
 try {
  //       JDK InetAddress  
  return InetAddress.getLocalHost();
 }
 catch (UnknownHostException e) {
  log.warn("Unable to retrieve localhost");
 }
 return null;
}
この方法は すべてのネットカードを取り出して、ipアドレスが合理的で、インデックス値が最小で、リストを無視していないネットカードのIPアドレスを結果とします。適切なIPが見つからない場合は、 InetAddress.getLocalHost() 方法を呼び出す。
ここでまとめてみます。登録に関するいくつかの柔軟な構成について:
  • Ip登録: eureka.instance.prefer-i-p-address=true
  • IP登録を指定します。 eureka.instance.ip-address=
  • ネットカードを無視する: spring.cloud.inetutils.ignored-interfaces[0]
  • おすすめのネットカード: spring.cloud.inetutils.preferredNetworks[0]
  • 本機のホームファイルを設定します。InetUtilsが適当なipを見つけられない場合、JDKを呼び出します。 InetAddress.get Local Host()この方法は本機のhostnameに基づいて対応するipを解析します。本機のホームゲームと /etc/hostsファイルは、本機のホスト名を直接有効IPアドレス
  • にマッピングする。
    締め括りをつける
    以上は小编でご绍介したspringcloudに登録されたhostnameまたはipのことです。皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
    本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。