訊息佇列: 創建發布者-----創建訂閱者-----配置監聽器-----監聽佇列-----配置監聽配接器
監聽配接器系結對應的類和方法,通過java反射進行訂閱消費

配置監聽器-----監聽佇列-----配置監聽配接器
package com.example.demo.config;
import com.example.demo.controller.RedisController;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* @Description:redis配置類
* @Author: ZhaoYaJun
* @Date: 2021/01/25
*/
@Configuration
public class RedisConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter1,
MessageListenerAdapter listenerAdapter2) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
// 每一個監聽器messageListener都需要一個配接器,佇列可以是同一個
container.addMessageListener(listenerAdapter1, new PatternTopic("redis:test"));
container.addMessageListener(listenerAdapter2, new PatternTopic("redis:prod"));
return container;
}
/**
* 訊息監聽器配接器,系結訊息處理器,利用反射技術呼叫訊息處理器的業務方法
* @return
*/
@Bean
MessageListenerAdapter listenerAdapter1(RedisController redisController) {
return new MessageListenerAdapter(redisController, "receiveMessage1");
}
/**
* 訊息監聽器配接器,系結訊息處理器,利用反射技術呼叫訊息處理器的業務方法
* @return
*/
@Bean
MessageListenerAdapter listenerAdapter2(RedisController redisController) {
return new MessageListenerAdapter(redisController, "receiveMessage2");
}
@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory);
}
}
訊息發布者
/**
* 訊息發布者
* @return
*/
@RequestMapping("/redisTest")
public String redisTest() {
for(int i = 1; i <= 5; i++) {
redisTemplate.convertAndSend("redis:test","通知你該開始了");
}
redisTemplate.convertAndSend("redis:prod","通知你該結束了");
return "";
}
訊息訂閱者
package com.example.demo.controller;
import org.springframework.stereotype.Component;
@Component
public class RedisController {
public void receiveMessage1(String message) {
System.out.println(message+":收到");
}
public void receiveMessage2(String message) {
System.out.println(message+":OK");
}
}
輸出結果

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/398797.html
標籤:其他
