Compare commits
5 Commits
master
...
feature/re
Author | SHA1 | Date |
---|---|---|
지대한 | ecf9fd89f9 | 1 year ago |
지대한 | a59715d4b7 | 1 year ago |
지대한 | 2ba469a01c | 1 year ago |
지대한 | b6e2367bab | 1 year ago |
지대한 | 760d361239 | 1 year ago |
14 changed files with 616 additions and 480 deletions
@ -1,21 +0,0 @@
|
||||
package com.palnet; |
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.scheduling.annotation.EnableScheduling; |
||||
|
||||
@EnableScheduling |
||||
@SpringBootApplication |
||||
public class Application { |
||||
public static void main(String[] args) { |
||||
SpringApplication.run(Application.class, args); |
||||
} |
||||
|
||||
@Bean |
||||
public ObjectMapper objectMapper() { |
||||
return new ObjectMapper(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,38 @@
|
||||
package com.palnet; |
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.scheduling.annotation.EnableAsync; |
||||
import org.springframework.scheduling.annotation.EnableScheduling; |
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
||||
|
||||
import java.util.concurrent.Executor; |
||||
|
||||
@EnableAsync |
||||
@EnableScheduling |
||||
@SpringBootApplication |
||||
public class SocketApplication { |
||||
public static void main(String[] args) { |
||||
SpringApplication.run(SocketApplication.class, args); |
||||
} |
||||
|
||||
@Bean |
||||
public ObjectMapper objectMapper() { |
||||
return new ObjectMapper(); |
||||
} |
||||
|
||||
|
||||
@Bean("asyncExecutor") |
||||
public Executor asyncExecutor() { |
||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); |
||||
executor.setCorePoolSize(1); // 기본 스레드 수
|
||||
executor.setMaxPoolSize(10); // 최대 스레드 수
|
||||
executor.setQueueCapacity(50); // Max 스레드가 동작하는 경우 대기하는 Queue
|
||||
executor.setThreadNamePrefix("Async-"); |
||||
executor.initialize(); |
||||
return executor; |
||||
} |
||||
|
||||
} |
@ -1,86 +1,106 @@
|
||||
package com.palnet.comn.collection; |
||||
|
||||
import com.palnet.comn.utils.ContextUtils; |
||||
import com.palnet.comn.utils.DateUtils; |
||||
import com.palnet.comn.utils.JsonUtils; |
||||
import com.palnet.process.message.producer.MessageProducer; |
||||
import com.palnet.comn.model.GPDatabaseModel; |
||||
import com.palnet.comn.model.GPHistoryModel; |
||||
import com.palnet.comn.model.GPModel; |
||||
import io.netty.channel.AbstractChannel; |
||||
import io.netty.channel.Channel; |
||||
import io.netty.channel.ChannelFuture; |
||||
import io.netty.channel.ChannelHandlerContext; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
import org.springframework.beans.BeanUtils; |
||||
import org.springframework.scheduling.annotation.Scheduled; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
import java.io.IOException; |
||||
import java.io.OutputStream; |
||||
import java.net.InetSocketAddress; |
||||
import java.net.Socket; |
||||
import java.net.SocketAddress; |
||||
import java.nio.charset.StandardCharsets; |
||||
import java.time.Instant; |
||||
import java.util.*; |
||||
|
||||
/** |
||||
* 현재 움직이는 물체/비행체에 대한 정보를 전송하기 위해 저장하는 Collection |
||||
* @author kang |
||||
* |
||||
* @author kang |
||||
*/ |
||||
|
||||
@Slf4j |
||||
@Component |
||||
public class GPCollection { |
||||
private MessageProducer messageProducer; |
||||
|
||||
public GPCollection() { |
||||
this.messageProducer = (MessageProducer) ContextUtils.getBean("messageProducer"); |
||||
} |
||||
|
||||
// 받은 데이터 정보를 데이터구조에 맞게 저장 한다.
|
||||
// 최초에 데이터를 수신한 경우 관제 ID , 관제시작 시간을 셋팅한다.
|
||||
public void putData(List<GPModel> paramData) { |
||||
List<GPHistoryModel> historyList; |
||||
|
||||
for(GPModel data : paramData) { |
||||
data.setServerRcvDt(DateUtils.getCurrentTime()); //서버에서 받은 시간 넣기
|
||||
|
||||
// History Coordinates Settings
|
||||
GPHistoryModel historyModel = new GPHistoryModel(); |
||||
historyModel.setObjectId(data.getObjectId()); |
||||
historyModel.setLat(data.getLat()); |
||||
historyModel.setLng(data.getLng()); |
||||
|
||||
if (data.getPostionHistory() != null) { |
||||
historyList = data.getPostionHistory(); |
||||
} else { |
||||
historyList = new ArrayList<>(); |
||||
} |
||||
|
||||
historyList.add(historyModel); |
||||
data.setPostionHistory(historyList); |
||||
|
||||
/* Message Queue Server 전달 */ |
||||
messageProducer.sendControlMessage(data); |
||||
|
||||
try { |
||||
Socket socket = new Socket(); |
||||
SocketAddress address = new InetSocketAddress("192.168.0.26", 4355); |
||||
socket.connect(address); |
||||
|
||||
String gpsJson = JsonUtils.toJson(data); |
||||
|
||||
OutputStream outputStream = socket.getOutputStream(); |
||||
outputStream.write(gpsJson.getBytes(StandardCharsets.UTF_8)); |
||||
outputStream.flush(); |
||||
|
||||
socket.close(); |
||||
|
||||
} catch (IOException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
} |
||||
private static Map<String, List<GPModel>> gpMap = Collections.synchronizedMap(new HashMap<>()); // 누적 GPModel key-objectId
|
||||
|
||||
public static void init() { |
||||
gpMap = Collections.synchronizedMap(new HashMap<>()); |
||||
} |
||||
|
||||
public static void init(String objectId) { |
||||
if (objectId == null || objectId.isEmpty()) { |
||||
return; |
||||
} |
||||
gpMap.remove(objectId); |
||||
} |
||||
|
||||
public static Map<String, List<GPModel>> getAll() { |
||||
if (gpMap.keySet().size() < 1) { |
||||
return null; |
||||
} |
||||
return gpMap; |
||||
} |
||||
|
||||
public static List<GPModel> get(String objectId) { |
||||
if (objectId == null || objectId.isEmpty()) { |
||||
return null; |
||||
} |
||||
if (gpMap.get(objectId) == null) { |
||||
return null; |
||||
} |
||||
return gpMap.get(objectId); |
||||
} |
||||
|
||||
public static void set(GPModel model) { |
||||
if (model == null || model.getObjectId() == null || model.getObjectId().isEmpty()) { |
||||
return; |
||||
} |
||||
List<GPModel> list = gpMap.get(model.getObjectId()); |
||||
if (list == null) { |
||||
list = new ArrayList<>(); |
||||
} |
||||
list.add(model); |
||||
gpMap.put(model.getObjectId(), list); |
||||
} |
||||
|
||||
public static List<GPModel> send(String objectId) { |
||||
if (objectId == null || objectId.isEmpty()) { |
||||
return null; |
||||
} |
||||
if (!gpMap.containsKey(objectId)) { |
||||
return null; |
||||
} |
||||
List<GPModel> list = gpMap.get(objectId); |
||||
gpMap.remove(objectId); |
||||
return list; |
||||
} |
||||
|
||||
public static Map<String, List<GPModel>> sendAll() { |
||||
log.info("sendAll start - GPMap size : {}", gpMap.size()); |
||||
if(gpMap.keySet().size() < 1) { |
||||
return null; |
||||
} |
||||
Map<String, List<GPModel>> map = gpMap; |
||||
GPCollection.init(); |
||||
log.info("sendAll end - GPMap size : {}/{}", gpMap.size(), map.size()); |
||||
return map; |
||||
} |
||||
|
||||
// 1분마다 데이터 삭제
|
||||
@Scheduled(fixedDelay = 1000 * 60) |
||||
public void removeSchedule() { |
||||
log.info("removeSchedule start - GPMap size : {}", gpMap.size()); |
||||
for (String key : gpMap.keySet()) { |
||||
List<GPModel> list = gpMap.get(key); |
||||
if (list == null || list.size() == 0) { |
||||
continue; |
||||
} |
||||
GPModel model = list.get(list.size() - 1); |
||||
// 1분 이상된 데이터 삭제
|
||||
Instant compareTime = Instant.now().minusSeconds(60); |
||||
if (compareTime.isAfter(model.getRegDt())) { |
||||
log.info("remove data - 1 munite over : {}", key); |
||||
gpMap.remove(key); |
||||
} |
||||
} |
||||
log.info("removeSchedule end - GPMap size : {}", gpMap.size()); |
||||
} |
||||
|
||||
} |
||||
|
@ -1,22 +0,0 @@
|
||||
package com.palnet.process.message; |
||||
|
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
import java.util.concurrent.CountDownLatch; |
||||
|
||||
@Component |
||||
@Slf4j |
||||
public class Receiver { |
||||
|
||||
private CountDownLatch latch = new CountDownLatch(1); |
||||
|
||||
public void receiveMessage(String message) { |
||||
log.info("Received <" + message); |
||||
latch.countDown(); |
||||
} |
||||
|
||||
public CountDownLatch getLatch() { |
||||
return latch; |
||||
} |
||||
} |
@ -1,86 +0,0 @@
|
||||
package com.palnet.process.message.config; |
||||
|
||||
import com.palnet.process.message.Receiver; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.amqp.core.*; |
||||
|
||||
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; |
||||
import org.springframework.amqp.rabbit.connection.ConnectionFactory; |
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate; |
||||
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.core.env.Environment; |
||||
|
||||
@Configuration |
||||
@Slf4j |
||||
public class MessageConfig { |
||||
|
||||
private final Environment env; |
||||
|
||||
public MessageConfig(Environment env) { |
||||
this.env = env; |
||||
} |
||||
|
||||
@Bean |
||||
public Jackson2JsonMessageConverter converter() { |
||||
return new Jackson2JsonMessageConverter(); |
||||
} |
||||
|
||||
@Bean |
||||
public DirectExchange appDroneExchange() { |
||||
return new DirectExchange(env.getProperty("message.app.exchange-name")); |
||||
} |
||||
|
||||
@Bean |
||||
public DirectExchange websocketDroneExchange() { |
||||
return new DirectExchange(env.getProperty("message.websocket.exchange-name")); |
||||
} |
||||
|
||||
@Bean |
||||
public Queue appDroneQueue() { |
||||
return new Queue(env.getProperty("message.app.queue-name"), false); |
||||
} |
||||
|
||||
@Bean |
||||
public Queue websocketDroneQueue() { |
||||
return new Queue(env.getProperty("message.websocket.queue-name"), false); |
||||
} |
||||
|
||||
@Bean |
||||
public Binding appDroneBinding(Queue appDroneQueue, DirectExchange appDroneExchange) { |
||||
return BindingBuilder.bind(appDroneQueue) |
||||
.to(appDroneExchange) |
||||
.with(env.getProperty("message.app.routing-key")); |
||||
} |
||||
|
||||
@Bean |
||||
public Binding websocketDroneBinding(Queue websocketDroneQueue, DirectExchange websocketDroneExchange) { |
||||
return BindingBuilder.bind(websocketDroneQueue) |
||||
.to(websocketDroneExchange) |
||||
.with(env.getProperty("message.websocket.routing-key")); |
||||
} |
||||
|
||||
@Bean |
||||
public CachingConnectionFactory cachingConnectionFactory() { |
||||
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); |
||||
|
||||
connectionFactory.setHost(env.getProperty("spring.rabbitmq.host")); |
||||
connectionFactory.setPort(Integer.parseInt(env.getProperty("spring.rabbitmq.port"))); |
||||
connectionFactory.setUsername(env.getProperty("spring.rabbitmq.username")); |
||||
connectionFactory.setPassword(env.getProperty("spring.rabbitmq.password")); |
||||
|
||||
return connectionFactory; |
||||
} |
||||
|
||||
@Bean |
||||
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) { |
||||
RabbitTemplate rabbitTemplate = new RabbitTemplate(); |
||||
|
||||
rabbitTemplate.setConnectionFactory(connectionFactory); |
||||
rabbitTemplate.setMessageConverter(converter); |
||||
|
||||
return rabbitTemplate; |
||||
} |
||||
|
||||
} |
@ -1,71 +0,0 @@
|
||||
package com.palnet.process.message.producer; |
||||
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import com.palnet.comn.model.GPModel; |
||||
import com.palnet.process.message.Receiver; |
||||
import com.rabbitmq.client.Channel; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate; |
||||
import org.springframework.core.env.Environment; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
import java.util.Objects; |
||||
import java.util.concurrent.TimeUnit; |
||||
|
||||
@Component |
||||
@Slf4j |
||||
public class MessageProducer { |
||||
|
||||
private final RabbitTemplate rabbitTemplate; |
||||
private final Environment env; |
||||
private final ObjectMapper objectMapper; |
||||
private final Receiver receiver; |
||||
|
||||
public MessageProducer(RabbitTemplate rabbitTemplate, |
||||
Environment env, |
||||
ObjectMapper objectMapper, |
||||
Receiver receiver) { |
||||
this.rabbitTemplate = rabbitTemplate; |
||||
this.env = env; |
||||
this.objectMapper = objectMapper; |
||||
this.receiver = receiver; |
||||
} |
||||
|
||||
public void sendControlHistoryMessage(GPModel model) { |
||||
String json = ""; |
||||
|
||||
try { |
||||
json = objectMapper.writeValueAsString(model); |
||||
} catch (JsonProcessingException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
// log.info("[APP MESSAGE] HISTORY DATA : {}" ,model);
|
||||
|
||||
rabbitTemplate.convertAndSend( |
||||
Objects.requireNonNull(env.getProperty("message.app.exchange-name")), |
||||
Objects.requireNonNull(env.getProperty("message.app.routing-key")), |
||||
json |
||||
); |
||||
} |
||||
|
||||
public void sendControlMessage(GPModel model) { |
||||
String json = ""; |
||||
|
||||
try { |
||||
json = objectMapper.writeValueAsString(model); |
||||
} catch (JsonProcessingException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
log.info("Socket Payload : {}", json); |
||||
|
||||
rabbitTemplate.convertAndSend( |
||||
Objects.requireNonNull(env.getProperty("message.websocket.exchange-name")), |
||||
Objects.requireNonNull(env.getProperty("message.websocket.routing-key")), |
||||
json |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,132 @@
|
||||
package com.palnet.server.task.server.service; |
||||
|
||||
import com.palnet.comn.collection.GPCollection; |
||||
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.scheduling.annotation.Scheduled; |
||||
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; |
||||
import java.net.URISyntaxException; |
||||
import java.net.http.HttpClient; |
||||
import java.net.http.HttpRequest; |
||||
import java.net.http.HttpResponse; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.concurrent.CompletableFuture; |
||||
|
||||
/** |
||||
* packageName : com.palnet.server.task.wb.service |
||||
* fileName : TaskWbService |
||||
* author : dhji |
||||
* date : 2023-08-28(028) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-08-28(028) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
@Service |
||||
public class TaskServerService { |
||||
@Value("${app.host}") |
||||
private String APP_HOST; |
||||
|
||||
private final String APP_SEND_ASYNC_URI = "/api/server/receiver/async"; |
||||
private final String APP_SEND_URI = "/api/server/receiver"; |
||||
private final String APP_SEND_ALL_URI = "/api/server/receiver/all"; |
||||
|
||||
public void sendData(GPModel model) { |
||||
HttpRequest request = null; |
||||
try { |
||||
request = HttpRequest.newBuilder() |
||||
.uri(new URI( |
||||
APP_HOST + APP_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));
|
||||
} |
||||
|
||||
@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(); |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
@Scheduled(fixedDelay = 1000 * 20) |
||||
public void sendDataAllWebClient() { |
||||
Map<String, List<GPModel>> all = GPCollection.sendAll(); |
||||
if (all == null) { |
||||
return; |
||||
} |
||||
WebClient client = WebClient.builder() |
||||
.baseUrl(APP_HOST) |
||||
.defaultHeader("Content-Type", "application/json") |
||||
.build(); |
||||
|
||||
client.post() |
||||
.uri(APP_SEND_ALL_URI) |
||||
.body(Mono.just(all), Map.class) |
||||
.retrieve() |
||||
.bodyToMono(Void.class).subscribe(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,109 @@
|
||||
package com.palnet.server.task.wb.service; |
||||
|
||||
import com.palnet.comn.model.GPModel; |
||||
import com.palnet.comn.utils.JsonUtils; |
||||
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 reactor.netty.http.client.HttpClientRequest; |
||||
|
||||
import java.io.IOException; |
||||
import java.net.URI; |
||||
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; |
||||
|
||||
/** |
||||
* packageName : com.palnet.server.task.wb.service |
||||
* fileName : TaskWbService |
||||
* author : dhji |
||||
* date : 2023-08-28(028) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-08-28(028) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
@Service |
||||
public class TaskWbService { |
||||
@Value("${web-socket.host}") |
||||
private String WS_HOST; |
||||
|
||||
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> sendDataAsync(GPModel model) { |
||||
// log.info(">>> wb sendData model :: {}", model);
|
||||
HttpRequest request = null; |
||||
try { |
||||
request = HttpRequest.newBuilder() |
||||
.uri(new URI( |
||||
WS_HOST + WS_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 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(); |
||||
|
||||
} |
||||
} |
Loading…
Reference in new issue