以前使用redis 只是用于缓存功能,如今看到一个订阅与发布功能(得益于使用websocket做的聊天工具后看到该功能的实用性),下面简单使用redis的订阅与发布功能。
springboot 项目
application.yml
server:
port: 8080
redis:
host: 127.0.0.1
port: 6379
password:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
timeout: 100
redis消息订阅的实现
ReceiverB.java
import org.springframework.stereotype.Component;
@Component
public class ReceiverB {
public void receiveMsg(String message){
System.out.println("Receive1: " + message);
}
public void receiveMsgBy(String message){
System.out.println("Receive2: " + message);
}
}
redis消息订阅的配置
SubscriberConfig.java
@Configuration
public class SubscriberConfig {
/**
* 注入消息监听适配器
*/
@Bean
public MessageListenerAdapter getMessageListenerAdapter(ReceiverB receiver){
return new MessageListenerAdapter(receiver, "receiveMsg");
}
/**
* 消息监听处理器2
* @param receiver 处理器类
* @return
*/
@Bean
MessageListenerAdapter listenerAdapter2(ReceiverB receiver) {
//给messageListenerAdapter 传入一个消息接收的处理器,利用反射的方法调用“receiveMsgBy”
return new MessageListenerAdapter(receiver, "receiveMsgBy"); //receiveMsgBy:接收消息的方法名称
}
/**
* 注入消息监听容器
*/
@Bean
public RedisMessageListenerContainer getRedisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory,
@Qualifier("getMessageListenerAdapter") MessageListenerAdapter messageListenerAdapter,
@Qualifier("listenerAdapter2") MessageListenerAdapter listenerAdapter2
){
RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
redisMessageListenerContainer.addMessageListener(messageListenerAdapter, new PatternTopic("myChannel"));
redisMessageListenerContainer.addMessageListener(listenerAdapter2, new PatternTopic("myChanne2"));
return redisMessageListenerContainer;
}
}
redis消息发布的实现
SendBService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class SendBService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
public void sendMessage(String message){
try {
stringRedisTemplate.convertAndSend("myChannel", message);
}catch (Exception e){
e.printStackTrace();
}
}
public void sendMessage2(String message){
try {
stringRedisTemplate.convertAndSend("myChanne2", message);
}catch (Exception e){
e.printStackTrace();
}
}
}
启动服务后,按照个人的业务进行调用redis消息的发布,在需要接受消息放,监听获取redis发布的消息