spring-data-redis实现跨系统消息发布与订阅
以下例子的使用环境:
1.spring-boot 2.1.6
2.spring-boot-starter-data-redis 2.1.6
3.系统A,系统B,使用同一个redis服务器。
4.系统A为发布者,系统B为订阅者(消费者)
引入依赖:https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
系统A的代码
在你需要发送消息的业务方法中,调用以下方法 sendMsgToRedis
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* 发布消息
* @param topic
* @param object
*/
public void sendMsgToRedis(String topic, Object object) {
stringRedisTemplate.convertAndSend(topic, object);
}
B系统 订阅A系统的消息
/**
* 说明:
* redis 消息监听配置
* @author yh
**/
@Component
public class RedisListenerConfig {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private SyncDocumentService syncDocumentService;
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
//下面的topic与系统A
container.addMessageListener(listenerAdapter, new PatternTopic(RedisMsgType.REDIS_DOCUMENT_SYNC_TOPIC.getRedisKey()));
return container;
}
@Bean
MessageListenerAdapter listenerAdapter() {
//使用下面service中的handleMessage
return new MessageListenerAdapter(syncDocumentService, "handleMessage");
}
}
//SyncDocumentService 中的handleMessage方法定义:
@Service
public class SyncDocumentService {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public void handleMessage(String jsonStr) {
logger.info("文档同步消息订阅频道有新消息进来,参数:{}", jsonStr);
logger.info(jsonStr);
//开始处理同步业务逻辑
}
}
地址二