Der Springboot-Dienst ist bei Eureka registriert und der Port ist standardmäßig immer 8080. Wenn Sie den Port selbst konfigurieren, wird dies nicht wirksam.

In dieser Zeit habe ich ein altes Projekt eines Unternehmens übernommen, das Spring Cloud verwendet. Als ich es nutzte, entdeckte ich plötzlich, dass es einen Dienst gab. Nach der Registrierung bei Eureka stimmte der auf der Schnittstelle angezeigte Port nicht mit dem tatsächlichen Instanz-Port überein Wird von Ribbon aufgerufen. Später habe ich selbst einen Port geschrieben, um alle Instanzinformationen abzurufen. Die Methode ist wie folgt

@RestController
public class TestController {
    
    
    @Resource
    private DiscoveryClient discoveryClient;

    @RequestMapping("getServicesList")
    @ResponseBody
    public Object getServicesList() {
    
    
        List<List<ServiceInstance>> servicesList = new ArrayList<>();
        //获取服务名称
        List<String> serviceNames = discoveryClient.getServices();
        for (String serviceName : serviceNames) {
    
    
            //获取服务中的实例列表
            List<ServiceInstance> serviceInstances = discoveryClient.getInstances(serviceName);
            servicesList.add(serviceInstances);
        }
        return servicesList;
    }
}

Dadurch können alle derzeit bei Eureka registrierten Instanzinformationen abgerufen werden.
Nachdem ich es erhalten hatte, stellte ich fest, dass der Port nicht mit dem konfigurierten Port übereinstimmte.

[{
    
    
 "host": "147.20.1.14",
 "port": 8080,
 "serviceId": "IICS-TIMER",
 "uri": "http://147.20.1.14:8080",
 "metadata": {
    
    },
 "secure": false,
 "instanceInfo": {
    
    
  "instanceId": "147.20.1.14:8094",
  "app": "IICS-TIMER",
  "appGroupName": null,
  "ipAddr": "147.20.1.14",
  "sid": "na",
  "homePageUrl": "http://147.20.1.14:8080/",
  "statusPageUrl": "http://147.20.1.14:8080/info",
  "healthCheckUrl": "http://147.20.1.14:8080/health",
  "secureHealthCheckUrl": null,
  "vipAddress": "iics-timer",
  "secureVipAddress": "iics-timer",
  "countryId": 1,
  "dataCenterInfo": {
    
    
   "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
   "name": "MyOwn"
  },
  "hostName": "147.20.1.14",
  "status": "UP",
  "leaseInfo": {
    
    
   "renewalIntervalInSecs": 30,
   "durationInSecs": 90,
   "registrationTimestamp": 1678328929647,
   "lastRenewalTimestamp": 1678328929647,
   "evictionTimestamp": 0,
   "serviceUpTimestamp": 1678328878377
  },
  "isCoordinatingDiscoveryServer": false,
  "metadata": {
    
    },
  "lastUpdatedTimestamp": 1678328929647,
  "lastDirtyTimestamp": 1678328929069,
  "actionType": "ADDED",
  "asgName": null,
  "overriddenStatus": "UNKNOWN"
 }
}]

Dadurch können wir erkennen, dass der Instanz-Port und die Instanz-ID inkonsistent sind. Später haben wir das Problem durch Überprüfung des Quellcodes gefunden.
Fügen Sie hier eine Bildbeschreibung ein
Als ich Eureka in Debug registrierte, stellte ich fest, dass es einen nicht SecurePort-Port erhielt, und als ich dann darauf klickte, stellte ich fest, dass es den aktuell konfigurierten server.port-Port erhielt, den wir festgelegt haben. Wenn er nicht abgerufen wird, wird der Standardwert verwendet 8080 wird verwendet.
Fügen Sie hier eine Bildbeschreibung ein
Ich weiß nicht, warum eureka-Lesung von server.port keine Wirkung zeigt, aber indem wir die Informationen konsultieren, können wir den Port binden, indem wir nonSecurePort zwangsweise einen Wert zuweisen.

eureka.instance.nonSecurePort=8094

Fügen Sie diese Konfiguration direkt zur Konfigurationsdatei hinzu und konfigurieren Sie die nonSecurePort-Parameter.

おすすめ

転載: blog.csdn.net/qq_45699784/article/details/132500089