ProjectEventRedisSender.java 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package jnpf.handler;
  2. import com.alibaba.fastjson.JSON;
  3. import jnpf.consts.ProjectEventConst;
  4. import jnpf.consts.RedisConst;
  5. import jnpf.module.ProjectEvent;
  6. import jnpf.event.ProjectEventSender;
  7. import jnpf.properties.EventProperty;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.springframework.data.redis.core.RedisTemplate;
  10. import java.util.Objects;
  11. /**
  12. * 自定义事件发布 Redis渠道
  13. */
  14. @Slf4j
  15. public class ProjectEventRedisSender implements ProjectEventSender {
  16. private RedisTemplate redisTemplate;
  17. private EventProperty eventProperties;
  18. public ProjectEventRedisSender(RedisTemplate redisTemplate, EventProperty eventProperties) {
  19. this.redisTemplate = redisTemplate;
  20. this.eventProperties = eventProperties;
  21. }
  22. @Override
  23. public void send(ProjectEvent event) {
  24. String channel = event.getChannel();
  25. // channel 加上指定前缀
  26. if(Objects.equals(eventProperties.getRedisPublishType(), ProjectEventConst.REDIS_PUBLISH_TYPE_ALL)){
  27. // 订阅同一个Redis里的所有消息
  28. channel = ProjectEventConst.DEFAULT_CHANNEL_PREFIX + channel;
  29. }else{
  30. // 只订阅当前配置的库索引
  31. channel = RedisConst.REDIS_EVENT_KEY + ProjectEventConst.DEFAULT_CHANNEL_PREFIX + channel;
  32. }
  33. redisTemplate.convertAndSend(channel, event);
  34. if (log.isDebugEnabled()) {
  35. log.debug("发送Redis自定义事件: {}", JSON.toJSONString(event));
  36. }
  37. }
  38. }