jettask 0.2.20__tar.gz → 0.2.24__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. {jettask-0.2.20 → jettask-0.2.24}/PKG-INFO +1 -1
  2. {jettask-0.2.20 → jettask-0.2.24}/jettask/__init__.py +4 -0
  3. {jettask-0.2.20 → jettask-0.2.24}/jettask/cli.py +12 -8
  4. {jettask-0.2.20 → jettask-0.2.24}/jettask/config/lua_scripts.py +37 -0
  5. {jettask-0.2.20 → jettask-0.2.24}/jettask/config/nacos_config.py +1 -1
  6. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/app.py +313 -340
  7. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/container.py +4 -4
  8. {jettask-0.2.20/jettask/persistence → jettask-0.2.24/jettask/core}/namespace.py +93 -27
  9. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/task.py +16 -9
  10. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/unified_manager_base.py +136 -26
  11. jettask-0.2.24/jettask/db/__init__.py +67 -0
  12. jettask-0.2.24/jettask/db/base.py +137 -0
  13. jettask-0.2.20/jettask/utils/db_connector.py → jettask-0.2.24/jettask/db/connector.py +130 -26
  14. jettask-0.2.24/jettask/db/models/__init__.py +16 -0
  15. jettask-0.2.24/jettask/db/models/scheduled_task.py +196 -0
  16. jettask-0.2.24/jettask/db/models/task.py +77 -0
  17. jettask-0.2.24/jettask/db/models/task_run.py +85 -0
  18. jettask-0.2.24/jettask/executor/__init__.py +23 -0
  19. {jettask-0.2.20 → jettask-0.2.24}/jettask/executor/core.py +76 -31
  20. {jettask-0.2.20 → jettask-0.2.24}/jettask/executor/process_entry.py +29 -114
  21. {jettask-0.2.20 → jettask-0.2.24}/jettask/executor/task_executor.py +4 -0
  22. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/event_pool.py +928 -685
  23. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/scanner.py +30 -0
  24. jettask-0.2.24/jettask/persistence/__init__.py +43 -0
  25. jettask-0.2.24/jettask/persistence/buffer.py +170 -0
  26. jettask-0.2.24/jettask/persistence/consumer.py +396 -0
  27. jettask-0.2.24/jettask/persistence/manager.py +304 -0
  28. jettask-0.2.24/jettask/persistence/persistence.py +391 -0
  29. jettask-0.2.24/jettask/scheduler/__init__.py +29 -0
  30. jettask-0.2.20/jettask/scheduler/task_crud.py → jettask-0.2.24/jettask/scheduler/database.py +61 -57
  31. {jettask-0.2.20 → jettask-0.2.24}/jettask/scheduler/loader.py +2 -2
  32. jettask-0.2.20/jettask/scheduler/scheduler_coordinator.py → jettask-0.2.24/jettask/scheduler/manager.py +23 -6
  33. {jettask-0.2.20 → jettask-0.2.24}/jettask/scheduler/models.py +14 -10
  34. jettask-0.2.24/jettask/scheduler/schedule.py +166 -0
  35. {jettask-0.2.20 → jettask-0.2.24}/jettask/scheduler/scheduler.py +12 -11
  36. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/__init__.py +50 -1
  37. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/backlog.py +43 -6
  38. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/namespace.py +70 -19
  39. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/queue.py +19 -3
  40. jettask-0.2.24/jettask/schemas/responses.py +493 -0
  41. {jettask-0.2.20 → jettask-0.2.24}/jettask/task/__init__.py +0 -2
  42. {jettask-0.2.20 → jettask-0.2.24}/jettask/task/router.py +3 -0
  43. {jettask-0.2.20 → jettask-0.2.24}/jettask/test_connection_monitor.py +1 -1
  44. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/__init__.py +7 -5
  45. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/db_init.py +8 -4
  46. jettask-0.2.24/jettask/utils/namespace_dep.py +167 -0
  47. jettask-0.2.24/jettask/utils/queue_matcher.py +186 -0
  48. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/rate_limit/concurrency_limiter.py +7 -1
  49. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/stream_backlog.py +1 -1
  50. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/__init__.py +0 -1
  51. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/api/__init__.py +4 -4
  52. jettask-0.2.24/jettask/webui/api/alerts.py +961 -0
  53. jettask-0.2.24/jettask/webui/api/example_refactored.py +400 -0
  54. jettask-0.2.24/jettask/webui/api/namespaces.py +479 -0
  55. jettask-0.2.24/jettask/webui/api/overview.py +382 -0
  56. jettask-0.2.24/jettask/webui/api/queues.py +1234 -0
  57. jettask-0.2.24/jettask/webui/api/scheduled.py +1613 -0
  58. jettask-0.2.24/jettask/webui/api/settings.py +166 -0
  59. jettask-0.2.24/jettask/webui/api/workers.py +442 -0
  60. jettask-0.2.24/jettask/webui/app.py +126 -0
  61. jettask-0.2.24/jettask/webui/middleware/__init__.py +6 -0
  62. jettask-0.2.24/jettask/webui/middleware/namespace_middleware.py +135 -0
  63. jettask-0.2.24/jettask/webui/services/__init__.py +168 -0
  64. jettask-0.2.24/jettask/webui/services/heartbeat_service.py +251 -0
  65. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/services/overview_service.py +60 -51
  66. jettask-0.2.24/jettask/webui/services/queue_monitor_service.py +426 -0
  67. jettask-0.2.24/jettask/webui/services/redis_monitor_service.py +87 -0
  68. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/services/settings_service.py +174 -111
  69. jettask-0.2.24/jettask/webui/services/task_monitor_service.py +222 -0
  70. jettask-0.2.24/jettask/webui/services/timeline_pg_service.py +452 -0
  71. jettask-0.2.24/jettask/webui/services/timeline_service.py +189 -0
  72. jettask-0.2.24/jettask/webui/services/worker_monitor_service.py +467 -0
  73. jettask-0.2.24/jettask/webui/utils/__init__.py +11 -0
  74. jettask-0.2.24/jettask/webui/utils/time_utils.py +122 -0
  75. {jettask-0.2.20 → jettask-0.2.24}/jettask/worker/lifecycle.py +8 -2
  76. {jettask-0.2.20 → jettask-0.2.24}/jettask.egg-info/PKG-INFO +1 -1
  77. {jettask-0.2.20 → jettask-0.2.24}/jettask.egg-info/SOURCES.txt +30 -33
  78. {jettask-0.2.20 → jettask-0.2.24}/pyproject.toml +1 -1
  79. jettask-0.2.20/jettask/executor/__init__.py +0 -38
  80. jettask-0.2.20/jettask/executor/executor.py +0 -338
  81. jettask-0.2.20/jettask/persistence/__init__.py +0 -118
  82. jettask-0.2.20/jettask/persistence/backlog_monitor.py +0 -567
  83. jettask-0.2.20/jettask/persistence/base.py +0 -2334
  84. jettask-0.2.20/jettask/persistence/consumer.py +0 -315
  85. jettask-0.2.20/jettask/persistence/db_manager.py +0 -516
  86. jettask-0.2.20/jettask/persistence/maintenance.py +0 -81
  87. jettask-0.2.20/jettask/persistence/message_consumer.py +0 -259
  88. jettask-0.2.20/jettask/persistence/models.py +0 -49
  89. jettask-0.2.20/jettask/persistence/offline_recovery.py +0 -196
  90. jettask-0.2.20/jettask/persistence/queue_discovery.py +0 -215
  91. jettask-0.2.20/jettask/persistence/task_persistence.py +0 -218
  92. jettask-0.2.20/jettask/persistence/task_updater.py +0 -583
  93. jettask-0.2.20/jettask/scheduler/__init__.py +0 -17
  94. jettask-0.2.20/jettask/scheduler/add_execution_count.sql +0 -11
  95. jettask-0.2.20/jettask/scheduler/add_priority_field.sql +0 -26
  96. jettask-0.2.20/jettask/scheduler/add_scheduler_id.sql +0 -25
  97. jettask-0.2.20/jettask/scheduler/add_scheduler_id_index.sql +0 -10
  98. jettask-0.2.20/jettask/scheduler/make_scheduler_id_required.sql +0 -28
  99. jettask-0.2.20/jettask/scheduler/migrate_interval_seconds.sql +0 -9
  100. jettask-0.2.20/jettask/scheduler/performance_optimization.sql +0 -45
  101. jettask-0.2.20/jettask/scheduler/run_scheduler.py +0 -186
  102. jettask-0.2.20/jettask/scheduler/schema.sql +0 -84
  103. jettask-0.2.20/jettask/task/task_executor.py +0 -318
  104. jettask-0.2.20/jettask/webui/api/alerts.py +0 -226
  105. jettask-0.2.20/jettask/webui/api/analytics.py +0 -323
  106. jettask-0.2.20/jettask/webui/api/namespaces.py +0 -134
  107. jettask-0.2.20/jettask/webui/api/overview.py +0 -136
  108. jettask-0.2.20/jettask/webui/api/queues.py +0 -530
  109. jettask-0.2.20/jettask/webui/api/scheduled.py +0 -420
  110. jettask-0.2.20/jettask/webui/api/settings.py +0 -44
  111. jettask-0.2.20/jettask/webui/app.py +0 -2409
  112. jettask-0.2.20/jettask/webui/config.py +0 -90
  113. jettask-0.2.20/jettask/webui/models/__init__.py +0 -3
  114. jettask-0.2.20/jettask/webui/models/namespace.py +0 -63
  115. jettask-0.2.20/jettask/webui/namespace_manager/__init__.py +0 -10
  116. jettask-0.2.20/jettask/webui/namespace_manager/multi.py +0 -593
  117. jettask-0.2.20/jettask/webui/namespace_manager/unified.py +0 -193
  118. jettask-0.2.20/jettask/webui/run.py +0 -46
  119. jettask-0.2.20/jettask/webui/services/__init__.py +0 -22
  120. {jettask-0.2.20 → jettask-0.2.24}/LICENSE +0 -0
  121. {jettask-0.2.20 → jettask-0.2.24}/MANIFEST.in +0 -0
  122. {jettask-0.2.20 → jettask-0.2.24}/jettask/config/__init__.py +0 -0
  123. {jettask-0.2.20 → jettask-0.2.24}/jettask/config/config.py +0 -0
  124. {jettask-0.2.20 → jettask-0.2.24}/jettask/config/constants.py +0 -0
  125. {jettask-0.2.20 → jettask-0.2.24}/jettask/config/env_loader.py +0 -0
  126. {jettask-0.2.20 → jettask-0.2.24}/jettask/config/performance.py +0 -0
  127. {jettask-0.2.20 → jettask-0.2.24}/jettask/config/task_center.py +0 -0
  128. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/__init__.py +0 -0
  129. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/app_importer.py +0 -0
  130. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/context.py +0 -0
  131. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/enums.py +0 -0
  132. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/message.py +0 -0
  133. {jettask-0.2.20 → jettask-0.2.24}/jettask/core/retry.py +0 -0
  134. {jettask-0.2.20 → jettask-0.2.24}/jettask/exceptions.py +0 -0
  135. {jettask-0.2.20 → jettask-0.2.24}/jettask/executor/orchestrator.py +0 -0
  136. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/__init__.py +0 -0
  137. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/pg_consumer/pg_consumer_v2.py +0 -0
  138. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/pg_consumer/sql/add_execution_time_field.sql +0 -0
  139. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/pg_consumer/sql/create_new_tables.sql +0 -0
  140. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/pg_consumer/sql/create_tables_v3.sql +0 -0
  141. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/pg_consumer/sql/migrate_to_new_structure.sql +0 -0
  142. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/pg_consumer/sql/modify_time_fields.sql +0 -0
  143. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/pg_consumer/sql_utils.py +0 -0
  144. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/reader.py +0 -0
  145. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/registry.py +0 -0
  146. {jettask-0.2.20 → jettask-0.2.24}/jettask/messaging/sender.py +0 -0
  147. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/alert.py +0 -0
  148. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/common.py +0 -0
  149. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/monitoring.py +0 -0
  150. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/scheduled_task.py +0 -0
  151. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/schema.sql +0 -0
  152. {jettask-0.2.20 → jettask-0.2.24}/jettask/schemas/task.py +0 -0
  153. {jettask-0.2.20 → jettask-0.2.24}/jettask/task/task_center/__init__.py +0 -0
  154. {jettask-0.2.20 → jettask-0.2.24}/jettask/task/task_center/client.py +0 -0
  155. {jettask-0.2.20 → jettask-0.2.24}/jettask/task/task_registry.py +0 -0
  156. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/backlog_collector.py +0 -0
  157. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/error_handler.py +0 -0
  158. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/exception_hook.py +0 -0
  159. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/file_watcher.py +0 -0
  160. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/helpers.py +0 -0
  161. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/logger.py +0 -0
  162. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/rate_limit/__init__.py +0 -0
  163. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/rate_limit/config.py +0 -0
  164. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/rate_limit/limiter.py +0 -0
  165. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/rate_limit/manager.py +0 -0
  166. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/rate_limit/qps_limiter.py +0 -0
  167. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/rate_limit/task_limiter.py +0 -0
  168. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/redis_monitor.py +0 -0
  169. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/serializer.py +0 -0
  170. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/task_logger.py +0 -0
  171. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/time_sync.py +0 -0
  172. {jettask-0.2.20 → jettask-0.2.24}/jettask/utils/traceback_filter.py +0 -0
  173. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/services/alert_service.py +0 -0
  174. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/services/analytics_service.py +0 -0
  175. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/services/queue_service.py +0 -0
  176. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/services/queue_stats_v2.py +0 -0
  177. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/services/scheduled_task_service.py +0 -0
  178. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/services/task_service.py +0 -0
  179. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/sql/batch_upsert_functions.sql +0 -0
  180. {jettask-0.2.20 → jettask-0.2.24}/jettask/webui/sql/verify_database.sql +0 -0
  181. {jettask-0.2.20 → jettask-0.2.24}/jettask/worker/__init__.py +0 -0
  182. {jettask-0.2.20 → jettask-0.2.24}/jettask/worker/manager.py +0 -0
  183. {jettask-0.2.20 → jettask-0.2.24}/jettask/worker/recovery.py +0 -0
  184. {jettask-0.2.20 → jettask-0.2.24}/jettask.egg-info/dependency_links.txt +0 -0
  185. {jettask-0.2.20 → jettask-0.2.24}/jettask.egg-info/entry_points.txt +0 -0
  186. {jettask-0.2.20 → jettask-0.2.24}/jettask.egg-info/requires.txt +0 -0
  187. {jettask-0.2.20 → jettask-0.2.24}/jettask.egg-info/top_level.txt +0 -0
  188. {jettask-0.2.20 → jettask-0.2.24}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jettask
