您的位置:首页 > 数据库 > Redis

Spring-Redis基于Redis的MS消息服务

2017-11-14 14:07 447 查看
官网:messaging-redis




Spring-data-redis提供了redis的发布-订阅消息队列功能。具体实例如下:

下面是需要注入的两个bean,一个是消息容器,有多种实现,redis只是其中一种,另一个是监听器,该

监听器可以通过自定义的类指明消息处理方法来对消息进行接受和处理。

package com.tom.ms.redis;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;

/**
* redis发布订阅监听配置
* @author tomZ
* @date 2017年11月14日
* @desc TODO
*/
@Configuration
public class RedisMessageConfiguration {

private static final Logger logger = LoggerFactory.getLogger(Receiver.class);
/**
* 容器监听bean
* @param fac
* @param adapter
* @return
*/
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory fac, MessageListenerAdapter adapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(fac);
container.addMessageListener(adapter, new PatternTopic("chat"));
logger.info("Redis Message Container bean init finished.");
return container;
}

/**
* 消息监听注入到bean,必须注入,不能手动new,因为该类实现了InitializingBean,需要执行afterPropertiesSet方法,
* 注入到bean会自动执行
* @return
*/
@Bean
public MessageListenerAdapter adapter() {
return new MessageListenerAdapter(new Receiver(), "receiveMessage");
}

}

Receiver的类如下,非常简单:
package com.tom.ms.redis;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* 消息接收Pojo
* @author tomZ
* @date 2017年11月14日
* @desc TODO
*/
public class Receiver {

private static final Logger logger = LoggerFactory.getLogger(Receiver.class);

public void receiveMessage(String msg) {
logger.info("redis message service receive: "+msg);
}

}
在需要的地方使用SpringRedisTemplate来发送消息,直接注入即可。
@AutoWired

private StringRedisTempate redisTemplate;

redisTemplate.convertAndSend("chat","hi,SB");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: