所謂發布訂閱模式,就是發布了消息丟到通道中,消費者進行消費
看代碼:
1 首先需要配置這個連接工廠 ,這地方可能有人有疑問,為什么需要單獨做一個類呢,是由與這個連接工廠其他地方需要用到,所以以bean的方式注入
@Configuration public class Redisconfig { @Value("${redis.database}") private int database; @Value("${redis.host}") private String hostName; @Value("${redis.port}") private int port; @Value("${redis.password}") private String password; @Bean(name = "redisConnectionFactory") protected RedisConnectionFactory jedisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName(hostName); redisStandaloneConfiguration.setPort(port); redisStandaloneConfiguration.setDatabase(database); redisStandaloneConfiguration.setPassword(RedisPassword.of(password)); JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder(); jedisClientConfiguration.connectTimeout(Duration.ofSeconds(60));// 60s return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration.build()); } }
2 配置2
/** * @program: operation->RedisTemplateConfig * @description: * @author: cxy * @create: 2019-12-26 17:55 **/ @Configuration public class RedisTemplateConfig { @Autowired RedisConnectionFactory redisConnectionFactory; @Bean public StringRedisTemplate redisTemplate() { StringRedisTemplate temple = new StringRedisTemplate(); temple.setConnectionFactory(redisConnectionFactory); return temple; } @Bean RedisMessageListenerContainer container( MessageListenerAdapter listenerAdapter) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(redisConnectionFactory);
//此處那個通道“cxy” 是監聽者配置的通道,要與發送者相同 container.addMessageListener(listenerAdapter, new PatternTopic("cxy")); return container; } //利用反射來創建監聽到消息之后的執行方法 ,RedisReceiver 是接受者的類,receiveMessage接受者的方法
@Bean MessageListenerAdapter listenerAdapter(RedisReceiver redisReceiver) {
return new MessageListenerAdapter(redisReceiver, "receiveMessage"); }
}
3RedisReceiver接受類
@Service public class RedisReceiver { public void receiveMessage(String message) { //這里是收到通道的消息之后執行的方法 System.out.println("message:"+message); } }
4 發送的方法:
@RequestMapping(value = "/q", method = RequestMethod.POST) public Result q() { redisTemplate.convertAndSend("cxy","我是中國人"); return Result.success(); }
5 主redis的配置:
redis: host: password: poolMaxIdle: 500 poolMaxTotal: 1000 poolMaxWait: 500 port: 6379 timeout: 10 database: 0
6 調用結果:
可以看到接受到了