|  |  |  | 
|---|
|  |  |  | package com.genersoft.iot.vmp.conf; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.genersoft.iot.vmp.common.VideoManagerConstants; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.service.impl.*; | 
|---|
|  |  |  | import org.apache.commons.lang3.StringUtils; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Value; | 
|---|
|  |  |  | import org.springframework.cache.annotation.CachingConfigurerSupport; | 
|---|
|  |  |  | import org.springframework.context.annotation.Bean; | 
|---|
|  |  |  | import org.springframework.context.annotation.Configuration; | 
|---|
|  |  |  | import org.springframework.data.redis.connection.RedisConnectionFactory; | 
|---|
|  |  |  | import org.springframework.data.redis.core.RedisTemplate; | 
|---|
|  |  |  | import org.springframework.data.redis.listener.PatternTopic; | 
|---|
|  |  |  | import org.springframework.data.redis.listener.RedisMessageListenerContainer; | 
|---|
|  |  |  | import org.springframework.data.redis.serializer.StringRedisSerializer; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.parser.ParserConfig; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.utils.redis.FastJsonRedisSerializer; | 
|---|
|  |  |  | import redis.clients.jedis.JedisPool; | 
|---|
|  |  |  | import redis.clients.jedis.JedisPoolConfig; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @Description:Redis中间件配置类,使用spring-data-redis集成,自动从application.yml中加载redis配置 | 
|---|
|  |  |  | * @description:Redis中间件配置类,使用spring-data-redis集成,自动从application.yml中加载redis配置 | 
|---|
|  |  |  | * @author: swwheihei | 
|---|
|  |  |  | * @date: 2019年5月30日 上午10:58:25 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Configuration | 
|---|
|  |  |  | public class RedisConfig extends CachingConfigurerSupport { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${spring.redis.host}") | 
|---|
|  |  |  | private String host; | 
|---|
|  |  |  | @Value("${spring.redis.port}") | 
|---|
|  |  |  | private int port; | 
|---|
|  |  |  | @Value("${spring.redis.database}") | 
|---|
|  |  |  | private int database; | 
|---|
|  |  |  | @Value("${spring.redis.password}") | 
|---|
|  |  |  | private String password; | 
|---|
|  |  |  | @Value("${spring.redis.timeout}") | 
|---|
|  |  |  | private int timeout; | 
|---|
|  |  |  | @Value("${spring.redis.poolMaxTotal:1000}") | 
|---|
|  |  |  | private int poolMaxTotal; | 
|---|
|  |  |  | @Value("${spring.redis.poolMaxIdle:500}") | 
|---|
|  |  |  | private int poolMaxIdle; | 
|---|
|  |  |  | @Value("${spring.redis.poolMaxWait:5}") | 
|---|
|  |  |  | private int poolMaxWait; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisGpsMsgListener redisGPSMsgListener; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisAlarmMsgListener redisAlarmMsgListener; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisStreamMsgListener redisStreamMsgListener; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisGbPlayMsgListener redisGbPlayMsgListener; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisPushStreamStatusMsgListener redisPushStreamStatusMsgListener; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Bean | 
|---|
|  |  |  | public JedisPool jedisPool() { | 
|---|
|  |  |  | if (StringUtils.isBlank(password)) { | 
|---|
|  |  |  | password = null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | JedisPoolConfig poolConfig = new JedisPoolConfig(); | 
|---|
|  |  |  | poolConfig.setMaxIdle(poolMaxIdle); | 
|---|
|  |  |  | poolConfig.setMaxTotal(poolMaxTotal); | 
|---|
|  |  |  | // 秒转毫秒 | 
|---|
|  |  |  | poolConfig.setMaxWaitMillis(poolMaxWait * 1000L); | 
|---|
|  |  |  | JedisPool jp = new JedisPool(poolConfig, host, port, timeout * 1000, password, database); | 
|---|
|  |  |  | return jp; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Bean("redisTemplate") | 
|---|
|  |  |  | public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { | 
|---|
|  |  |  | 
|---|
|  |  |  | template.setHashKeySerializer(new StringRedisSerializer()); | 
|---|
|  |  |  | template.setConnectionFactory(redisConnectionFactory); | 
|---|
|  |  |  | // 使用fastjson时需设置此项,否则会报异常not support type | 
|---|
|  |  |  | ParserConfig.getGlobalInstance().setAutoTypeSupport(true); | 
|---|
|  |  |  | ParserConfig.getGlobalInstance().setAutoTypeSupport(true); | 
|---|
|  |  |  | return template; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | RedisMessageListenerContainer container = new RedisMessageListenerContainer(); | 
|---|
|  |  |  | container.setConnectionFactory(connectionFactory); | 
|---|
|  |  |  | container.addMessageListener(redisGPSMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_GPS)); | 
|---|
|  |  |  | container.addMessageListener(redisAlarmMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_SUBSCRIBE_ALARM_RECEIVE)); | 
|---|
|  |  |  | container.addMessageListener(redisStreamMsgListener, new PatternTopic(VideoManagerConstants.WVP_MSG_STREAM_CHANGE_PREFIX + "PUSH")); | 
|---|
|  |  |  | container.addMessageListener(redisGbPlayMsgListener, new PatternTopic(RedisGbPlayMsgListener.WVP_PUSH_STREAM_KEY)); | 
|---|
|  |  |  | container.addMessageListener(redisPushStreamStatusMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_STATUS_CHANGE)); | 
|---|
|  |  |  | return container; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|