# 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;
}
}
```
## 测试
### 生产者启动

### 消费者启动

### 发送消息


### 接收消息

