Общение с клиентами Eureka

У меня есть два клиента, зарегистрированных на одном сервере Eureka, когда я проверяю пользовательский интерфейс сервера, я вижу, что оба клиента зарегистрированы нормально. Но когда я пытаюсь вызвать одного клиента от другого, я получаю исключение ввода-вывода: ResponseEntity<LoginInformationDto> quoteResponse = restTemplate.exchange("http://lirs-security/api/userSecurity/validateUserToken/" + token, HttpMethod.GET, null, new ParameterizedTypeReference<LoginInformationDto>() { }); /** ResponseEntity<LoginInformationDto> quoteResponse = restTemplate.exchange("http://localhost:8103/api/userSecurity/validateUserToken/" + token, HttpMethod.GET, null, new ParameterizedTypeReference<LoginInformationDto>() { }); */. Когда я напрямую обращаюсь к другой службе, она работает. ошибка: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://lirs-security/cbf69488-5624-4181-9254-ff423afa7620": lirs-security; nested exception is java.net.UnknownHostException: lirs-security Вот как выглядит моя консоль: Общение с клиентами Eureka Я боролся с этим несколько дней, и у меня закончились идеи. Мне действительно нужна вся помощь, которую я могу получить @ на этом этапе.

`#Server application.yml file
spring:
application:
name: lirs-gateway

server:
port: 8101
eureka:
instance:
hostname: localhost 
client:
registerWithEureka: false
fetchRegistry: false
#server:
#waitTimeInMsWhenSyncEmpty: 0
serverUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

#security client yml file
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8101/eureka/
instance:
hostname: localhost

#Security client properties file
spring.application.name=lirs-security
server.port=8103

spring.datasource.url=jdbc:mysql://localhost:3306/***** 
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
spring.jpa.show-sql=true
spring.jpa.hibernate.naming- 
strategy=org.hibernate.cfg.ImprovedNamingStrategy 

#tax payers client yml
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8101/eureka/
instance:
hostname: localhost

# client properties file
spring.application.name=tax-payers
server.port=8102

spring.datasource.url=jdbc:mysql://localhost:3306/****
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
spring.jpa.show-sql=true
spring.jpa.hibernate.naming- 
strategy=org.hibernate.cfg.ImprovedNamingStrategy
security.oauth2.client.clientId=myID
security.oauth2.client.scope=bigScope
simpleProp=this is the value`

`@EnableDiscoveryClient
//@EnableEurekaClient
@SpringBootApplication
public class TaxpayersApplication {

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

@Bean
CorsConfigurationSource corsConfigurationSource() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
    return source;
}


}

@EnableDiscoveryClient
//@EnableEurekaClient
@SpringBootApplication
public class LirsSecurityApplication {

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

Можете ли вы опубликовать свой application.yml или application.properties? Также класс, в котором вы использовали @EnableDiscoveryClient

Vasan 29.03.2018 21:23

Я добавил обновления выше

sfagade 30.03.2018 09:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
2
2
1 315
1

Ответы 1

Эврика предназначена для поиск услуг. Это означает, что вам не следует жестко кодировать какие-либо URL-адреса в своих клиентах. Базовый пример интеграции двух клиентов eureka должен выглядеть следующим образом:

1) Сервер Eureka:

spring:
  application:
    name: SERVER1
server:
  port: 8761
eureka:
  server:
    hostname: localhost

2) Первое приложение:

spring:
  application:
    name: app_1
server:
  port: 0
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka

3) Второе приложение:

spring:
  application:
    name: app_2
server:
  port: 0
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka

Итак, у нас есть два приложения, зарегистрированных на сервере eureka.

Теперь идея состоит в том, чтобы запросить URL-адрес необходимого приложения с сервера eureka и использовать его.

Код первого приложения:

@SpringBootApplication
@EnableEurekaClient
@RestController
public class ClientApp {
    public static void main(String[] args) {
        SpringApplication.run(ClientApp.class, args);
    }

    @Bean
     RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Autowired
    private EurekaClient discoveryClient;

    @RequestMapping("/greetingTest")
    public String greetingTest() {
        String url = discoveryClient.getNextServerFromEureka("APP_2", false).getHomePageUrl();
        return restTemplate().getForEntity(url + "/greeting", String.class).getBody();
    }

    @RequestMapping("/greeting")
    public String greeting() {
        return "I'm first app";
    }
}

У второго приложения такой же код, за исключением этой строки:

discoveryClient.getNextServerFromEureka("APP_2", false)

В качестве имени службы будет использоваться APP_1. Таким образом, первое приложение запрашивает второй URL-адрес приложения и наоборот.

Таким образом, вызов первого приложения с использованием пути /greetingTest приведет к - «Я - второе приложение», тогда как вызов второго приложения с использованием пути /greetingTest приведет к - «Я первое приложение», что означает, что они успешно интегрированы.

Для дальнейшего чтения вы можете использовать весеннее облако документы.

Другие вопросы по теме