У меня есть два клиента, зарегистрированных на одном сервере 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
Вот как выглядит моя консоль:
Я боролся с этим несколько дней, и у меня закончились идеи. Мне действительно нужна вся помощь, которую я могу получить @ на этом этапе.
`#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);
}
}`
Я добавил обновления выше




Эврика предназначена для поиск услуг. Это означает, что вам не следует жестко кодировать какие-либо 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 приведет к - «Я первое приложение», что означает, что они успешно интегрированы.
Для дальнейшего чтения вы можете использовать весеннее облако документы.
Можете ли вы опубликовать свой application.yml или application.properties? Также класс, в котором вы использовали @EnableDiscoveryClient