3
- Version: 0.2.20
3
+ Version: 0.2.24
4
4
  Summary: A high-performance distributed task queue system with web monitoring
5
5
  Author-email: JetTask Team <support@jettask.io>
6
6
  License-Expression: MIT
@@ -9,8 +9,10 @@ import inspect
9
9
  # Core class imports
10
10
  from jettask.core.app import Jettask
11
11
  from jettask.core.message import TaskMessage
12
+ from jettask.core.context import TaskContext
12
13
  from jettask.task.task_center.client import TaskCenter
13
14
  from jettask.task.router import TaskRouter
15
+ from jettask.scheduler.schedule import Schedule
14
16
 
15
17
  # Rate limit config imports
16
18
  from jettask.utils.rate_limit.config import QPSLimit, ConcurrencyLimit
@@ -68,10 +70,12 @@ def get_task_logger(name: str = None) -> logging.Logger:
68
70
  __all__ = [
69
71
  "Jettask",
70
72
  "TaskMessage",
73
+ "Schedule",
71
74
  "TaskCenter",
72
75
  "TaskRouter",
73
76
  "QPSLimit",
74
77
  "ConcurrencyLimit",
75
78
  "get_task_logger",
76
79
  "LogContext",
80
+ "TaskContext"
77
81
  ]
@@ -473,11 +473,14 @@ def worker(ctx, app_str, queues, concurrency, prefetch, reload):
473
473
  @click.option('--task-center', '-tc', envvar='JETTASK_CENTER_URL', required=True,
474
474
  help='任务中心URL,如: http://localhost:8001 或 http://localhost:8001/api/namespaces/default')
475
475
  @click.option('--check-interval', type=int, default=30,
476
- help='命名空间检测间隔(秒),默认30秒')
476
+ help='命名空间检测间隔(秒),仅多命名空间模式使用,默认30秒')
477
+ @click.option('--concurrency', '-c', type=int, default=4,
478
+ help='并发数(每个命名空间的 worker 进程数),默认4')
477
479
  @click.option('--debug', is_flag=True, help='启用调试模式')
478
- def webui_consumer(task_center, check_interval, debug):
479
- """启动数据消费者(自动识别单/多命名空间)
480
+ def webui_consumer(task_center, check_interval, concurrency, debug):
481
+ """启动 PostgreSQL 数据消费者(自动识别单/多命名空间)
480
482
 
483
+ 从 Redis 队列消费任务并持久化到 PostgreSQL 数据库。
481
484
  根据URL格式自动判断运行模式:
482
485
  - 单命名空间: http://localhost:8001/api/namespaces/{name}
483
486
  - 多命名空间: http://localhost:8001 或 http://localhost:8001/api
@@ -491,7 +494,7 @@ def webui_consumer(task_center, check_interval, debug):
491
494
  # 为单个命名空间启动消费者
492
495
  jettask webui-consumer --task-center http://localhost:8001/api/namespaces/default
493
496
 
494
- # 自定义检测间隔
497
+ # 自定义配置
495
498
  jettask webui-consumer --task-center http://localhost:8001 --check-interval 60
496
499
 
497
500
  # 使用环境变量
@@ -499,7 +502,7 @@ def webui_consumer(task_center, check_interval, debug):
499
502
  jettask webui-consumer
500
503
  """
501
504
  import asyncio
502
- from jettask.webui.namespace_manager.unified import UnifiedConsumerManager
505
+ from jettask.persistence.manager import UnifiedConsumerManager
503
506
 
504
507
  # 运行消费者管理器
505
508
  async def run_manager():
@@ -507,6 +510,7 @@ def webui_consumer(task_center, check_interval, debug):
507
510
  manager = UnifiedConsumerManager(
508
511
  task_center_url=task_center,
509
512
  check_interval=check_interval,
513
+ concurrency=concurrency,
510
514
  debug=debug
511
515
  )
512
516
  await manager.run()
@@ -514,7 +518,7 @@ def webui_consumer(task_center, check_interval, debug):
514
518
  try:
515
519
  asyncio.run(run_manager())
516
520
  except KeyboardInterrupt:
517
- click.echo("\nShutdown complete")
521
+ click.echo("\n✓ 消费者已关闭")
518
522
 
519
523
  # @cli.command()
520
524
  # def monitor():
@@ -565,7 +569,7 @@ def status():
565
569
 
566
570
  # 检查 Redis 连接
567
571
  try:
568
- from jettask.utils.db_connector import get_sync_redis_client
572
+ from jettask.db.connector import get_sync_redis_client
569
573
  r = get_sync_redis_client('redis://localhost:6379/0', decode_responses=True)
570
574
  r.ping()
571
575
  click.echo("✓ Redis: Connected")
@@ -623,7 +627,7 @@ def scheduler(task_center, interval, batch_size, check_interval, debug):
623
627
  jettask scheduler
624
628
  """
