Skip to content

Commit 96d3e6d

Browse files
committed
feat: implement redis-related features
1 parent fcb645d commit 96d3e6d

File tree

10 files changed

+693
-95
lines changed

10 files changed

+693
-95
lines changed

docker-compose.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,44 @@ services:
9090
timeout: 25s
9191
retries: 5
9292

93+
redis-ssl:
94+
image: redis:7.0
95+
container_name: redis-ssl
96+
command: >
97+
redis-server
98+
--requirepass public
99+
--tls-port 6380
100+
--port 0
101+
--tls-cert-file /certs/redis-server.crt
102+
--tls-key-file /certs/redis-server.key
103+
--tls-ca-cert-file /certs/ca.crt
104+
ports:
105+
- "6380:6380"
106+
volumes:
107+
- ./test/assets/certs:/certs:ro
108+
networks:
109+
- emqx_network
110+
healthcheck:
111+
test:
112+
- "CMD"
113+
- "redis-cli"
114+
- "--tls"
115+
- "--cert"
116+
- "/certs/redis-server.crt"
117+
- "--key"
118+
- "/certs/redis-server.key"
119+
- "--cacert"
120+
- "/certs/ca.crt"
121+
- "-h"
122+
- "localhost"
123+
- "-p"
124+
- "6380"
125+
- "-a"
126+
- "public"
127+
- "ping"
128+
timeout: 25s
129+
retries: 5
130+
93131
networks:
94132
emqx_network:
95133
driver: bridge

priv/config.hocon

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ redis {
2525
pool_size = 8
2626
username = ""
2727
password = ""
28+
message_key_prefix = "mqtt:msg"
29+
subscription_key_prefix = "mqtt:sub"
30+
message_ttl = 7200
2831
database = 0
2932
}
3033

priv/config_i18n.json

