Загрузочный веб-клиент Sprint с исключением java. net .UnknownHostException: - PullRequest
1 голос
/ 21 июня 2020

Я новичок в весенней загрузке и пытаюсь закодировать серверный сокет с помощью проекта загрузки Spring. Сервер отправит запрос в другой проект при использовании webClient. Весь проект зарегистрирован на сервере eureka и отображается на панели управления eureka с именем приложения spring

@SpringBootApplication
@EnableEurekaClient
public class Application {
    

    
    @Bean
    @LoadBalanced
    public static WebClient.Builder getWebClientBuilder(){
        return WebClient.builder();
    }
    
    
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);

        ServerSocket server = getServer();
        while (true) {
            try {
                System.out.println("Server is waiting for connection...");
                Socket connection= serverFront.accept();

                new Do (connection).run();
            } catch (IOException e) {
                System.err.println(e.getStackTrace());
            }

        }

    }





    private static class Do implements Runnable {
        private Socket connFront;

        Do (Socket connFront) {
            this.connFront = connFront;
        }

        public void run() {
            try {
                ...
                    dothings();
                ...
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                conn.close();
            }
        }

        private void dothings() throws Exception {
             do something ....
             if(...){
                 OtherProject1();
             }else{
                 OtherProject2(); 
             }
    }
    public static byte[] OtherProject1(String Data) {
        String ResponseText = getWebClientBuilder().build()
                .post()
                .uri("http://localhost:8081/send")
                .body(Mono.just(Data), String.class)
                .retrieve()
                .bodyToMono(String.class)
                .block();
        return ResponseText.getBytes();
    }

    public static byte[] OtherProject2(String Data) {

        String ResponseText= getWebClientBuilder().build()
                .post()
                .uri("http://project2/test")
                .body(Mono.just(Data), String.class)
                .retrieve()
                .bodyToMono(String.class)
                .block();
        return ResponseText.getBytes();
    }
     
}

В OtherProject1 он отлично работает с localhost в uri, но OtherProject2 с получит сообщение об ошибке

Caused by: java.net.UnknownHostException: "SpringApplicationName"
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ⇢ Request to POST http://SpringApplicationName/test [DefaultWebClient]
Stack trace:
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
        at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929)
        at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324)
        at java.net.InetAddress.getAllByName0(InetAddress.java:1277)
        at java.net.InetAddress.getAllByName(InetAddress.java:1193)
        at java.net.InetAddress.getAllByName(InetAddress.java:1127)
        at java.net.InetAddress.getByName(InetAddress.java:1077)
        at io.netty.util.internal.SocketUtils$8.run(SocketUtils.java:156)
        at io.netty.util.internal.SocketUtils$8.run(SocketUtils.java:153)
        at java.security.AccessController.doPrivileged(Native Method)
        at io.netty.util.internal.SocketUtils.addressByName(SocketUtils.java:153)

Ниже мой файл application.properties.

spring.application.name=project2
server.port=8083


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


Я установил аналогичный для всего проекта, кроме самого сервера eureka. Я что-то пропустил в этой ситуации? почему здесь не работает имя весеннего приложения? Но когда я настроил вот так

@SpringBootApplication
@EnableEurekaClient
public class Application {
    
    @Bean
    @LoadBalanced
    public WebClient.Builder getWebClientBuilder(){
        return WebClient.builder();
    }
    
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

и использовал Autowired

@RestController
public class AppropriationController {
    
    @Autowired
    private WebClient.Builder webClientBuilder;
    
    @RequestMapping(value="/test",method=RequestMethod.POST)
    public String test(@RequestBody String DataReq) {
        String ResponseText = getWebClientBuilder().build()
                .post()
                .uri("http://project3/send")
                .body(Mono.just(Data), String.class)
                .retrieve()
                .bodyToMono(String.class)
                .block();
        return ResponseText;
    
    } 

, он отлично работает с использованием здесь springApplicationName. Это из-за автоматического подключения?

ниже является частью панели управления Eureka Server с зарегистрированным проектом

EurekaServerDashBoard

...