# redis-mq **Repository Path**: gnliscream/redis-mq ## Basic Information - **Project Name**: redis-mq - **Description**: redis实现的消息队列 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-11-13 - **Last Updated**: 2025-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## git [https://gitee.com/gnliscream/redis-mq](https://gitee.com/gnliscream/redis-mq) ## 引入依赖 ```xml 1.0-SNAPSHOT vip.gnloypp redis-mq-api ${redis-mq.version} vip.gnloypp redis-mq-api-data ${redis-mq.version} ``` ## 生产者 ### 配置 ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import vip.gnloypp.redis.mq.api.config.RedisSenderConfig; import vip.gnloypp.redis.mq.api.config.RedisSenderQueueConfig; import vip.gnloypp.redis.mq.api.core.manager.RedisSenderManager; @Configuration public class EventConfig { /** * 注入生产者管理器 */ @Bean public RedisSenderManager redisSenderManager(RedisSenderConfig redisSenderConfig) { return new RedisSenderManager(redisSenderConfig); } /** * 注入生产者配置 * 需要注入自己的RedisConnectionFactory */ @Bean public RedisSenderConfig redisSenderConfig(RedisConnectionFactory redisConnectionFactory) { return new RedisSenderConfig() // redis链接工厂 .setRedisConnectionFactory(redisConnectionFactory) // 环境 .setEnv("dev") // 日志打印的前缀 .setLogPrefix("【MGMT】") // 生产者配置 .setRedisSenderQueueConfigs( new RedisSenderQueueConfig() // 队列唯一标识 .setQueue("4d0578da9202441eb8aa2a683416c511") // 消息类 .setEventType(SmsEvent.class) // 队列最大长度 .setQueueMaxSize(10L) ); } } ``` ### 发送示例 ```java import lombok.Getter; import lombok.Setter; import vip.gnloypp.redis.mq.api.data.RedisMqMessage; @Setter @Getter public class SmsEvent extends RedisMqMessage { /** * 手机号 */ private String phone; /** * 验证码 */ private String code; } ``` ```java import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.constraints.NotBlank; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import vip.gnloypp.redis.mq.api.core.manager.RedisSenderManager; @Tag(name = "短信", description = "20241104001") @Validated @RestController @RequestMapping("/admin/sms") public class SmsController { @Autowired private RedisSenderManager redisSenderManager; @Operation(summary = "发送") @GetMapping("/send") public void send(@NotBlank String phone) { SmsEvent smsEvent = new SmsEvent(); smsEvent.setPhone(phone); smsEvent.setCode(String.valueOf(Math.random()).substring(3, 9)); redisSenderManager.sendMessage(smsEvent); } } ``` ## 消费者 ### 配置 ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import vip.gnloypp.redis.mq.api.config.RedisReceiverConfig; import vip.gnloypp.redis.mq.api.config.RedisReceiverQueueConfig; import vip.gnloypp.redis.mq.api.core.manager.RedisReceiverManager; @Configuration public class EventConfig { /** * 消费者管理器 */ @Bean public RedisReceiverManager redisReceiverManager(RedisReceiverConfig redisReceiverConfig) { return new RedisReceiverManager(redisReceiverConfig); } /** * 消费者配置 * 需要注入自己的RedisConnectionFactory */ @Bean public RedisReceiverConfig redisReceiverConfig(RedisConnectionFactory redisConnectionFactory, SmsHandler smsHandler) { return new RedisReceiverConfig() // redis链接工厂 .setRedisConnectionFactory(redisConnectionFactory) // 环境 .setEnv("dev") // 日志打印的前缀 .setLogPrefix("【BASIC】") // 消费者配置 .setRedisReceiverQueueConfigs( new RedisReceiverQueueConfig() // 消费者组 .setGroup("group1") // 消费者 .setConsumer("consumer1") // 队列唯一标识 .setQueue("4d0578da9202441eb8aa2a683416c511") // 消息类 .setEventType(SmsEvent.class) // 消费处理类 .setReceiveHandler(smsHandler) // 每次拉取消息数 .setBatchSize(10) // 重试间隔(秒) .setRetryTimeout(30L) // 消息隐藏时间(秒) .setMinIdleTime(20L) // 重试次数 .setRetryMaxCount(5L) ); } } ``` ### 接收示例 ```java import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import vip.gnloypp.redis.mq.api.core.handler.ReceiveHandler; @Log4j2 @Component public class SmsHandler implements ReceiveHandler { @Autowired private SmsClient smsClient; @Override public boolean receive(SmsEvent message) { SendSmsRequest request = new SendSmsRequest(); request.setPhoneNumbers(message.getPhone()); request.setCode(message.getCode()); smsClient.send(request); return true; } } ``` ## 测试 ### 生产者启动 ![输入图片说明](https://images.gnloypp.vip/png/10fdbb1c1d2942578bc097ca63900001.png) ### 消费者启动 ![输入图片说明](https://images.gnloypp.vip/png/10fdbb1c1d2942578bc097ca63900002.png) ### 发送消息 ![输入图片说明](https://images.gnloypp.vip/png/10fdbb1c1d2942578bc097ca63900003.png) ![输入图片说明](https://images.gnloypp.vip/png/10fdbb1c1d2942578bc097ca63900006.png) ### 接收消息 ![输入图片说明](https://images.gnloypp.vip/png/10fdbb1c1d2942578bc097ca63900004.png) ![输入图片说明](https://images.gnloypp.vip/png/10fdbb1c1d2942578bc097ca63900007.png)