Lines changed: 165 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,48 +12,48 @@
1212
"zh": "插入消息 SQL"
1313
},
1414
"$mysql_insert_message_sql_desc": {
15-
"en": "Insert Message SQL",
16-
"zh": "插入消息 SQL"
15+
"en": "SQL statement for inserting messages",
16+
"zh": "用于插入消息的 SQL 语句"
1717
},
1818
"$mysql_delete_message_sql_label": {
1919
"en": "Delete Message SQL",
2020
"zh": "删除消息 SQL"
2121
},
2222
"$mysql_delete_message_sql_desc": {
23-
"en": "Delete Message SQL",
24-
"zh": "删除消息 SQL"
23+
"en": "SQL statement for deleting messages",
24+
"zh": "用于删除消息的 SQL 语句"
2525
},
2626
"$mysql_select_message_sql_label": {
2727
"en": "Select Message SQL",
2828
"zh": "查询消息 SQL"
2929
},
3030
"$mysql_select_message_sql_desc": {
31-
"en": "Select Message SQL",
32-
"zh": "查询消息 SQL"
31+
"en": "SQL statement for retrieving messages",
32+
"zh": "用于检索消息的 SQL 语句"
3333
},
3434
"$mysql_insert_subscription_sql_label": {
3535
"en": "Insert Subscription SQL",
3636
"zh": "插入订阅 SQL"
3737
},
3838
"$mysql_insert_subscription_sql_desc": {
39-
"en": "Insert Subscription SQL",
40-
"zh": "插入订阅 SQL"
39+
"en": "SQL statement for inserting subscriptions",
40+
"zh": "用于插入订阅的 SQL 语句"
4141
},
4242
"$mysql_select_subscriptions_sql_label": {
4343
"en": "Select Subscriptions SQL",
4444
"zh": "查询订阅 SQL"
4545
},
4646
"$mysql_select_subscriptions_sql_desc": {
47-
"en": "Select Subscriptions SQL",
48-
"zh": "查询订阅 SQL"
47+
"en": "SQL statement for retrieving subscriptions",
48+
"zh": "用于检索订阅的 SQL 语句"
4949
},
5050
"$mysql_server_label": {
5151
"en": "MySQL Server",
5252
"zh": "MySQL 服务器"
5353
},
5454
"$mysql_server_desc": {
55-
"en": "MySQL Server",
56-
"zh": "MySQL 服务器"
55+
"en": "MySQL server addresses",
56+
"zh": "MySQL 服务器地址"
5757
},
5858
"$mysql_database_label": {
5959
"en": "MySQL Database",
@@ -68,7 +68,7 @@
6868
"zh": "MySQL 连接池大小"
6969
},
7070
"$mysql_pool_size_desc": {
71-
"en": "MySQL Pool Size",
71+
"en": "MySQL connection pool size",
7272
"zh": "MySQL 连接池大小"
7373
},
7474
"$mysql_username_label": {
@@ -92,64 +92,64 @@
9292
"zh": "MySQL 批量大小"
9393
},
9494
"$mysql_batch_size_desc": {
95-
"en": "MySQL Batch Size",
96-
"zh": "MySQL 批量大小"
95+
"en": "Number of messages to batch before writing",
96+
"zh": "写入前批量处理的消息数量"
9797
},
9898
"$mysql_batch_time_label": {
9999
"en": "MySQL Batch Time (ms)",
100100
"zh": "MySQL 批量时间 (ms)"
101101
},
102102
"$mysql_batch_time_desc": {
103-
"en": "MySQL Batch Time (ms)",
104-
"zh": "MySQL 批量时间 (ms)"
103+
"en": "Maximum time in milliseconds to wait before writing a batch",
104+
"zh": "写入批量数据前等待的最大时间(毫秒)"
105105
},
106106
"$mysql_ssl_enable_label": {
107107
"en": "MySQL SSL Enable",
108108
"zh": "MySQL SSL 启用"
109109
},
110110
"$mysql_ssl_enable_desc": {
111-
"en": "MySQL SSL Enable",
112-
"zh": "MySQL SSL 启用"
111+
"en": "Enable SSL/TLS connection",
112+
"zh": "启用 SSL/TLS 连接"
113113
},
114114
"$mysql_ssl_server_name_indication_label": {
115115
"en": "MySQL SSL Server Name Indication",
116116
"zh": "MySQL SSL 服务器名称指示"
117117
},
118118
"$mysql_ssl_server_name_indication_desc": {
119-
"en": "MySQL SSL Server Name Indication",
120-
"zh": "MySQL SSL 服务器名称指示"
119+
"en": "SSL Server Name Indication (SNI)",
120+
"zh": "SSL 服务器名称指示 (SNI)"
121121
},
122122
"$mysql_ssl_verify_label": {
123123
"en": "MySQL SSL Verify",
124124
"zh": "MySQL SSL 验证"
125125
},
126126
"$mysql_ssl_verify_desc": {
127-
"en": "MySQL SSL Verify",
128-
"zh": "MySQL SSL 验证"
127+
"en": "SSL verification level",
128+
"zh": "SSL 验证级别"
129129
},
130130
"$mysql_ssl_cacertfile_label": {
131131
"en": "MySQL SSL CA Cert File",
132132
"zh": "MySQL SSL CA 证书文件"
133133
},
134134
"$mysql_ssl_cacertfile_desc": {
135-
"en": "MySQL SSL CA Cert File",
136-
"zh": "MySQL SSL CA 证书文件"
135+
"en": "Path to SSL CA certificate file",
136+
"zh": "SSL CA 证书文件路径"
137137
},
138138
"$mysql_ssl_certfile_label": {
139139
"en": "MySQL SSL Cert File",
140140
"zh": "MySQL SSL 证书文件"
141141
},
142142
"$mysql_ssl_certfile_desc": {
143-
"en": "MySQL SSL Cert File",
144-
"zh": "MySQL SSL 证书文件"
143+
"en": "Path to SSL certificate file",
144+
"zh": "SSL 证书文件路径"
145145
},
146146
"$mysql_ssl_keyfile_label": {
147147
"en": "MySQL SSL Key File",
148148
"zh": "MySQL SSL 密钥文件"
149149
},
150150
"$mysql_ssl_keyfile_desc": {
151-
"en": "MySQL SSL Key File",
152-
"zh": "MySQL SSL 密钥文件"
151+
"en": "Path to SSL key file",
152+
"zh": "SSL 密钥文件路径"
153153
},
154154

155155

