java使用redis作为消息队列
编写一个类用来侦听redis发送过来的消息事件,类需要实现MessageListener接口的MessageListener方法
package com.ch17.redisdemo;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;
public class RedisMessageListenerDemo implements MessageListener {
private RedisTemplate redisTemplate;
public RedisTemplate getRedisTemplate() {
return redisTemplate;
}
public void setRedisTemplate(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@Override
public void onMessage(Message msg, byte[] bytes) {
// TODO Auto-generated method stub
byte[] bodys =msg.getBody();
String body=(String)getRedisTemplate().getDefaultSerializer().deserialize(bodys);
byte[] channels=msg.getChannel();
String channel=(String)getRedisTemplate().getStringSerializer().deserialize(channels);
System.out.println("message from channel "+new String(bytes)+" is "+body);
}
}
配置spring,把接收消息到类发布到spring
假设之前已经配置好RedisTemlate,配置一RedisMessageListenerContainer容器,主要的属性
有connectionFactory,taskExecutor,messageListeners
启动应用程序,从redis客户发送一条消息
127.0.0.1:6379> publish mychannel "aaahi"
(integer) 1
127.0.0.1:6379> publish mychannel "aaahi"
(integer) 1
127.0.0.1:6379>
java控制台输出如下
五月 05, 2018 12:15:04 下午 org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup start
信息: Starting beans in phase 2147483647
message from channel mychannel is aaahi