1. 程式人生 > >springboot使用redis實現釋出與訂閱

springboot使用redis實現釋出與訂閱

  • 配置redis連線地址

# Redis伺服器地址
spring.redis.host=youxiu326.xin
# Redis伺服器連線埠
spring.redis.port=6379
# Redis伺服器連線密碼(預設為空)
spring.redis.password=

 

  • redis訂閱者
/**
 * 訊息處理器POJO
 * redis訂閱
 */
@Component
public class ConsumerMsg {

    /**接收訊息的方法*/
    public void receiveMessage(String message,String chanel){
        System.out.println("收到一條訊息:"+message);
        System.out.println("通道名稱:"+chanel);
    }

}
  • redis配置類
@Configuration
public class RedisMessageConfig{
    
    @Autowired
    private RedisTemplate<Object, Object> redisTemplate;
    
    @Bean  
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        //訂閱了一個叫blog.youxiu326.com的通道
        container.addMessageListener(listenerAdapter, new PatternTopic("blog.youxiu326.com"));
        //這個container 可以新增多個messageListener
        return container;
    }
    

    /**
     * 訊息監聽器介面卡,繫結訊息處理器,利用反射技術呼叫訊息處理器的業務方法
     * @param receiver
     * @return
     */
    @Bean
    MessageListenerAdapter listenerAdapter(ConsumerMsg receiver) {
        //這個地方 是給messageListenerAdapter 傳入一個訊息接受的處理器,利用反射的方法呼叫“receiveMessage”
        //也有好幾個過載方法,這邊預設呼叫處理器的方法 叫handleMessage 可以自己到原始碼裡面看
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

 

此時

  • ConsumerMsg類就已經可以訂閱blog.youxiu326.com通道的訊息了
     
  • redis釋出
@Controller
public class RedisCtrl {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    /**
     * redis釋出
     * @return
     */
    @RequestMapping("/test")
    public @ResponseBody String test(){
        /**
         * 通過blog.youxiu326.com通道傳送了一條訊息
         */
        stringRedisTemplate.convertAndSend("blog.youxiu326.com", "牛逼不不不");
        return "ok";
    }

} 

 

啟動專案,訪問 */test 就可以在控制檯看到效果

來自 http://blog.youxiu326.com/view/8