天天看點

redis 的訂閱和釋出功能

作者:fengyexin9

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

繼續閱讀