Java之SpringBoot集成redis实现消息队列

Posted 蓝盒子itbluebox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java之SpringBoot集成redis实现消息队列相关的知识,希望对你有一定的参考价值。

Java之SpringBoot集成redis实现消息队列

一、设置好Redis的配置文件(application.yml)

spring:
  # redis 配置
  redis:
    # 地址
    host: localhost
    # 端口,默认为6379
    port: 6379
    # 数据库索引
    database: 2
    # 密码
    #password: root
    # 连接超时时间
    timeout: 10s
    lettuce:
      pool:
        # 连接池中的最小空闲连接
        min-idle: 0
        # 连接池中的最大空闲连接
        max-idle: 8
        # 连接池的最大数据库连接数
        max-active: 8
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms

二、消息接收者实体类(RedisMessage )

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 消息接收者实体类
 * @author
 * @date itbluebox
 */
@Slf4j
@Component
public class RedisMessage implements MessageListener 
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    /**
     * 测试代码
     */
    @Override
    public void onMessage(Message message, byte[] pattern) 
        RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
        String msg = serializer.deserialize(message.getBody());
        System.out.println("接收到的消息是1:" + msg);
    



三、消息队列 订阅者(RedisSubConfig)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;

/**
 * 消息队列  订阅者  redis配置
 * @author
 * @date itbluebox
 */
@Configuration
public class RedisSubConfig 
    /**
     * 创建连接工厂
     * @param connectionFactory
     * @param adapter
     * @return
     */
    @Bean
    public RedisMessageListenerContainer container(
            RedisConnectionFactory connectionFactory, MessageListenerAdapter adapter) 
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(adapter, new PatternTopic("userInfo"));
        container.addMessageListener(adapter, new PatternTopic("org"));
        return container;
    
    /**
     * @param message
     * @return
     */
    @Bean
    public MessageListenerAdapter adapter(RedisMessage message)
        // onMessage 如果RedisMessage 中 没有实现接口,这个参数必须跟RedisMessage中的读取信息的方法名称一样
        return new MessageListenerAdapter(message, "onMessage");
    

四、发送消息(消息生产者)


@RestController
public class TestController 
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
 
    @GetMapping("/sendDirectMessage")
    public String sendDirectMessage()
        stringRedisTemplate.convertAndSend("userInfo", "Hello world-userInfo");
        stringRedisTemplate.convertAndSend("org", "Hello world-org");
        return "ok";
    

以上是关于Java之SpringBoot集成redis实现消息队列的主要内容,如果未能解决你的问题,请参考以下文章

Java之SpringBoot集成redis实现消息队列

springboot集成springsession利用redis来实现session共享

Spring Boot之集成Redis:Spring Cache + Redis

SpringBoot2.0实战(23)整合Redis之集成缓存SpringDataCache

SpringBoot集成redisson操作redis

重学springboot系列之集群多节点应用session共享,redis分布式锁