ProjectEventMQMessageHandler.java 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package jnpf.handler;
  2. import com.alibaba.fastjson.JSON;
  3. import com.baomidou.lock.LockTemplate;
  4. import jnpf.consts.ProjectEventConst;
  5. import jnpf.module.ProjectEventInstance;
  6. import jnpf.util.JsonUtil;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.context.ApplicationEventPublisher;
  9. import org.springframework.context.ApplicationEventPublisherAware;
  10. import org.springframework.messaging.Message;
  11. import java.util.function.Consumer;
  12. /**
  13. * 自定义事件监听, MQ渠道, 收到通知后发送Spring事件(RedisEventInstance)
  14. */
  15. @Slf4j
  16. public class ProjectEventMQMessageHandler implements Consumer<Message<?>>, ApplicationEventPublisherAware {
  17. private ApplicationEventPublisher applicationEventPublisher;
  18. private final LockTemplate lockTemplate;
  19. public ProjectEventMQMessageHandler(LockTemplate lockTemplate) {
  20. this.lockTemplate = lockTemplate;
  21. log.info("初始化自定义事件MQ监听器");
  22. }
  23. @Override
  24. public void accept(Message<?> o) {
  25. if(log.isDebugEnabled()){
  26. log.debug("事件监听收到MQ消息:{}", JSON.toJSONString(o));
  27. }
  28. // 是否存在自定义事件的标识
  29. if(o.getHeaders().get(ProjectEventConst.DEFAULT_CHANNEL_PREFIX) == null){
  30. if(log.isDebugEnabled()){
  31. log.debug("事件监听忽略MQ消息:{}", JSON.toJSONString(o));
  32. }
  33. return;
  34. }
  35. Object payload = o.getPayload();
  36. ProjectEventInstance instance;
  37. if(payload instanceof byte[]){
  38. instance = JSON.parseObject((byte[])payload, ProjectEventInstance.class);
  39. }else if(payload instanceof String){
  40. instance = JSON.parseObject((String)payload, ProjectEventInstance.class);
  41. }else{
  42. instance = JsonUtil.getJsonToBean(payload, ProjectEventInstance.class);
  43. }
  44. applicationEventPublisher.publishEvent(instance);
  45. }
  46. @Override
  47. public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
  48. this.applicationEventPublisher = applicationEventPublisher;
  49. }
  50. }