以前使用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釋出的消息