比如,你银行账号存款有变动,会收到短信,邮件等.
Subscribe:监听通道(监听一个叫chat的通道)
Publish :向通道发送消息
客户端1
客户端2
代码段 小部件
在spring中应用
- 除了RedisTemplate之外
- 需要实现MessageListener的实现类
- 以及运行listener的容器RedisMessageListenerContainer
MessageListener 实现类
@Component
public class MyRedisListener implements MessageListener {
@Autowired
RedisTemplate redisTemplate;
@Override
public void onMessage(Message message, byte[] bytes) {
byte[] body = message.getBody();
String myBody = (String) redisTemplate.getStringSerializer().deserialize(body);
System.out.println("消息体:"+myBody);
byte[] chat = message.getChannel();
String myChat = redisTemplate.getStringSerializer().deserialize(chat).toString();
System.out.println("通道名称:"+myChat);
System.out.println(new String(bytes));
}
}
2.spring-mvc-redis.xml
<mvc:annotation-driven/>
<context:component-scan base-package="Dao,Tenseven"/>
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="50"/>
<property name="maxTotal" value="100"/>
<property name="maxWaitMillis" value="20000"/>
</bean>
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="localhost"/>
<property name="port" value="6379"/>
<property name="poolConfig" ref="poolConfig"/>
</bean>
<bean id="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
deserialize
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="hashKeySerializer" ref="stringRedisSerializer"/>
<property name="hashValueSerializer" ref="stringRedisSerializer"/>
</bean>
<bean id="messageListener" class="ShiBa.MyRedisListener"/>
<bean class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置连接池,这里只要连接池生存,就会监听-->
<property name="taskExecutor">
<bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
<property name="poolSize" value="3"/>
</bean>
</property>
<!--配置监听者-->
<property name="messageListeners">
<map>
<!--监听类-->
<entry key-ref="messageListener">
<bean class="org.springframework.data.redis.listener.ChannelTopic">
<constructor-arg value="chat"/>
</bean>
</entry>
</map>
</property>
</bean>
3.运行类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-mvc-redis.xml")
public class RedisSimpleTest{
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test3 (){
String channel = "chat";
redisTemplate.convertAndSend(channel,"wo shi lcc");
}
}
结果: