mysql消息队列推送到redis_Redis实现简单的消息队列

1         准备工作

先确保代码中已经集成Redis

2         Redis消息监听器配置

//序列化定制

@Bean

public Jackson2JsonRedisSerializer jackson2JsonSerializer() {

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(

Object.class);

ObjectMapper mapper = new ObjectMapper();

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jackson2JsonRedisSerializer.setObjectMapper(mapper);

return jackson2JsonRedisSerializer;

}

/**

* redis消息监听器

*/

@Bean

public MessageListenerAdapter lister(Jackson2JsonRedisSerializer jackson2JsonRedisSerializer, RedisMessageSubscriber subscriber){

MessageListenerAdapter adapter=new MessageListenerAdapter(subscriber,"onMessage");

adapter.setSerializer(jackson2JsonRedisSerializer);

adapter.afterPropertiesSet();

return adapter;

}

/**

* 将订阅器绑定到容器

* @param connectionFactory

* @param listener

* @return

*/

@Bean

public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listener) {

RedisMessageListenerContainer container = new RedisMessageListenerContainer();

container.setConnectionFactory(connectionFactory);

container.addMessageListener(listener, new PatternTopic("/redis/*"));

container.setTaskExecutor(Executors.newFixedThreadPool(20));//避免创建线程过多

return container;

}

3   Redis消息发布推送

/**

* @author xbchen

* @date 2020-3-2 13:58:33

* @description Reis消息发布推送

*/

@Service

public class RedisMessagePublish {

private final Logger logger = LoggerFactory.getLogger(RedisMessagePublish.class);

@Autowired

private RedisTemplate redisTemplate;

private ChannelTopic topic = new ChannelTopic("/redis/pubsub");

/**

* 推送消息

*

* @param publisher

* @param content

*/

public void publish(String publisher, String content) {

logger.info("{}发布Redis消息=====>{}", publisher, content);

redisTemplate.convertAndSend(topic.getTopic(), content);

}

}

4 Redis消息接收

/**

* @author xbchen

* @date 2020-3-2 13:58:33

* @description 模拟消息接收类

*/

@Component

public class RedisMessageSubscriber {

private final Logger logger = LoggerFactory.getLogger(RedisMessageSubscriber.class);

public void onMessage(String message, String pattern) {

logger.info("接收到Redis消息=====>:topic {} ;message {} ", pattern, message);

}

}

5  测试

@Scheduled(cron = "0/10 * * * * ? ")

public void testResitMessageTask() {

publishService.publish("admin", "redis消息订阅发布测试!");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值