노승철
2 years ago
10 changed files with 272 additions and 4 deletions
@ -0,0 +1,74 @@
|
||||
package com.palnet.biz.config; |
||||
|
||||
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 |
||||
public class MessageConfig { |
||||
private final Environment env; |
||||
|
||||
public MessageConfig(Environment env) { |
||||
this.env = env; |
||||
} |
||||
|
||||
// @Bean
|
||||
// public CachingConnectionFactory cachingConnectionFactory() {
|
||||
// return new CachingConnectionFactory();
|
||||
// }
|
||||
|
||||
@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 RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) { |
||||
RabbitTemplate rabbitTemplate = new RabbitTemplate(); |
||||
|
||||
rabbitTemplate.setConnectionFactory(connectionFactory); |
||||
rabbitTemplate.setMessageConverter(converter); |
||||
|
||||
return rabbitTemplate; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,34 @@
|
||||
package com.palnet.biz.message.consumer; |
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import com.palnet.biz.message.service.MessageService; |
||||
import com.palnet.comn.model.GPDatabaseModel; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.amqp.core.Message; |
||||
import org.springframework.amqp.rabbit.annotation.RabbitHandler; |
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener; |
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate; |
||||
import org.springframework.core.env.Environment; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
import java.io.IOException; |
||||
|
||||
@Component |
||||
@Slf4j |
||||
public class MessageConsumer { |
||||
|
||||
private final MessageService messageService; |
||||
private final ObjectMapper objectMapper; |
||||
|
||||
public MessageConsumer(MessageService messageService, ObjectMapper objectMapper) { |
||||
this.messageService = messageService; |
||||
this.objectMapper = objectMapper; |
||||
} |
||||
|
||||
@RabbitHandler |
||||
@RabbitListener(queues = {"app.drone.queue"}) |
||||
public void receivedDroneMessage(final GPDatabaseModel model) { |
||||
messageService.insert(model); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,30 @@
|
||||
package com.palnet.biz.message.model; |
||||
|
||||
import org.springframework.stereotype.Component; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import java.util.concurrent.ConcurrentHashMap; |
||||
|
||||
@Component |
||||
public class MessageDataShareContext { |
||||
|
||||
private Map<String, String> idntfKey; |
||||
|
||||
public MessageDataShareContext() { |
||||
this.idntfKey = new ConcurrentHashMap<>(); |
||||
} |
||||
|
||||
public void putIdntfKey(String key, String value) { |
||||
idntfKey.put(key, value); |
||||
} |
||||
|
||||
public void removeIdntfKey(String key) { |
||||
idntfKey.remove(key); |
||||
} |
||||
|
||||
public String getIndtfKey(String key) { |
||||
return idntfKey.get(key); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,10 @@
|
||||
package com.palnet.biz.message.service; |
||||
|
||||
import com.palnet.comn.model.GPDatabaseModel; |
||||
import com.palnet.comn.model.GPModel; |
||||
|
||||
public interface MessageService { |
||||
|
||||
void insert(GPDatabaseModel model); |
||||
|
||||
} |
@ -0,0 +1,87 @@
|
||||
package com.palnet.biz.message.service.impl; |
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import com.palnet.biz.jpa.entity.CtrCntrlHstry; |
||||
import com.palnet.biz.jpa.repository.pty.PtyDronQueryRepository; |
||||
import com.palnet.biz.jpa.service.ctr.CtrCntrlJpaService; |
||||
import com.palnet.biz.message.model.MessageDataShareContext; |
||||
import com.palnet.biz.message.service.MessageService; |
||||
import com.palnet.comn.model.GPDatabaseModel; |
||||
import com.palnet.comn.model.GPModel; |
||||
import com.palnet.comn.utils.DateUtils; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate; |
||||
import org.springframework.core.env.Environment; |
||||
import org.springframework.stereotype.Service; |
||||
import org.springframework.transaction.annotation.Transactional; |
||||
|
||||
import java.util.Objects; |
||||
import java.util.UUID; |
||||
|
||||
@Service |
||||
@RequiredArgsConstructor |
||||
@Slf4j |
||||
public class MessageServiceImpl implements MessageService { |
||||
|
||||
private final CtrCntrlJpaService ctrCntrlJpaService; |
||||
private final PtyDronQueryRepository ptyDronQueryRepository; |
||||
private final MessageDataShareContext shareContext; |
||||
private final RabbitTemplate rabbitTemplate; |
||||
private final Environment env; |
||||
private final ObjectMapper objectMapper; |
||||
|
||||
|
||||
@Override |
||||
@Transactional |
||||
public void insert(GPDatabaseModel model) { |
||||
if(!model.getMessageType().equals("OPENSKY")) { |
||||
if(shareContext.getIndtfKey(model.getObjectId()) == null) { |
||||
String controlID = UUID.randomUUID().toString(); |
||||
|
||||
model.setControlId(controlID); |
||||
model.setTypeCd("01"); |
||||
model.setAreaTrnsYn("N"); |
||||
model.setControlStartDt(DateUtils.getCurrentTime()); |
||||
|
||||
shareContext.putIdntfKey(model.getObjectId(), controlID); |
||||
} else { |
||||
model.setControlId(shareContext.getIndtfKey(model.getObjectId())); |
||||
model.setTypeCd("02"); |
||||
model.setAreaTrnsYn("E"); |
||||
} |
||||
|
||||
/* 메세지 서버에게 위임 */ |
||||
this.sendToWebsocket(model); |
||||
|
||||
// if(model.getTypeCd().equals("01")) {
|
||||
// //마스터 정보에저장
|
||||
// //식별번호로 제작번호 알아오기
|
||||
// String prodNumber = ptyDronQueryRepository.findIdntfNumByProdNumber(model.getObjectId());
|
||||
// model.setProdNumber(prodNumber);
|
||||
//
|
||||
// ctrCntrlJpaService.insertCtrCntrlBas(model);
|
||||
// }
|
||||
// if(model.getTypeCd().equals("99")) {
|
||||
// //마스터 정보에 종료 처리 저장
|
||||
// model.setEndTypeCd("01");
|
||||
// ctrCntrlJpaService.updateCtrCntrlBas(model);
|
||||
// }
|
||||
//
|
||||
// CtrCntrlHstry ctrCntrlHstry = ctrCntrlJpaService.insertCtrCntrlHstry(model);
|
||||
//
|
||||
// if(model.getTypeCd().equals("01") || model.getTypeCd().equals("99")) {
|
||||
// ctrCntrlJpaService.insertCtrCntrlHstryArea(model, ctrCntrlHstry.getHstrySno());
|
||||
// }
|
||||
} |
||||
} |
||||
|
||||
public void sendToWebsocket(GPDatabaseModel model) { |
||||
/* Websocket 서버로 전달 할 드론 데이터 */ |
||||
rabbitTemplate.convertAndSend( |
||||
Objects.requireNonNull(env.getProperty("message.websocket.queue-name")), |
||||
model |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue