Quando tento acessar o microsserviço usando o construtor de cliente da web do servidor eureka, solicitando o nome do microsserviço junto com o número da porta não padrão. Se não estou usando o número da porta, está gerando erro.
Quero usar o servidor eureka para descoberta de serviço. Minha ideia é que, ao descobrir um microsserviço, você não precisa mencionar o endereço de porta não padrão junto com o nome do microsserviço. Mas, no meu caso, tenho que mencionar o endereço da porta. Aqui estão todos os detalhes do meu código:
servidor eureca:
application.properties:
spring.application.name=eureka-server
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
inicialização de mola de código:
@SpringBootApplication
@EnableEurekaServer
public class EurakaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurakaServerApplication.class, args);
}
}
atendimento ao consumidor:
@Service
public class ConsumerService {
@LoadBalanced
private final WebClient webClient;
public ConsumerService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("http://microservice1:8080").build();
}
public Mono<String> getProcessedData() {
return webClient
.get()
.uri("/producer/data")
.retrieve()
.bodyToMono(String.class)
.map(data -> data + " - Extra Information Added");
}
}
Controlador do Consumidor:
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
private final ConsumerService consumerService;
public ConsumerController(ConsumerService consumerService) {
this.consumerService = consumerService;
}
//localhost:8081/consumer/processed-data
@GetMapping("/processed-data")
public Mono<String> getProcessedData() {
return consumerService.getProcessedData();
}
}
application.properties:
server.port=8081
spring.application.name=microservice2
Propriedades do aplicativo do produtor:
server.port=8080
spring.application.name=microservice1
Aplicação do Produtor:
@SpringBootApplication
@EnableDiscoveryClient
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}}
A mensagem de erro (se eu remover o número da porta 8080):
Servlet.service() for servlet \[dispatcherServlet\] in context with path \[\] threw exception \[Request processing failed: org.springframework.web.reactive.function.client.WebClientRequestException: finishConnect(..) failed: Connection refused: microservice1/127.0.0.1:80\] with root cause
java.net.ConnectException: finishConnect(..) failed: Connection refused
Não quero usar microservice1:8080 (para mim está funcionando). Eu quero usar apenas "microservice1". Se eu não estou mencionando a porta 8080, ele procura automaticamente a porta 80. Ele mostra erro de recusa de conexão. Eu quero usar http://microservice1 .
Obrigado .
crie sua própria classe de configuração e crie um construtor para o seu serviço, fornecendo o
baseUrl
sem a porta (apenas o nome do servidor) assim.Injete esse bean (deve ser o WebClient.Builder. Não um WebClient) em seu serviço ConsumerService usando
@Qualifier
Like this.