노승철
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