Browse Source

async apply socket, websocket, server

- pending 이슈 있음
feature/remove-rabbit
지대한 1 year ago
parent
commit
a59715d4b7
  1. 4
      pom.xml
  2. 15
      src/main/java/com/palnet/server/command/SocketCommand.java
  3. 50
      src/main/java/com/palnet/server/task/server/service/TaskServerService.java
  4. 50
      src/main/java/com/palnet/server/task/wb/service/TaskWbService.java
  5. 8
      src/main/resources/application.yml

4
pom.xml

@ -50,6 +50,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
<build>

15
src/main/java/com/palnet/server/command/SocketCommand.java

@ -114,7 +114,7 @@ public class SocketCommand {
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(
env.getProperty("app.host") + "api/ctr/cntrl/id/" + model.getObjectId()
env.getProperty("app.host") + "/api/ctr/cntrl/id/" + model.getObjectId()
))
.version(HttpClient.Version.HTTP_2)
.GET()
@ -162,15 +162,20 @@ public class SocketCommand {
if (model.getObjectId().indexOf("PA") > -1) {
// messageProducer.sendControlHistoryMessage(model);
try {
taskWbService.sendData(model);
} catch (TaskRejectedException e){
taskWbService.sendDataWebClient(model);
} catch (Exception e) {
logger.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
}
// STEP 3. 화면에 표출할 정보 WebSocket 전달
// messageProducer.sendControlMessage(model);
try {
// taskServerService.sendData(model);
taskServerService.sendDataWebClient(model);
} catch (Exception e) {
logger.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
} else {
logger.error("좌표 정보가 존재하지 않습니다.");
@ -236,7 +241,7 @@ public class SocketCommand {
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(
env.getProperty("app.host") + "api/ctr/cntrl/id/" + model.getObjectId()
env.getProperty("app.host") + "/api/ctr/cntrl/id/" + model.getObjectId()
))
.version(HttpClient.Version.HTTP_2)
.GET()
@ -352,7 +357,7 @@ public class SocketCommand {
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(
env.getProperty("app.host") + "api/ctr/cntrl/id/" + model.getObjectId()
env.getProperty("app.host") + "/api/ctr/cntrl/id/" + model.getObjectId()
))
.version(HttpClient.Version.HTTP_2)
.GET()

50
src/main/java/com/palnet/server/task/server/service/TaskServerService.java

@ -2,11 +2,14 @@ package com.palnet.server.task.server.service;
import com.palnet.comn.model.GPModel;
import com.palnet.comn.utils.JsonUtils;
import io.netty.channel.ChannelOption;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import java.io.IOException;
import java.net.URI;
@ -34,10 +37,10 @@ public class TaskServerService {
@Value("${app.host}")
private String APP_HOST;
private final String APP_SEND_URI = "api/server/receiver";
private final String APP_SEND_ASYNC_URI = "/api/server/receiver/async";
private final String APP_SEND_URI = "/api/server/receiver";
@Async("asyncExecutor")
public CompletableFuture<Void> sendData(GPModel model) {
public void sendData(GPModel model) {
HttpRequest request = null;
try {
request = HttpRequest.newBuilder()
@ -57,8 +60,49 @@ public class TaskServerService {
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
// log.info("websocket send message : {}", JsonUtils.toJson(model));
}
@Async("asyncExecutor")
public CompletableFuture<Void> sendDataAsync(GPModel model) {
HttpRequest request = null;
try {
request = HttpRequest.newBuilder()
.uri(new URI(
APP_HOST + APP_SEND_ASYNC_URI
))
.version(HttpClient.Version.HTTP_2)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(JsonUtils.toJson(model)))
.build();
HttpResponse<String> response = HttpClient
.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
} catch (URISyntaxException | InterruptedException | IOException e) {
log.error("요청한 URL 정보가 잘못되었습니다.", e.getMessage());
} catch (Exception e) {
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
// log.info("websocket send message : {}", JsonUtils.toJson(model));
return CompletableFuture.completedFuture(null);
}
public void sendDataWebClient(GPModel model) {
WebClient client = WebClient.builder()
.baseUrl(APP_HOST)
.defaultHeader("Content-Type", "application/json")
.build();
client.post()
.uri(APP_SEND_URI)
.body(Mono.just(model), GPModel.class)
.retrieve()
.bodyToMono(Void.class).subscribe();
}
}

50
src/main/java/com/palnet/server/task/wb/service/TaskWbService.java

@ -7,6 +7,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import reactor.netty.http.client.HttpClientRequest;
import java.io.IOException;
import java.net.URI;
@ -14,6 +17,7 @@ import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;
/**
@ -34,16 +38,17 @@ public class TaskWbService {
@Value("${web-socket.host}")
private String WS_HOST;
private final String WS_SEND_URI = "/api/ws/receiver/async";
private final String WS_SEND_ASYNC_URI = "/api/ws/receiver/async";
private final String WS_SEND_URI = "/api/ws/receiver";
@Async("asyncExecutor")
public CompletableFuture<Void> sendData(GPModel model) {
public CompletableFuture<Void> sendDataAsync(GPModel model) {
// log.info(">>> wb sendData model :: {}", model);
HttpRequest request = null;
try {
request = HttpRequest.newBuilder()
.uri(new URI(
WS_HOST + WS_SEND_URI
WS_HOST + WS_SEND_ASYNC_URI
))
.version(HttpClient.Version.HTTP_2)
.header("Content-Type", "application/json")
@ -62,4 +67,43 @@ public class TaskWbService {
return CompletableFuture.completedFuture(null);
}
public void sendData(GPModel model) {
// log.info(">>> wb sendData model :: {}", model);
HttpRequest request = null;
try {
request = HttpRequest.newBuilder()
.uri(new URI(
WS_HOST + WS_SEND_URI
))
.version(HttpClient.Version.HTTP_2)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(JsonUtils.toJson(model)))
.build();
HttpResponse<String> response = HttpClient
.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
} catch (URISyntaxException | InterruptedException | IOException e) {
log.error("요청한 URL 정보가 잘못되었습니다.", e.getMessage());
} catch (Exception e) {
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
// log.info("websocket send message : {}", JsonUtils.toJson(model));
}
public void sendDataWebClient(GPModel model){
WebClient client = WebClient.builder()
.baseUrl(WS_HOST)
.defaultHeader("Content-Type", "application/json")
.build();
client.post()
.uri(WS_SEND_URI)
.body(Mono.just(model), GPModel.class)
.retrieve()
.bodyToMono(Void.class)
.subscribe();
}
}

8
src/main/resources/application.yml

@ -35,7 +35,7 @@ server:
# routing-key: websocket.drone.routing.#
app:
host: http://127.0.0.1:8080/
host: http://127.0.0.1:8080
web-socket:
host: http://127.0.0.1:8181
@ -83,7 +83,7 @@ server:
# routing-key: websocket.drone.routing.#
app:
host: http://211.253.38.218:8080/
host: http://211.253.38.218:8080
web-socket:
host: http://211.253.38.218:8081
@ -143,7 +143,7 @@ logging:
com.palnet: info
app:
host: http://211.253.38.218:8080/
host: http://211.253.38.218:8080
web-socket:
host: http://211.253.38.218:8081
@ -204,7 +204,7 @@ logging:
com.palnet: info
app:
host: http://211.253.38.218:8080/
host: http://211.253.38.218:8080
web-socket:
host: http://211.253.38.218:8081

Loading…
Cancel
Save