Spring Boot使用Redis進行消息的發佈與訂閱

Redis 不只提供一個NoSQL數據庫,同時還提供了一套消息系統。 下面我將Spring Boot使用Redis進行消息的發佈與訂閱具體的流程分享給你們redis

首先引入依賴spring

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-redis</artifactId>
	<version>1.4.7.RELEASE</version>
</dependency>
複製代碼

1.發送消息

@SpringBootApplication
@EntityScan(basePackages= {"cn.sh.sttri.app.messagepush"})
@EnableCaching
@EnableScheduling
public class MessagepushApplication {

	public static void main(String[] args) {

		ApplicationContext ct=SpringApplication.run(MessagepushApplication.class, args);

		StringRedisTemplate template = ct.getBean(StringRedisTemplate.class);
		template.convertAndSend("messagepush", "Hello message !");
		template.convertAndSend("messagepush3", "Hello message3 !");

	}
}
複製代碼

發送消息咱們使用StringRedisTemplate來發送鍵和值均爲字符串的消息。在main()方法中咱們建立一個Spring應用的Context,初始化消息監聽者容器,開始監聽消息。而後獲取StringRedisTemplate的實例,往messagepush和messagepush3兩個主題發送消息數據庫

2.Redis 配置消息通道

建立一個Redis消息配置類 鏈接工程咱們使用Spring Boot默認的RedisConnectionFactory 咱們將在listenerAdapter方法中定義的Bean註冊爲一個消息監聽者,它將監聽messagepush和messagepush3兩個主題的消息。bash

由於Receiver類是一個POJO,要將它包裝在一個消息監聽者適配器(實現了MessageListener接口),這樣才能被監聽者容器RedisMessageListenerContainer的addMessageListener方法添加到鏈接工廠中。有了這個適配器,當一個消息到達時,就會調用receiveMesage()方法進行響應。app

@Configuration
public class RedisChannelConfig {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        //訂閱主題messagepush和messagepush3
        container.addMessageListener(listenerAdapter, new PatternTopic("messagepush"));
        container.addMessageListener(listenerAdapter, new PatternTopic("messagepush3"));
        //這個container 能夠添加多個 messageListener
        return container;
    }

    @Bean
    MessageListenerAdapter listenerAdapter(MessageReceive receiver) {
        //這個地方 是給messageListenerAdapter 傳入一個消息接受的處理器,利用反射的方法調用「receiveMessage」
        //也有好幾個重載方法,這邊默認調用處理器的方法 叫handleMessage 能夠本身到源碼裏面看
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

    @Bean //注入操做數據的template(這裏不須要操做redis數據,和消息隊列功能無關)
    StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
        return new StringRedisTemplate(connectionFactory);
    }

}
複製代碼

3.處理MessageReceive 消息接收類的receiveMessage()處理業務

/**redis 消息處理器*/
@Component
public class MessageReceive {

    @Autowired
    private MessageReceiveHandler messageReceiveHandler;
    /**接收消息的方法*/
    public void receiveMessage(String message){
        //System.out.println(message);

        messageReceiveHandler.messagePush(message);
    }

}
複製代碼

到MessageReceiveHandler 類中調用messagePush()spring-boot

@Component
public class MessageReceiveHandler {
  public void messagePush(String message){
     
   System.out.println("----------收到消息了message:"+message);

 }
}

複製代碼

到這裏一個完整的Spring Boot使用Redis進行消息的發佈與訂閱過程就打通了 ui

圖片.png
相關文章
相關標籤/搜索