项目中一直在使用redis的subscribe功能,偶然会发生订阅断开的问题,一直无法定位,在此之下只能阅读源码定位问题
首先从spring.xml入手观察配置
<bean id="twaListener" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter"> <property name="delegate" ref="twocAlertListener"/> </bean> <bean id="twocAlertListener" class="com.fnic.wifi.server.redis.TwocAlertListener" /> <bean id="redisContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer"> <property name="connectionFactory" ref="jedisConnFactory"/> <property name="messageListeners"> <map> <entry key-ref="twaListener"> <bean class="org.springframework.data.redis.listener.ChannelTopic"> <constructor-arg value="c_sta_login" /> </bean> </entry> </map> </property> </bean>
RedisMessageListenerContainer类中有个Map专门放MessageListenerAdapter类型的监听,同时这个类也是整个监听的核心类,总共有1000行