zoukankan      html  css  js  c++  java
  • 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消息订阅发布测试!");
        }
    

      

  • 相关阅读:
    struts1与struts2的差别
    UVA 1563
    项目开发相关规范
    互联网产品的測试
    虚拟机器人
    Caused by: java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataPro
    HDU 1429--胜利大逃亡(续)【BFS &amp;&amp; 状态压缩】
    自己写的php curl库实现整站克隆
    设置字符串中某些字符的特殊效果
    Objective-C学习笔记(二十二)——初始化方法init的重写与自己定义
  • 原文地址:https://www.cnblogs.com/brant/p/12496916.html
Copyright © 2011-2022 走看看