spring-data-redis 怎么监听消息队列有消息来了

2024-12-29 20:19:22
推荐回答(2个)
回答1:

pom.xml中添加如下配置
添加版本配置

2.8.1
1.7.2.RELEASE
2.2



redis.clients
jedis
${jedis.version}



org.apache.commons
commons-pool2
${commons-pool2.version}




org.springframework.data
spring-data-redis
${spring-data-redis.version}


properties文件中添加如下配置
#redis配置
redis.host=192.168.1.150
redis.port=6379
redis.password=redis
redis.timeout=2000
redis.max_total=100
redis.max_idle=20
redis.min_idle=5
redis.test_on_borrow=true
redis.test_on_return=true

applicationContext.xml中添加如下配置:

















定义消息发送者(生产者):
@Component
public class SendMessage {

@Autowired
private RedisTemplate redisTemplate;

public void sendMessage(String channel, Serializable message) {
redisTemplate.convertAndSend(channel, message);
}
}

定义消息处理者(消费者):
public class ListenMessage {
public void handleMessage(Serializable message){
System.out.println(message);
}
}

调用:/queue/redis
@Controller
@RequestMapping(value = "/queue")
public class QueueController {

@Autowired
SendMessage sendMessage;

@RequestMapping(value="/redis")
public void redis(){
for (int i = 0; i <1000; i++) {
sendMessage.sendMessage("java",i);
}
}
}

回答2:

1. redis中保存的是数组(序列化),绝对不要保存SQL,保存SQL的方法很蛋疼 保存数组是为了数据库安全(万一sql语句有错误,任务就直接失败了),灵活度和兼容性2. 服务器后台作一个shell脚本,死循环,不断从队列中取数据,进行处理.如次反复,如果没有数据,也立即尝试取数据---不要担心性能问题,后台单并发请求,不会造成性能问题3. 因为队列中保存的是数组,不存在这个问题