spring boot 使用redis進行釋出訂閱

不該相遇在秋天發表於2018-07-01

非同步訊息的方式有很多,這篇部落格介紹如何使用redis進行釋出訂閱,

完成這個示例只需要三個檔案

 

1.redis訊息監聽配置

@Configuration
public class RedisListenerConfig {
    /**
     * redis訊息監聽器容器
     * 可以新增多個監聽不同話題的redis監聽器,只需要把訊息監聽器和相應的訊息訂閱處理器繫結,該訊息監聽器
     * 通過反射技術呼叫訊息訂閱處理器的相關方法進行一些業務處理
     * @param connectionFactory
     * @param listenerAdapter
     * @return
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter
    ) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);

        //可以新增多個 messageListener
        container.addMessageListener(listenerAdapter, new PatternTopic("index"));

        return container;
    }


    /**
     * 訊息監聽器介面卡,繫結訊息處理器,利用反射技術呼叫訊息處理器的業務方法
     * @param redisReceiver
     * @return
     */
    @Bean
    MessageListenerAdapter listenerAdapter(RedisReceiver redisReceiver) {
        System.out.println("訊息介面卡進來了");
        return new MessageListenerAdapter(redisReceiver, "receiveMessage");
    }

    //使用預設的工廠初始化redis操作模板
    @Bean
    StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
        return new StringRedisTemplate(connectionFactory);
    }
}

 

2.訊息處理

@Service
public class RedisReceiver {
    
    public void receiveMessage(String message) {
        System.out.println("訊息來了:"+message);
        //這裡是收到通道的訊息之後執行的方法
    }
}

 

3.一個傳送訊息的定時器

//定時器
@EnableScheduling
@Component
public class TestSenderController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    //向redis訊息佇列index通道釋出訊息
    @Scheduled(fixedRate = 3000)
    public void sendMessage(){
        stringRedisTemplate.convertAndSend("index",String.valueOf(Math.random()));
    }
}

 

執行結果如圖

 

本篇部落格地址:https://gitee.com/zhao-baolin/redis-message

 

相關文章