Микро сервис (клиент eureka) не регистрируется на сервере eureka / сервер eureka не обнаруживает клиент eureka - PullRequest
3 голосов
/ 06 февраля 2020

Настройка сервера eureka

pom. xml

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

класс основного приложения

@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DiscoveryServerApplication.class, args);
    }
}

application.properties

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

Настройка клиента eureka

pom. xml

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-eureka-client</artifactId>
</dependency>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

класс основного приложения

@SpringBootApplication
@EnableEurekaClient
public class CurrencyExchangeServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(CurrencyExchangeServiceApplication.class, args);
    }
}

application.properties

server.port=8100
spring.application.name=currency-exchange-service

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761

Я не вижу микросервиса - службы обмена валют, зарегистрированной в Сервер Eureka на панели инструментов сервера eureka (http://localhost: 8761 )

  1. Почему клиент eureka не регистрируется на сервере eureka?
  2. Является ли @ EnableDiscoveryClient такой же, как @EnableEurekaClient?

Ответы [ 3 ]

1 голос
/ 06 февраля 2020

Я создал и протестировал ваш конфиг. Следующие две строки не требуются в клиентском приложении discovery (eureka).

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

Пожалуйста, используйте следующую зависимость

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

вместо

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-eureka-client</artifactId>
</dependency>

На самом деле register-with-eureka : false перестает регистрироваться на сервере обнаружения (eureka), поэтому полностью удалите его из клиентского приложения.

Добавьте строку ниже, если порт сервера обнаружения (eureka) отличается от 8761. Например,

eureka.client.serviceUrl.defaultZone=http://localhost:9000
0 голосов
/ 06 февраля 2020

@ EnableDiscoveryClient аннотация в классе клиентских приложений решит проблему.

Эта аннотация предпочтительнее и рекомендуется перед старой - @ EnableEurekaClient

@ EnableEurekaClient предназначен для более старой версии сервера Eureka.

@ EnableDiscoveryClient поддерживает все доступные службы обнаружения (включая более старую версию сервера eureka)

0 голосов
/ 06 февраля 2020

Поскольку у вас есть эта зависимость от привода, по умолчанию должна быть добавлена ​​зависимость безопасности Spring. Возможная причина этого сбоя регистрации - CSRF. Попытка отключения CSRF с помощью приведенного ниже примера кода.

@EnableWebSecurity
    static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable();
        }
    }

Что касается пункта два в вашем вопросе Spring, то многие поставщики услуг обнаружения поддерживают, например, консула, если вы используете @EnableDiscoveryClient, он попытается найти точное совпадение в Путь к классу и используйте его для службы обнаружения, с другой стороны, @EnableEurekaClient более конкретно c для службы обнаружения eureka, попробуйте найти зависимости, связанные с eureka, в пути к классам.

...