• Redis实现简单的消息队列


    1         准备工作

    先确保代码中已经集成Redis

    2         Redis消息监听器配置

    //序列化定制
    @Bean
    public Jackson2JsonRedisSerializer<Object> jackson2JsonSerializer() {
        Jackson2JsonRedisSerializer<Object> 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<String, Object> 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消息订阅发布测试!");
        }
    

      

  • 相关阅读:
    python基础-递归
    python基础-三元表达式/列表推导式/生成器表达式
    python基础-生成器
    python基础-迭代器
    python基础-函数
    python基础-文件操作
    Docker(六)安装Red5进行rtmp推流
    Docker(五)安装Fastdfs
    Docker(四)安装Redis
    Docker(三)安装Mysql
  • 原文地址:https://www.cnblogs.com/brant/p/12496916.html
Copyright © 2020-2023  润新知