Я новичок в весенней загрузке и пытаюсь закодировать серверный сокет с помощью проекта загрузки 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