625
629
  import asyncio
626
- from jettask.scheduler.scheduler_coordinator import UnifiedSchedulerManager
630
+ from jettask.scheduler.manager import UnifiedSchedulerManager
627
631
 
628
632
  # 运行调度器管理器
629
633
  async def run_manager():
@@ -149,10 +149,47 @@ end
149
149
  return results
150
150
  """
151
151
 
152
+ # Lua脚本:批量发送事件
153
+ # 用于 _batch_send_event 和 _batch_send_event_sync 方法
154
+ # 批量发送消息到Stream并自动生成offset,同时注册队列
155
+ LUA_SCRIPT_BATCH_SEND_EVENT = """
156
+ local stream_key = KEYS[1]
157
+ local prefix = ARGV[1]
158
+ local results = {}
159
+
160
+ -- 使用Hash存储所有队列的offset
161
+ local offsets_hash = prefix .. ':QUEUE_OFFSETS'
162
+
163
+ -- 从stream_key中提取队列名(去掉prefix:QUEUE:前缀)
164
+ local queue_name = string.gsub(stream_key, '^' .. prefix .. ':QUEUE:', '')
165
+
166
+ -- 将队列添加到全局队列注册表(包括所有队列,包括优先级队列)
167
+ local queues_registry_key = prefix .. ':REGISTRY:QUEUES'
168
+ redis.call('SADD', queues_registry_key, queue_name)
169
+
170
+ -- 从ARGV[2]开始,每个参数是一个消息的data
171
+ for i = 2, #ARGV do
172
+ local data = ARGV[i]
173
+
174
+ -- 使用HINCRBY原子递增offset(如果不存在会自动创建并设为1)
175
+ local current_offset = redis.call('HINCRBY', offsets_hash, queue_name, 1)
176
+
177
+ -- 添加消息到Stream(包含offset字段)
178
+ local stream_id = redis.call('XADD', stream_key, '*',
179
+ 'data', data,
180
+ 'offset', current_offset)
181
+
182
+ table.insert(results, stream_id)
183
+ end
184
+
185
+ return results
186
+ """
187
+
152
188
  __all__ = [
153
189
  'LUA_SCRIPT_DELAYED_TASKS',
154
190
  'LUA_SCRIPT_NORMAL_TASKS',
155
191
  'LUA_SCRIPT_GET_AND_DELETE',
156
192
  'LUA_SCRIPT_BATCH_SEND',
157
193
  'LUA_SCRIPT_SEND_DELAYED_TASKS',
194
+ 'LUA_SCRIPT_BATCH_SEND_EVENT',
158
195
  ]
@@ -530,4 +530,4 @@ class NacosConfigLoader:
530
530
 
531
531
 
532
532
  # 创建全局配置实例(默认30秒刷新一次)
533
- config = NacosConfigLoader(refresh_interval=30)
533
+ config = NacosConfigLoader(refresh_interval=1)