RedisConfig.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package com.genersoft.iot.vmp.conf;
  2. import com.genersoft.iot.vmp.common.VideoManagerConstants;
  3. import com.genersoft.iot.vmp.service.impl.RedisAlarmMsgListener;
  4. import com.genersoft.iot.vmp.service.impl.RedisGpsMsgListener;
  5. import com.genersoft.iot.vmp.service.impl.RedisGbPlayMsgListener;
  6. import com.genersoft.iot.vmp.service.impl.RedisStreamMsgListener;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.cache.annotation.CachingConfigurerSupport;
  11. import org.springframework.context.annotation.Bean;
  12. import org.springframework.context.annotation.Configuration;
  13. import org.springframework.data.redis.connection.RedisConnectionFactory;
  14. import org.springframework.data.redis.core.RedisTemplate;
  15. import org.springframework.data.redis.listener.PatternTopic;
  16. import org.springframework.data.redis.listener.RedisMessageListenerContainer;
  17. import org.springframework.data.redis.serializer.StringRedisSerializer;
  18. import com.alibaba.fastjson.parser.ParserConfig;
  19. import com.genersoft.iot.vmp.utils.redis.FastJsonRedisSerializer;
  20. import redis.clients.jedis.JedisPool;
  21. import redis.clients.jedis.JedisPoolConfig;
  22. /**
  23. * @description:Redis中间件配置类,使用spring-data-redis集成,自动从application.yml中加载redis配置
  24. * @author: swwheihei
  25. * @date: 2019年5月30日 上午10:58:25
  26. *
  27. */
  28. @Configuration
  29. public class RedisConfig extends CachingConfigurerSupport {
  30. @Value("${spring.redis.host}")
  31. private String host;
  32. @Value("${spring.redis.port}")
  33. private int port;
  34. @Value("${spring.redis.database}")
  35. private int database;
  36. @Value("${spring.redis.password}")
  37. private String password;
  38. @Value("${spring.redis.timeout}")
  39. private int timeout;
  40. @Value("${spring.redis.poolMaxTotal:1000}")
  41. private int poolMaxTotal;
  42. @Value("${spring.redis.poolMaxIdle:500}")
  43. private int poolMaxIdle;
  44. @Value("${spring.redis.poolMaxWait:5}")
  45. private int poolMaxWait;
  46. @Autowired
  47. private RedisGpsMsgListener redisGPSMsgListener;
  48. @Autowired
  49. private RedisAlarmMsgListener redisAlarmMsgListener;
  50. @Autowired
  51. private RedisStreamMsgListener redisStreamMsgListener;
  52. @Autowired
  53. private RedisGbPlayMsgListener redisGbPlayMsgListener;
  54. @Bean
  55. public JedisPool jedisPool() {
  56. if (StringUtils.isBlank(password)) {
  57. password = null;
  58. }
  59. JedisPoolConfig poolConfig = new JedisPoolConfig();
  60. poolConfig.setMaxIdle(poolMaxIdle);
  61. poolConfig.setMaxTotal(poolMaxTotal);
  62. // 秒转毫秒
  63. poolConfig.setMaxWaitMillis(poolMaxWait * 1000L);
  64. JedisPool jp = new JedisPool(poolConfig, host, port, timeout * 1000, password, database);
  65. return jp;
  66. }
  67. @Bean("redisTemplate")
  68. public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
  69. RedisTemplate<Object, Object> template = new RedisTemplate<>();
  70. template.setConnectionFactory(redisConnectionFactory);
  71. // 使用fastjson进行序列化处理,提高解析效率
  72. FastJsonRedisSerializer<Object> serializer = new FastJsonRedisSerializer<Object>(Object.class);
  73. // value值的序列化采用fastJsonRedisSerializer
  74. template.setValueSerializer(serializer);
  75. template.setHashValueSerializer(serializer);
  76. // key的序列化采用StringRedisSerializer
  77. template.setKeySerializer(new StringRedisSerializer());
  78. template.setHashKeySerializer(new StringRedisSerializer());
  79. template.setConnectionFactory(redisConnectionFactory);
  80. // 使用fastjson时需设置此项,否则会报异常not support type
  81. ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
  82. return template;
  83. }
  84. /**
  85. * redis消息监听器容器 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器
  86. * 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理
  87. *
  88. * @param connectionFactory
  89. * @return
  90. */
  91. @Bean
  92. RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
  93. RedisMessageListenerContainer container = new RedisMessageListenerContainer();
  94. container.setConnectionFactory(connectionFactory);
  95. container.addMessageListener(redisGPSMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_GPS));
  96. container.addMessageListener(redisAlarmMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_SUBSCRIBE_ALARM_RECEIVE));
  97. container.addMessageListener(redisStreamMsgListener, new PatternTopic(VideoManagerConstants.WVP_MSG_STREAM_CHANGE_PREFIX + "PUSH"));
  98. container.addMessageListener(redisGbPlayMsgListener, new PatternTopic(RedisGbPlayMsgListener.WVP_PUSH_STREAM_KEY));
  99. return container;
  100. }
  101. }