用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

springcloud    -  云代码空间

——

企业级 SpringBoot 教程 (十二)在springboot中用redis实现消息队列

2019-03-07|370阅||

摘要:准备阶段 java 1.8 maven 3.0 idea 环境依赖 完整项目的源码来源 技术支持一七九一七三三八零 创建一个新的springboot工程,在其pom文件,加入spring-boot-starter-data-redis依赖:

准备阶段

java 1.8

maven 3.0

idea

环境依赖

完整项目的源码来源 技术支持yuncode.net

创建一个新的springboot工程,在其pom文件,加入spring-boot-starter-data-redis依赖:
 
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
 
创建一个消息接收者 REcevier类,它是一个普通的类,需要注入到springboot中。
 
public class Receiver {
    private static final Logger LOGGER = LoggerFactory.getLogger(Receiver.class);

    private CountDownLatch latch;

    @Autowired
    public Receiver(CountDownLatch latch) {
        this.latch = latch;
    }

    public void receiveMessage(String message) {
        LOGGER.info("Received <" + message + ">");
        latch.countDown();
    }
}
 
注入消息接收者
 
@Bean
    Receiver receiver(CountDownLatch latch) {
        return new Receiver(latch);
    }

    @Bean
    CountDownLatch latch() {
        return new CountDownLatch(1);
    }

    @Bean
    StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
        return new StringRedisTemplate(connectionFactory);
    }
 
注入消息监听容器 在spring data redis中,利用redis发送一条消息和接受一条消息,需要三样东西:

一个连接工厂 一个消息监听容器 Redis template 上述1、3步已经完成,所以只需注入消息监听容器即可:

@Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(listenerAdapter, new PatternTopic("chat"));

        return container;
    }

    @Bean
    MessageListenerAdapter listenerAdapter(Receiver receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }
 
测试在springboot入口的main方法:
 
public static void main(String[] args) throws Exception{
        ApplicationContext ctx =  SpringApplication.run(SpringbootRedisApplication.class, args);

        StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);
        CountDownLatch latch = ctx.getBean(CountDownLatch.class);

        LOGGER.info("Sending message...");
        template.convertAndSend("chat", "Hello from Redis!");

        latch.await();

        System.exit(0);
    }
 

顶 1踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: springcloud
    • 等级: 资深程序员
    • 积分: 1555
    • 代码: 0 个
    • 文章: 55 篇
    • 随想: 0 条
    • 访问: 1 次
    • 关注

    人气代码

      最新提问

        站长推荐