@@ -160,5 +160,141 @@
160160
"$enable_redis_desc": {
161161
"en": "Enable Redis integration",
162162
"zh": "启用 Redis 集成"
163+
},
164+
"$redis_type_label": {
165+
"en": "Redis Type",
166+
"zh": "Redis 类型"
167+
},
168+
"$redis_type_desc": {
169+
"en": "Redis deployment type (Single/Cluster/Sentinel)",
170+
"zh": "Redis 部署类型 (单机/集群/哨兵)"
171+
},
172+
"$redis_server_label": {
173+
"en": "Redis Servers",
174+
"zh": "Redis 服务器"
175+
},
176+
"$redis_server_desc": {
177+
"en": "Redis server addresses",
178+
"zh": "Redis 服务器地址"
179+
},
180+
"$redis_username_label": {
181+
"en": "Redis Username",
182+
"zh": "Redis 用户名"
183+
},
184+
"$redis_username_desc": {
185+
"en": "Redis Username",
186+
"zh": "Redis 用户名"
187+
},
188+
"$redis_password_label": {
189+
"en": "Redis Password",
190+
"zh": "Redis 密码"
191+
},
192+
"$redis_password_desc": {
193+
"en": "Redis Password",
194+
"zh": "Redis 密码"
195+
},
196+
"$redis_database_label": {
197+
"en": "Redis Database",
198+
"zh": "Redis 数据库"
199+
},
200+
"$redis_database_desc": {
201+
"en": "Redis Database",
202+
"zh": "Redis 数据库"
203+
},
204+
"$redis_pool_size_label": {
205+
"en": "Redis Pool Size",
206+
"zh": "Redis 连接池大小"
207+
},
208+
"$redis_pool_size_desc": {
209+
"en": "Redis connection pool size",
210+
"zh": "Redis 连接池大小"
211+
},
212+
"$redis_message_key_prefix_label": {
213+
"en": "Message Key Prefix",
214+
"zh": "消息键前缀"
215+
},
216+
"$redis_message_key_prefix_desc": {
217+
"en": "Prefix for message keys in Redis",
218+
"zh": "Redis 中消息键的前缀"
219+
},
220+
"$redis_subscription_key_prefix_label": {
221+
"en": "Subscription Key Prefix",
222+
"zh": "订阅键前缀"
223+
},
224+
"$redis_subscription_key_prefix_desc": {
225+
"en": "Prefix for subscription keys in Redis",
226+
"zh": "Redis 中订阅键的前缀"
227+
},
228+
"$redis_message_ttl_label": {
229+
"en": "Message TTL",
230+
"zh": "消息存活时间"
231+
},
232+
"$redis_message_ttl_desc": {
233+
"en": "Time to live for messages in seconds",
234+
"zh": "消息的存活时间(秒)"
235+
},
236+
"$redis_batch_size_label": {
237+
"en": "Batch Size",
238+
"zh": "批量大小"
239+
},
240+
"$redis_batch_size_desc": {
241+
"en": "Number of messages to batch before writing",
242+
"zh": "写入前批量处理的消息数量"
243+
},
244+
"$redis_batch_time_label": {
245+
"en": "Batch Time",
246+
"zh": "批量时间"
247+
},
248+
"$redis_batch_time_desc": {
249+
"en": "Maximum time in milliseconds to wait before writing a batch",
250+
"zh": "写入批量数据前等待的最大时间(毫秒)"
251+
},
252+
"$redis_ssl_enable_label": {
253+
"en": "Enable SSL",
254+
"zh": "启用 SSL"
255+
},
256+
"$redis_ssl_enable_desc": {
257+
"en": "Enable SSL/TLS connection",
258+
"zh": "启用 SSL/TLS 连接"
259+
},
260+
"$redis_ssl_server_name_indication_label": {
261+
"en": "SSL Server Name Indication",
262+
"zh": "SSL 服务器名称指示"
263+
},
264+
"$redis_ssl_server_name_indication_desc": {
265+
"en": "SSL Server Name Indication (SNI)",
266+
"zh": "SSL 服务器名称指示 (SNI)"
267+
},
268+
"$redis_ssl_verify_label": {
269+
"en": "SSL Verify",
270+
"zh": "SSL 验证"
271+
},
272+
"$redis_ssl_verify_desc": {
273+
"en": "SSL verification level",
274+
"zh": "SSL 验证级别"
275+
},
276+
"$redis_ssl_cacertfile_label": {
277+
"en": "SSL CA Certificate",
278+
"zh": "SSL CA 证书"
279+
},
280+
"$redis_ssl_cacertfile_desc": {
281+
"en": "Path to SSL CA certificate file",
282+
"zh": "SSL CA 证书文件路径"
283+
},
284+
"$redis_ssl_certfile_label": {
285+
"en": "SSL Certificate",
286+
"zh": "SSL 证书"
287+
},
288+
"$redis_ssl_certfile_desc": {
289+
"en": "Path to SSL certificate file",
290+
"zh": "SSL 证书文件路径"
291+
},
292+
"$redis_ssl_keyfile_label": {
293+
"en": "SSL Key File",
294+
"zh": "SSL 密钥文件"
295+
},
296+
"$redis_ssl_keyfile_desc": {
297+
"en": "Path to SSL key file",
298+
"zh": "SSL 密钥文件路径"
163299
}
164300
}

priv/config_schema.avsc

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,39 @@
327327
"description": "$redis_password_desc"
328328
}
329329
},
330+
{
331+
"name": "message_key_prefix",
332+
"type": "string",
333+
"default": "mqtt:msg",
334+
"$ui": {
335+
"component": "input",
336+
"required": true,
337+
"label": "$redis_message_key_prefix_label",
338+
"description": "$redis_message_key_prefix_desc"
339+
}
340+
},
341+
{
342+
"name": "subscription_key_prefix",
343+
"type": "string",
344+
"default": "mqtt:sub",
345+
"$ui": {
346+
"component": "input",
347+
"required": true,
348+
"label": "$redis_subscription_key_prefix_label",
349+
"description": "$redis_subscription_key_prefix_desc"
350+
}
351+
},
352+
{
353+
"name": "message_ttl",
354+
"type": "int",
355+
"default": 7200,
356+
"$ui": {
357+
"component": "input-number",
358+
"required": true,
359+
"label": "$redis_message_ttl_label",
360+
"description": "$redis_message_ttl_desc"
361+
}
362+
},
330363
{
331364
"name": "batch_size",
332365
"type": "int",

0 commit comments

Comments
 (0)