This commit is contained in:
zhoujia
2025-10-24 15:51:46 +08:00
parent 057a095596
commit c61d154937
23 changed files with 3092 additions and 8 deletions

View File

@ -0,0 +1,42 @@
server:
port: 8080
spring:
application:
name: redis-stream-demo
redis:
host: localhost
port: 6379
password:
database: 0
timeout: 10000ms # 增加超时时间到10秒
lettuce:
pool:
max-active: 8
max-wait: 5000ms # 设置合理的等待时间
max-idle: 8
min-idle: 0
# Redis Stream Configuration
redis:
stream:
key: "message-stream"
consumer-group: "message-consumer-group"
consumer-name: "message-consumer"
# 消费者模式配置
consumer:
# 默认模式: stream-listener, manual-ack, both
default-mode: "both"
# 是否启用 StreamListener 模式
stream-listener-enabled: false
# 是否启用 Manual Ack 模式
manual-ack-enabled: false
# Logging Configuration
logging:
level:
com.example: DEBUG
org.springframework.data.redis: DEBUG
io.lettuce: DEBUG

View File

@ -0,0 +1,129 @@
server:
port: 8081
spring:
application:
name: redis-stream-demo
# 数据库配置
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password:
hikari:
maximum-pool-size: 10
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
# H2数据库控制台
h2:
console:
enabled: true
path: /h2-console
# JPA配置
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true
properties:
hibernate:
format_sql: true
# 异步任务配置
task:
execution:
pool:
core-size: 5
max-size: 10
queue-capacity: 100
keep-alive: 60s
scheduling:
pool:
size: 5
redis:
host: localhost
port: 6379
password:
database: 0
timeout: 2000ms
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
# Redis Stream Configuration
redis:
stream:
key: "message-stream"
consumer-group: "message-consumer-group"
consumer-name: "message-consumer"
# 事务消息配置
transactional:
# 消息表模式配置
message-table:
# 是否启用消息表模式事务消息服务(默认关闭)
enabled: false
# 是否启用定时任务处理待发送消息(默认关闭)
scheduled-processing-enabled: false
# 是否启用定时任务重试失败消息(默认关闭)
scheduled-retry-enabled: false
# 消费者模式配置
consumer:
# 默认模式: stream-listener, manual-ack, both
default-mode: "both"
# 是否启用 StreamListener 模式
stream-listener-enabled: true
# 是否启用 Manual Ack 模式
manual-ack-enabled: true
# StreamListener 配置
stream-listener:
# 是否自动启动
auto-start: false
# 是否处理历史消息true: 从开头读取所有消息false: 只读取新消息)
process-historical-messages: true
# 轮询超时时间(秒)
poll-timeout: 1
# 线程池核心线程数
core-pool-size: 2
# 线程池最大线程数
max-pool-size: 4
# 线程空闲时间(秒)
keep-alive-time: 60
# Manual Ack 配置
manual-ack:
# 默认批量大小
default-batch-size: 10
# 最大批量大小
max-batch-size: 100
# 轮询间隔(毫秒)
poll-interval: 1000
# 是否启用并发处理
concurrent-processing: false
# 最大并发数
max-concurrency: 5
# Application Configuration
app:
# 是否在启动时运行事务消息示例(默认关闭)
run-examples-on-startup: false
# Logging Configuration
logging:
level:
com.example: DEBUG
org.springframework.data.redis: DEBUG
io.lettuce: DEBUG
charset:
console: UTF-8
file: UTF-8

View File

@ -0,0 +1,56 @@
-- 消息表模式事务消息数据库表结构
-- 业务数据表
CREATE TABLE IF NOT EXISTS business_data (
id VARCHAR(36) PRIMARY KEY COMMENT '业务数据ID',
data TEXT NOT NULL COMMENT '业务数据内容',
status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '业务数据状态',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_status (status),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='业务数据表';
-- 消息表
CREATE TABLE IF NOT EXISTS message_table (
id VARCHAR(36) PRIMARY KEY COMMENT '消息ID',
content TEXT NOT NULL COMMENT '消息内容',
type VARCHAR(50) NOT NULL COMMENT '消息类型',
sender VARCHAR(100) NOT NULL COMMENT '发送者',
status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '消息状态',
retry_count INT NOT NULL DEFAULT 0 COMMENT '重试次数',
error_message TEXT COMMENT '错误信息',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_status (status),
INDEX idx_created_at (created_at),
INDEX idx_updated_at (updated_at),
INDEX idx_retry_count (retry_count)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息表';
-- 死信队列表
CREATE TABLE IF NOT EXISTS dead_letter_queue (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '死信ID',
message_id VARCHAR(36) NOT NULL COMMENT '原始消息ID',
content TEXT NOT NULL COMMENT '消息内容',
type VARCHAR(50) NOT NULL COMMENT '消息类型',
sender VARCHAR(100) NOT NULL COMMENT '发送者',
error_message TEXT COMMENT '错误信息',
retry_count INT NOT NULL DEFAULT 0 COMMENT '重试次数',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_message_id (message_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='死信队列表';
-- 消息发送日志表
CREATE TABLE IF NOT EXISTS message_send_log (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '日志ID',
message_id VARCHAR(36) NOT NULL COMMENT '消息ID',
action VARCHAR(50) NOT NULL COMMENT '操作类型',
status VARCHAR(20) NOT NULL COMMENT '操作状态',
error_message TEXT COMMENT '错误信息',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_message_id (message_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息发送日志表';