redis-smq 8.0.0-rc.25 → 8.0.0-rc.27
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.
- package/CHANGELOG.md +19 -0
- package/dist/cjs/src/common/redis-client/scripts/lua/delete-message.lua +17 -20
- package/dist/cjs/src/common/redis-client/scripts/lua/handle-processing-queue.lua +18 -17
- package/dist/cjs/src/common/redis-client/scripts/lua/init-consumer-queue.lua +1 -3
- package/dist/cjs/src/common/redis-client/scripts/lua/publish-scheduled-message.lua +3 -9
- package/dist/cjs/src/common/redis-client/scripts/lua/requeue-message.lua +6 -7
- package/dist/cjs/src/common/redis-client/scripts/lua/schedule-message.lua +5 -8
- package/dist/cjs/src/common/redis-keys/redis-keys.d.ts +5 -1
- package/dist/cjs/src/common/redis-keys/redis-keys.js +20 -28
- package/dist/cjs/src/common/types/event.d.ts +3 -3
- package/dist/cjs/src/config/messages/store.js +3 -4
- package/dist/cjs/src/config/namespace.js +2 -2
- package/dist/cjs/src/lib/consumer/consumer/consumer.d.ts +1 -4
- package/dist/cjs/src/lib/consumer/consumer/consumer.js +0 -53
- package/dist/cjs/src/lib/consumer/consumer-heartbeat/consumer-heartbeat.d.ts +3 -7
- package/dist/cjs/src/lib/consumer/consumer-heartbeat/consumer-heartbeat.js +13 -56
- package/dist/cjs/src/lib/consumer/message-handler/consume-message/consume-message.d.ts +2 -2
- package/dist/cjs/src/lib/consumer/message-handler/consume-message/consume-message.js +12 -12
- package/dist/cjs/src/lib/consumer/message-handler/dequeue-message/dequeue-message.d.ts +0 -1
- package/dist/cjs/src/lib/consumer/message-handler/dequeue-message/dequeue-message.js +16 -21
- package/dist/cjs/src/lib/consumer/message-handler/message-handler/message-handler.d.ts +4 -1
- package/dist/cjs/src/lib/consumer/message-handler/message-handler/message-handler.js +44 -2
- package/dist/cjs/src/lib/consumer/message-handler/processing-queue/processing-queue.d.ts +10 -0
- package/dist/cjs/src/lib/consumer/message-handler/processing-queue/processing-queue.js +150 -0
- package/dist/cjs/src/lib/consumer/message-handler/processing-queue/types/index.d.ts +2 -0
- package/dist/cjs/src/lib/consumer/message-handler/processing-queue/types/index.js +18 -0
- package/dist/cjs/src/lib/consumer/message-handler/processing-queue/types/processing-queue.d.ts +26 -0
- package/dist/cjs/src/lib/consumer/message-handler/processing-queue/types/processing-queue.js +25 -0
- package/dist/cjs/src/lib/consumer/types/index.d.ts +1 -1
- package/dist/cjs/src/lib/consumer/types/index.js +1 -1
- package/dist/cjs/src/lib/consumer/types/message-handler.d.ts +5 -2
- package/dist/cjs/src/lib/consumer/workers/delay-unacknowledged.worker.d.ts +2 -2
- package/dist/cjs/src/lib/consumer/workers/delay-unacknowledged.worker.js +5 -6
- package/dist/cjs/src/lib/consumer/workers/publish-scheduled.worker.d.ts +2 -2
- package/dist/cjs/src/lib/consumer/workers/publish-scheduled.worker.js +5 -6
- package/dist/cjs/src/lib/consumer/workers/requeue-unacknowledged.worker.d.ts +2 -4
- package/dist/cjs/src/lib/consumer/workers/requeue-unacknowledged.worker.js +8 -9
- package/dist/cjs/src/lib/consumer/workers/watch-consumers.worker.d.ts +2 -2
- package/dist/cjs/src/lib/consumer/workers/watch-consumers.worker.js +15 -16
- package/dist/cjs/src/lib/consumer/workers/worker.d.ts +4 -3
- package/dist/cjs/src/lib/consumer/workers/worker.js +2 -1
- package/dist/cjs/src/lib/consumer-groups/_/_delete-consumer-group.js +4 -6
- package/dist/cjs/src/lib/consumer-groups/_/_save-consumer-group.js +3 -4
- package/dist/cjs/src/lib/event-bus/event-bus-redis-instance.js +2 -2
- package/dist/cjs/src/lib/exchange/exchange-direct/_/_get-exchange-direct-transferable.d.ts +1 -1
- package/dist/cjs/src/lib/exchange/exchange-direct/_/_validate-exchange-direct-params.d.ts +1 -1
- package/dist/cjs/src/lib/exchange/exchange-direct/_/_validate-exchange-direct-params.js +2 -2
- package/dist/cjs/src/lib/exchange/exchange-fan-out/_/_get-exchange-fanout-transferable.d.ts +1 -1
- package/dist/cjs/src/lib/exchange/exchange-topic/_/_get-exchange-topic-transferable.d.ts +1 -1
- package/dist/cjs/src/lib/exchange/exchange-topic/_/_get-topic-exchange-params.d.ts +1 -1
- package/dist/cjs/src/lib/exchange/exchange-topic/_/_get-topic-exchange-params.js +3 -3
- package/dist/cjs/src/lib/exchange/exchange-topic/_/_validate-exchange-topic-params.d.ts +1 -1
- package/dist/cjs/src/lib/exchange/exchange-topic/_/_validate-exchange-topic-params.js +2 -2
- package/dist/cjs/src/lib/message/_/_delete-message.js +2 -4
- package/dist/cjs/src/lib/message/_/_requeue-message.js +16 -16
- package/dist/cjs/src/lib/message/producible-message.js +8 -8
- package/dist/cjs/src/lib/producer/_/_schedule-message.js +7 -11
- package/dist/cjs/src/lib/producer/producer.js +2 -1
- package/dist/cjs/src/lib/queue/_/_delete-queue.js +14 -23
- package/dist/cjs/src/lib/queue/_/_parse-queue-extended-params.d.ts +1 -1
- package/dist/cjs/src/lib/queue/_/_parse-queue-extended-params.js +2 -2
- package/dist/cjs/src/lib/queue/_/_parse-queue-params-and-validate.js +2 -2
- package/dist/cjs/src/lib/queue/_/_parse-queue-params.d.ts +1 -1
- package/dist/cjs/src/lib/queue/_/_parse-queue-params.js +8 -8
- package/dist/cjs/src/lib/queue-messages/_/_validate-queue-extended-params.js +3 -4
- package/dist/cjs/src/lib/queue-messages/queue-messages-paginator/queue-messages-paginator-abstract.js +1 -1
- package/dist/cjs/src/lib/queue-messages/queue-messages.js +1 -1
- package/dist/cjs/src/lib/queue-messages/queue-pending-messages/queue-pending-messages.js +1 -1
- package/dist/esm/src/common/redis-client/scripts/lua/delete-message.lua +17 -20
- package/dist/esm/src/common/redis-client/scripts/lua/handle-processing-queue.lua +18 -17
- package/dist/esm/src/common/redis-client/scripts/lua/init-consumer-queue.lua +1 -3
- package/dist/esm/src/common/redis-client/scripts/lua/publish-scheduled-message.lua +3 -9
- package/dist/esm/src/common/redis-client/scripts/lua/requeue-message.lua +6 -7
- package/dist/esm/src/common/redis-client/scripts/lua/schedule-message.lua +5 -8
- package/dist/esm/src/common/redis-keys/redis-keys.d.ts +5 -1
- package/dist/esm/src/common/redis-keys/redis-keys.js +20 -28
- package/dist/esm/src/common/types/event.d.ts +3 -3
- package/dist/esm/src/config/messages/store.js +1 -2
- package/dist/esm/src/config/namespace.js +1 -1
- package/dist/esm/src/lib/consumer/consumer/consumer.d.ts +1 -4
- package/dist/esm/src/lib/consumer/consumer/consumer.js +1 -50
- package/dist/esm/src/lib/consumer/consumer-heartbeat/consumer-heartbeat.d.ts +3 -7
- package/dist/esm/src/lib/consumer/consumer-heartbeat/consumer-heartbeat.js +15 -59
- package/dist/esm/src/lib/consumer/message-handler/consume-message/consume-message.d.ts +2 -2
- package/dist/esm/src/lib/consumer/message-handler/consume-message/consume-message.js +13 -13
- package/dist/esm/src/lib/consumer/message-handler/dequeue-message/dequeue-message.d.ts +0 -1
- package/dist/esm/src/lib/consumer/message-handler/dequeue-message/dequeue-message.js +16 -22
- package/dist/esm/src/lib/consumer/message-handler/message-handler/message-handler.d.ts +4 -1
- package/dist/esm/src/lib/consumer/message-handler/message-handler/message-handler.js +42 -4
- package/dist/esm/src/lib/consumer/message-handler/processing-queue/processing-queue.d.ts +10 -0
- package/dist/esm/src/lib/consumer/message-handler/processing-queue/processing-queue.js +147 -0
- package/dist/esm/src/lib/consumer/message-handler/processing-queue/types/index.d.ts +2 -0
- package/dist/esm/src/lib/consumer/message-handler/processing-queue/types/index.js +2 -0
- package/dist/esm/src/lib/consumer/message-handler/processing-queue/types/processing-queue.d.ts +26 -0
- package/dist/esm/src/lib/consumer/message-handler/processing-queue/types/processing-queue.js +22 -0
- package/dist/esm/src/lib/consumer/types/index.d.ts +1 -1
- package/dist/esm/src/lib/consumer/types/index.js +1 -1
- package/dist/esm/src/lib/consumer/types/message-handler.d.ts +5 -2
- package/dist/esm/src/lib/consumer/workers/delay-unacknowledged.worker.d.ts +2 -2
- package/dist/esm/src/lib/consumer/workers/delay-unacknowledged.worker.js +5 -6
- package/dist/esm/src/lib/consumer/workers/publish-scheduled.worker.d.ts +2 -2
- package/dist/esm/src/lib/consumer/workers/publish-scheduled.worker.js +5 -6
- package/dist/esm/src/lib/consumer/workers/requeue-unacknowledged.worker.d.ts +2 -4
- package/dist/esm/src/lib/consumer/workers/requeue-unacknowledged.worker.js +6 -11
- package/dist/esm/src/lib/consumer/workers/watch-consumers.worker.d.ts +2 -2
- package/dist/esm/src/lib/consumer/workers/watch-consumers.worker.js +16 -17
- package/dist/esm/src/lib/consumer/workers/worker.d.ts +4 -3
- package/dist/esm/src/lib/consumer/workers/worker.js +3 -1
- package/dist/esm/src/lib/consumer-groups/_/_delete-consumer-group.js +1 -3
- package/dist/esm/src/lib/consumer-groups/_/_save-consumer-group.js +1 -2
- package/dist/esm/src/lib/event-bus/event-bus-redis-instance.js +1 -1
- package/dist/esm/src/lib/exchange/exchange-direct/_/_get-exchange-direct-transferable.d.ts +1 -1
- package/dist/esm/src/lib/exchange/exchange-direct/_/_validate-exchange-direct-params.d.ts +1 -1
- package/dist/esm/src/lib/exchange/exchange-direct/_/_validate-exchange-direct-params.js +1 -1
- package/dist/esm/src/lib/exchange/exchange-fan-out/_/_get-exchange-fanout-transferable.d.ts +1 -1
- package/dist/esm/src/lib/exchange/exchange-topic/_/_get-exchange-topic-transferable.d.ts +1 -1
- package/dist/esm/src/lib/exchange/exchange-topic/_/_get-topic-exchange-params.d.ts +1 -1
- package/dist/esm/src/lib/exchange/exchange-topic/_/_get-topic-exchange-params.js +1 -1
- package/dist/esm/src/lib/exchange/exchange-topic/_/_validate-exchange-topic-params.d.ts +1 -1
- package/dist/esm/src/lib/exchange/exchange-topic/_/_validate-exchange-topic-params.js +1 -1
- package/dist/esm/src/lib/message/_/_delete-message.js +2 -4
- package/dist/esm/src/lib/message/_/_requeue-message.js +2 -2
- package/dist/esm/src/lib/message/producible-message.js +1 -1
- package/dist/esm/src/lib/producer/_/_schedule-message.js +3 -7
- package/dist/esm/src/lib/producer/producer.js +2 -1
- package/dist/esm/src/lib/queue/_/_delete-queue.js +14 -23
- package/dist/esm/src/lib/queue/_/_parse-queue-extended-params.d.ts +1 -1
- package/dist/esm/src/lib/queue/_/_parse-queue-extended-params.js +1 -1
- package/dist/esm/src/lib/queue/_/_parse-queue-params-and-validate.js +1 -1
- package/dist/esm/src/lib/queue/_/_parse-queue-params.d.ts +1 -1
- package/dist/esm/src/lib/queue/_/_parse-queue-params.js +2 -2
- package/dist/esm/src/lib/queue-messages/_/_validate-queue-extended-params.js +1 -2
- package/dist/esm/src/lib/queue-messages/queue-messages-paginator/queue-messages-paginator-abstract.js +1 -1
- package/dist/esm/src/lib/queue-messages/queue-messages.js +1 -1
- package/dist/esm/src/lib/queue-messages/queue-pending-messages/queue-pending-messages.js +1 -1
- package/dist/esm/src/lib/queue-rate-limit/queue-rate-limit.js +1 -1
- package/package.json +19 -19
- package/dist/cjs/src/lib/consumer/consumer-heartbeat/_/_cleanup-offline-consumer.d.ts +0 -3
- package/dist/cjs/src/lib/consumer/consumer-heartbeat/_/_cleanup-offline-consumer.js +0 -21
- package/dist/cjs/src/lib/consumer/message-handler/processing-queue.d.ts +0 -12
- package/dist/cjs/src/lib/consumer/message-handler/processing-queue.js +0 -130
- package/dist/cjs/src/lib/consumer/message-handler/retry-message.d.ts +0 -15
- package/dist/cjs/src/lib/consumer/message-handler/retry-message.js +0 -42
- package/dist/cjs/src/lib/consumer/types/consume-message.d.ts +0 -14
- package/dist/cjs/src/lib/consumer/types/consume-message.js +0 -19
- package/dist/esm/src/lib/consumer/consumer-heartbeat/_/_cleanup-offline-consumer.d.ts +0 -3
- package/dist/esm/src/lib/consumer/consumer-heartbeat/_/_cleanup-offline-consumer.js +0 -17
- package/dist/esm/src/lib/consumer/message-handler/processing-queue.d.ts +0 -12
- package/dist/esm/src/lib/consumer/message-handler/processing-queue.js +0 -127
- package/dist/esm/src/lib/consumer/message-handler/retry-message.d.ts +0 -15
- package/dist/esm/src/lib/consumer/message-handler/retry-message.js +0 -38
- package/dist/esm/src/lib/consumer/types/consume-message.d.ts +0 -14
- package/dist/esm/src/lib/consumer/types/consume-message.js +0 -16
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,23 @@
|
|
|
1
|
+
# Changelog
|
|
1
2
|
|
|
3
|
+
## [8.0.0-rc.27](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.26...v8.0.0-rc.27) (2025-01-09)
|
|
4
|
+
|
|
5
|
+
### Continuous Integration
|
|
6
|
+
|
|
7
|
+
* fix broken CHANGELOG.md for v8.0.0-rc.26 ([a20b40e](https://github.com/weyoss/redis-smq/commit/a20b40ec343ab07a1a0ef80f4bf7625ed27ba9ec))
|
|
8
|
+
|
|
9
|
+
## [8.0.0-rc.26](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.25...v8.0.0-rc.26) (2025-01-09)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Documentation
|
|
13
|
+
* update API reference ([b7d0f6f](https://github.com/weyoss/redis-smq/commit/b7d0f6f4e078557021854d33fd301980dab7782b))
|
|
14
|
+
|
|
15
|
+
### Codebase Refactoring
|
|
16
|
+
* use queue-scoped workers instead of global ones ([ada94e0](https://github.com/weyoss/redis-smq/commit/ada94e09d17f58488b1596c70b4f657110cc8b79))
|
|
17
|
+
|
|
18
|
+
### Continuous Integration
|
|
19
|
+
* add support for node.js v22 ([a15d62e](https://github.com/weyoss/redis-smq/commit/a15d62e49b609fb63b90082af53a0a23613677e8))
|
|
20
|
+
* upgrade eslint and other deprecated dependencies ([c948298](https://github.com/weyoss/redis-smq/commit/c94829850c5cf04ca3240163669c242ba50ba9e2))
|
|
2
21
|
|
|
3
22
|
## [8.0.0-rc.25](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.24...v8.0.0-rc.25) (2024-07-07)
|
|
4
23
|
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
local keyScheduledMessages = KEYS[1]
|
|
2
|
-
local keyDelayedMessages = KEYS[2]
|
|
3
|
-
local keyRequeueMessages = KEYS[3]
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
1
|
local EQueuePropertyQueueType = ARGV[1]
|
|
8
2
|
local EQueuePropertyMessagesCount = ARGV[2]
|
|
9
3
|
local EQueuePropertyQueueTypePriorityQueue = ARGV[3]
|
|
@@ -20,12 +14,14 @@ local EMessagePropertyStatusUnackRequeuing = ARGV[13]
|
|
|
20
14
|
|
|
21
15
|
---
|
|
22
16
|
|
|
17
|
+
local keyQueueScheduled = ''
|
|
18
|
+
local keyQueueDelayed = ''
|
|
19
|
+
local keyQueueRequeued = ''
|
|
23
20
|
local keyMessage = ''
|
|
24
21
|
local keyQueueProperties = ''
|
|
25
22
|
local keyQueuePending = ''
|
|
26
23
|
local keyQueueDL = ''
|
|
27
24
|
local keyQueueAcknowledged = ''
|
|
28
|
-
local keyQueueScheduled = ''
|
|
29
25
|
local keyQueuePriorityPending = ''
|
|
30
26
|
|
|
31
27
|
---
|
|
@@ -34,7 +30,7 @@ local messageId = ''
|
|
|
34
30
|
|
|
35
31
|
---
|
|
36
32
|
|
|
37
|
-
local keyIndexOffset =
|
|
33
|
+
local keyIndexOffset = 0
|
|
38
34
|
local argvIndexOffset = 13
|
|
39
35
|
|
|
40
36
|
---
|
|
@@ -57,12 +53,11 @@ local function deleteMessage()
|
|
|
57
53
|
elseif messageStatus == EMessagePropertyStatusDeadLettered then
|
|
58
54
|
deleted = redis.call("LREM", keyQueueDL, 1, messageId)
|
|
59
55
|
elseif messageStatus == EMessagePropertyStatusScheduled then
|
|
60
|
-
deleted = redis.call("ZREM",
|
|
61
|
-
redis.call("ZREM", keyQueueScheduled, messageId)
|
|
56
|
+
deleted = redis.call("ZREM", keyQueueScheduled, messageId)
|
|
62
57
|
elseif messageStatus == EMessagePropertyStatusUnackDelaying then
|
|
63
|
-
deleted = redis.call("LREM",
|
|
58
|
+
deleted = redis.call("LREM", keyQueueDelayed, 1, messageId)
|
|
64
59
|
elseif messageStatus == EMessagePropertyStatusUnackRequeuing then
|
|
65
|
-
deleted = redis.call("LREM",
|
|
60
|
+
deleted = redis.call("LREM", keyQueueRequeued, 1, messageId)
|
|
66
61
|
elseif messageStatus == EMessagePropertyStatusPending then
|
|
67
62
|
local queueType = redis.call("HGET", keyQueueProperties, EQueuePropertyQueueType)
|
|
68
63
|
if queueType ~= false then
|
|
@@ -87,14 +82,16 @@ if #ARGV > argvIndexOffset then
|
|
|
87
82
|
for index in pairs(ARGV) do
|
|
88
83
|
if (index > argvIndexOffset) then
|
|
89
84
|
messageId = ARGV[index]
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
85
|
+
keyQueueScheduled = KEYS[keyIndexOffset + 1]
|
|
86
|
+
keyQueueDelayed = KEYS[keyIndexOffset + 2]
|
|
87
|
+
keyQueueRequeued = KEYS[keyIndexOffset + 3]
|
|
88
|
+
keyMessage = KEYS[keyIndexOffset + 4]
|
|
89
|
+
keyQueueProperties = KEYS[keyIndexOffset + 5]
|
|
90
|
+
keyQueuePending = KEYS[keyIndexOffset + 6]
|
|
91
|
+
keyQueueDL = KEYS[keyIndexOffset + 7]
|
|
92
|
+
keyQueueAcknowledged = KEYS[keyIndexOffset + 8]
|
|
93
|
+
keyQueuePriorityPending = KEYS[keyIndexOffset + 9]
|
|
94
|
+
keyIndexOffset = keyIndexOffset + 9
|
|
98
95
|
deleteMessageStatus = deleteMessage()
|
|
99
96
|
if deleteMessageStatus ~= 'OK' then
|
|
100
97
|
break
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
local keyProcessingQueues = KEYS[1]
|
|
2
|
-
local keyDelayedMessages = KEYS[2]
|
|
3
|
-
local keyRequeueMessages = KEYS[3]
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
1
|
local ERetryActionDelay = ARGV[1]
|
|
8
2
|
local ERetryActionRequeue = ARGV[2]
|
|
9
3
|
local ERetryActionDeadLetter = ARGV[3]
|
|
@@ -16,12 +10,14 @@ local EMessageUnacknowledgedCauseOfflineHandler = ARGV[9]
|
|
|
16
10
|
|
|
17
11
|
---
|
|
18
12
|
|
|
19
|
-
local keyIndexOffset =
|
|
13
|
+
local keyIndexOffset = 0
|
|
20
14
|
local argvIndexOffset = 9
|
|
21
15
|
|
|
22
16
|
---
|
|
23
17
|
|
|
24
18
|
local keyQueueProcessing = ''
|
|
19
|
+
local keyQueueDelayed = ''
|
|
20
|
+
local keyQueueRequeued = ''
|
|
25
21
|
local keyQueueDL = ''
|
|
26
22
|
local keyQueueProcessingQueues = ''
|
|
27
23
|
local keyQueueConsumers = ''
|
|
@@ -47,15 +43,19 @@ local function removeQueueConsumer()
|
|
|
47
43
|
if queue ~= '' then
|
|
48
44
|
redis.call("HDEL", keyQueueConsumers, consumerId)
|
|
49
45
|
redis.call("SREM", keyConsumerQueues, queue)
|
|
46
|
+
local size = redis.call("SCARD", keyConsumerQueues)
|
|
47
|
+
if size == 0 then
|
|
48
|
+
redis.call("DEL", keyConsumerQueues)
|
|
49
|
+
end
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
local function retryMessage()
|
|
54
54
|
if messageId ~= '' then
|
|
55
55
|
if retryAction == ERetryActionRequeue then
|
|
56
|
-
redis.call("RPOPLPUSH", keyQueueProcessing,
|
|
56
|
+
redis.call("RPOPLPUSH", keyQueueProcessing, keyQueueRequeued)
|
|
57
57
|
elseif retryAction == ERetryActionDelay then
|
|
58
|
-
redis.call("RPOPLPUSH", keyQueueProcessing,
|
|
58
|
+
redis.call("RPOPLPUSH", keyQueueProcessing, keyQueueDelayed)
|
|
59
59
|
else
|
|
60
60
|
if storeMessages == '1' then
|
|
61
61
|
redis.call("LREM", keyQueueProcessing, 1, messageId)
|
|
@@ -76,7 +76,6 @@ end
|
|
|
76
76
|
|
|
77
77
|
local function deleteProcessingQueue()
|
|
78
78
|
if keyQueueProcessing ~= '' then
|
|
79
|
-
redis.call("SREM", keyProcessingQueues, keyQueueProcessing)
|
|
80
79
|
redis.call("HDEL", keyQueueProcessingQueues, keyQueueProcessing)
|
|
81
80
|
redis.call("DEL", keyQueueProcessing)
|
|
82
81
|
end
|
|
@@ -91,13 +90,15 @@ if #ARGV > argvIndexOffset then
|
|
|
91
90
|
if relativeIndex == 3 then
|
|
92
91
|
queue = ARGV[index]
|
|
93
92
|
keyQueueProcessing = KEYS[keyIndexOffset + 1]
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
93
|
+
keyQueueDelayed = KEYS[keyIndexOffset + 2];
|
|
94
|
+
keyQueueRequeued = KEYS[keyIndexOffset + 3];
|
|
95
|
+
keyQueueDL = KEYS[keyIndexOffset + 4]
|
|
96
|
+
keyQueueProcessingQueues = KEYS[keyIndexOffset + 5]
|
|
97
|
+
keyQueueConsumers = KEYS[keyIndexOffset + 6]
|
|
98
|
+
keyConsumerQueues = KEYS[keyIndexOffset + 7]
|
|
99
|
+
keyQueueProperties = KEYS[keyIndexOffset + 8]
|
|
100
|
+
keyMessage = KEYS[keyIndexOffset + 9]
|
|
101
|
+
keyIndexOffset = keyIndexOffset + 9
|
|
101
102
|
elseif relativeIndex == 4 then
|
|
102
103
|
consumerId = ARGV[index]
|
|
103
104
|
elseif relativeIndex == 5 then
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
local keyQueues = KEYS[1]
|
|
2
2
|
local keyQueueConsumers = KEYS[2]
|
|
3
3
|
local keyConsumerQueues = KEYS[3]
|
|
4
|
-
local
|
|
5
|
-
local keyQueueProcessingQueues = KEYS[5]
|
|
4
|
+
local keyQueueProcessingQueues = KEYS[4]
|
|
6
5
|
|
|
7
6
|
---
|
|
8
7
|
|
|
@@ -15,7 +14,6 @@ if redis.call("SISMEMBER", keyQueues, queue) == 1 then
|
|
|
15
14
|
redis.call("SADD", keyConsumerQueues, queue)
|
|
16
15
|
redis.call("HSET", keyQueueConsumers, consumerId, consumerInfo)
|
|
17
16
|
redis.call("HSET", keyQueueProcessingQueues, consumerProcessingQueue, consumerId)
|
|
18
|
-
redis.call("SADD", keyProcessingQueues, consumerProcessingQueue)
|
|
19
17
|
return 1
|
|
20
18
|
end
|
|
21
19
|
return 0
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
local keyScheduledMessages = KEYS[1]
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
1
|
local EMessagePropertyStatus = ARGV[1]
|
|
6
2
|
local EMessagePropertyStatusPending = ARGV[2]
|
|
7
3
|
local EMessagePropertyState = ARGV[3]
|
|
@@ -32,7 +28,7 @@ local scheduledMessageState = ''
|
|
|
32
28
|
|
|
33
29
|
---
|
|
34
30
|
|
|
35
|
-
local keyIndexOffset =
|
|
31
|
+
local keyIndexOffset = 0
|
|
36
32
|
local argvIndexOffset = 9
|
|
37
33
|
|
|
38
34
|
---
|
|
@@ -66,7 +62,6 @@ local function deletedScheduledMessage(updateMessageCount)
|
|
|
66
62
|
end
|
|
67
63
|
|
|
68
64
|
local function removeFromScheduled()
|
|
69
|
-
redis.call("ZREM", keyScheduledMessages, scheduledMessageId)
|
|
70
65
|
redis.call("ZREM", keyQueueScheduled, scheduledMessageId)
|
|
71
66
|
end
|
|
72
67
|
|
|
@@ -83,7 +78,6 @@ local function updateScheduledMessageProperties(status)
|
|
|
83
78
|
end
|
|
84
79
|
|
|
85
80
|
local function scheduleMessage()
|
|
86
|
-
redis.call("ZADD", keyScheduledMessages, scheduledMessageNextScheduleTimestamp, scheduledMessageId)
|
|
87
81
|
redis.call("ZADD", keyQueueScheduled, scheduledMessageNextScheduleTimestamp, scheduledMessageId)
|
|
88
82
|
end
|
|
89
83
|
|
|
@@ -121,8 +115,8 @@ if #ARGV > argvIndexOffset then
|
|
|
121
115
|
messageId = ARGV[index]
|
|
122
116
|
keyMessage = KEYS[keyIndexOffset + 1]
|
|
123
117
|
keyQueuePending = KEYS[keyIndexOffset + 2]
|
|
124
|
-
|
|
125
|
-
|
|
118
|
+
keyQueueMessages = KEYS[keyIndexOffset + 3]
|
|
119
|
+
keyQueueProperties = KEYS[keyIndexOffset + 4]
|
|
126
120
|
keyQueuePriorityPending = KEYS[keyIndexOffset + 5]
|
|
127
121
|
keyQueueScheduled = KEYS[keyIndexOffset + 6]
|
|
128
122
|
keyScheduledMessage = KEYS[keyIndexOffset + 7]
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
local keyFromQueue = KEYS[1]
|
|
2
|
+
local keyQueueProperties = KEYS[2]
|
|
2
3
|
|
|
3
4
|
---
|
|
4
5
|
|
|
@@ -12,7 +13,6 @@ local EMessagePropertyState = ARGV[7]
|
|
|
12
13
|
|
|
13
14
|
---
|
|
14
15
|
|
|
15
|
-
local keyQueueProperties = ''
|
|
16
16
|
local keyQueuePriority = ''
|
|
17
17
|
local keyQueuePending = ''
|
|
18
18
|
local keyMessage = ''
|
|
@@ -23,7 +23,7 @@ local messageState = ''
|
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
26
|
-
local keyIndexOffset =
|
|
26
|
+
local keyIndexOffset = 2
|
|
27
27
|
local argvIndexOffset = 7
|
|
28
28
|
|
|
29
29
|
---
|
|
@@ -62,11 +62,10 @@ if #ARGV > argvIndexOffset then
|
|
|
62
62
|
local idx = index % 3
|
|
63
63
|
if idx == 2 then
|
|
64
64
|
messageId = ARGV[index]
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
keyIndexOffset = keyIndexOffset + 4
|
|
65
|
+
keyQueuePriority = KEYS[keyIndexOffset + 1]
|
|
66
|
+
keyQueuePending = KEYS[keyIndexOffset + 2]
|
|
67
|
+
keyMessage = KEYS[keyIndexOffset + 3]
|
|
68
|
+
keyIndexOffset = keyIndexOffset + 3;
|
|
70
69
|
elseif idx == 0 then
|
|
71
70
|
messagePriority = ARGV[index]
|
|
72
71
|
elseif idx == 1 then
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
local keyScheduledMessages = KEYS[1]
|
|
2
|
-
local keyDelayedMessages = KEYS[2]
|
|
3
|
-
---
|
|
4
|
-
|
|
5
1
|
local EQueuePropertyQueueType = ARGV[1]
|
|
6
2
|
local EQueuePropertyMessagesCount = ARGV[2]
|
|
7
3
|
local EMessagePropertyMessage = ARGV[3]
|
|
@@ -16,6 +12,7 @@ local keyQueueMessages = ''
|
|
|
16
12
|
local keyQueueProperties = ''
|
|
17
13
|
local keyMessage = ''
|
|
18
14
|
local keyQueueScheduled = ''
|
|
15
|
+
local keyQueueDelayed = ''
|
|
19
16
|
|
|
20
17
|
---
|
|
21
18
|
|
|
@@ -26,7 +23,7 @@ local messageState = ''
|
|
|
26
23
|
|
|
27
24
|
---
|
|
28
25
|
|
|
29
|
-
local keyIndexOffset =
|
|
26
|
+
local keyIndexOffset = 0
|
|
30
27
|
local argvIndexOffset = 7
|
|
31
28
|
|
|
32
29
|
---
|
|
@@ -71,7 +68,8 @@ if #ARGV > argvIndexOffset then
|
|
|
71
68
|
keyQueueProperties = KEYS[keyIndexOffset + 2]
|
|
72
69
|
keyMessage = KEYS[keyIndexOffset + 3]
|
|
73
70
|
keyQueueScheduled = KEYS[keyIndexOffset + 4]
|
|
74
|
-
|
|
71
|
+
keyQueueDelayed = KEYS[keyIndexOffset + 5]
|
|
72
|
+
keyIndexOffset = keyIndexOffset + 5
|
|
75
73
|
elseif idx == 1 then
|
|
76
74
|
message = ARGV[index]
|
|
77
75
|
elseif idx == 2 then
|
|
@@ -81,12 +79,11 @@ if #ARGV > argvIndexOffset then
|
|
|
81
79
|
local found = checkQueue()
|
|
82
80
|
if found == 'OK' then
|
|
83
81
|
if scheduleFromDelayed == '1' then
|
|
84
|
-
redis.call("LREM",
|
|
82
|
+
redis.call("LREM", keyQueueDelayed, 1, messageId)
|
|
85
83
|
updateMessageState()
|
|
86
84
|
else
|
|
87
85
|
saveMessage()
|
|
88
86
|
end
|
|
89
|
-
redis.call("ZADD", keyScheduledMessages, scheduleTimestamp, messageId)
|
|
90
87
|
redis.call("ZADD", keyQueueScheduled, scheduleTimestamp, messageId)
|
|
91
88
|
else
|
|
92
89
|
return found
|
|
@@ -11,12 +11,15 @@ export declare const redisKeys: {
|
|
|
11
11
|
keyQueueProcessingQueues: string;
|
|
12
12
|
keyQueueAcknowledged: string;
|
|
13
13
|
keyQueueScheduled: string;
|
|
14
|
+
keyQueueRequeued: string;
|
|
15
|
+
keyQueueDelayed: string;
|
|
14
16
|
keyQueueConsumers: string;
|
|
15
17
|
keyQueueRateLimitCounter: string;
|
|
16
18
|
keyQueueProperties: string;
|
|
17
19
|
keyQueueMessages: string;
|
|
18
20
|
keyQueueMessageIds: string;
|
|
19
21
|
keyQueueConsumerGroups: string;
|
|
22
|
+
keyQueueWorkersLock: string;
|
|
20
23
|
};
|
|
21
24
|
getMessageKeys(messageId: string): {
|
|
22
25
|
keyMessage: string;
|
|
@@ -26,11 +29,12 @@ export declare const redisKeys: {
|
|
|
26
29
|
};
|
|
27
30
|
getConsumerKeys(instanceId: string): {
|
|
28
31
|
keyConsumerQueues: string;
|
|
32
|
+
keyConsumerHeartbeat: string;
|
|
29
33
|
};
|
|
30
34
|
getQueueConsumerKeys(queueParams: IQueueParams, instanceId: string): {
|
|
31
35
|
keyQueueProcessing: string;
|
|
32
36
|
};
|
|
33
|
-
getMainKeys(): Record<"keyQueues" | "
|
|
37
|
+
getMainKeys(): Record<"keyQueues" | "keyNamespaces" | "keyFanOutExchanges", string>;
|
|
34
38
|
validateNamespace(ns: string): string | RedisKeysInvalidKeyError;
|
|
35
39
|
validateRedisKey(key: string | null | undefined): string | RedisKeysInvalidKeyError;
|
|
36
40
|
getKeySegmentSeparator(): string;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.redisKeys = void 0;
|
|
4
4
|
const index_js_1 = require("./errors/index.js");
|
|
5
5
|
const keySegmentSeparator = ':';
|
|
6
|
-
const nsPrefix = 'redis-smq-
|
|
6
|
+
const nsPrefix = 'redis-smq-rc826';
|
|
7
7
|
const globalNamespace = 'global';
|
|
8
8
|
var ERedisKey;
|
|
9
9
|
(function (ERedisKey) {
|
|
@@ -13,28 +13,24 @@ var ERedisKey;
|
|
|
13
13
|
ERedisKey[ERedisKey["KEY_QUEUE_PROCESSING"] = 4] = "KEY_QUEUE_PROCESSING";
|
|
14
14
|
ERedisKey[ERedisKey["KEY_QUEUE_ACKNOWLEDGED"] = 5] = "KEY_QUEUE_ACKNOWLEDGED";
|
|
15
15
|
ERedisKey[ERedisKey["KEY_QUEUE_SCHEDULED"] = 6] = "KEY_QUEUE_SCHEDULED";
|
|
16
|
-
ERedisKey[ERedisKey["
|
|
17
|
-
ERedisKey[ERedisKey["
|
|
18
|
-
ERedisKey[ERedisKey["
|
|
19
|
-
ERedisKey[ERedisKey["
|
|
20
|
-
ERedisKey[ERedisKey["
|
|
21
|
-
ERedisKey[ERedisKey["
|
|
22
|
-
ERedisKey[ERedisKey["
|
|
23
|
-
ERedisKey[ERedisKey["
|
|
24
|
-
ERedisKey[ERedisKey["
|
|
25
|
-
ERedisKey[ERedisKey["
|
|
26
|
-
ERedisKey[ERedisKey["
|
|
27
|
-
ERedisKey[ERedisKey["
|
|
28
|
-
ERedisKey[ERedisKey["
|
|
29
|
-
ERedisKey[ERedisKey["
|
|
30
|
-
ERedisKey[ERedisKey["
|
|
16
|
+
ERedisKey[ERedisKey["KEY_QUEUE_DELAYED"] = 7] = "KEY_QUEUE_DELAYED";
|
|
17
|
+
ERedisKey[ERedisKey["KEY_QUEUE_REQUEUED"] = 8] = "KEY_QUEUE_REQUEUED";
|
|
18
|
+
ERedisKey[ERedisKey["KEY_QUEUE_CONSUMERS"] = 9] = "KEY_QUEUE_CONSUMERS";
|
|
19
|
+
ERedisKey[ERedisKey["KEY_QUEUE_PROCESSING_QUEUES"] = 10] = "KEY_QUEUE_PROCESSING_QUEUES";
|
|
20
|
+
ERedisKey[ERedisKey["KEY_QUEUE_WORKERS_LOCK"] = 11] = "KEY_QUEUE_WORKERS_LOCK";
|
|
21
|
+
ERedisKey[ERedisKey["KEY_QUEUE_RATE_LIMIT_COUNTER"] = 12] = "KEY_QUEUE_RATE_LIMIT_COUNTER";
|
|
22
|
+
ERedisKey[ERedisKey["KEY_QUEUE_PROPERTIES"] = 13] = "KEY_QUEUE_PROPERTIES";
|
|
23
|
+
ERedisKey[ERedisKey["KEY_QUEUE_MESSAGES"] = 14] = "KEY_QUEUE_MESSAGES";
|
|
24
|
+
ERedisKey[ERedisKey["KEY_QUEUE_MESSAGE_IDS"] = 15] = "KEY_QUEUE_MESSAGE_IDS";
|
|
25
|
+
ERedisKey[ERedisKey["KEY_QUEUE_CONSUMER_GROUPS"] = 16] = "KEY_QUEUE_CONSUMER_GROUPS";
|
|
26
|
+
ERedisKey[ERedisKey["KEY_QUEUES"] = 17] = "KEY_QUEUES";
|
|
27
|
+
ERedisKey[ERedisKey["KEY_CONSUMER_QUEUES"] = 18] = "KEY_CONSUMER_QUEUES";
|
|
28
|
+
ERedisKey[ERedisKey["KEY_CONSUMER_HEARTBEAT"] = 19] = "KEY_CONSUMER_HEARTBEAT";
|
|
29
|
+
ERedisKey[ERedisKey["KEY_NS_QUEUES"] = 20] = "KEY_NS_QUEUES";
|
|
30
|
+
ERedisKey[ERedisKey["KEY_NAMESPACES"] = 21] = "KEY_NAMESPACES";
|
|
31
31
|
ERedisKey[ERedisKey["KEY_EXCHANGE_BINDINGS"] = 22] = "KEY_EXCHANGE_BINDINGS";
|
|
32
32
|
ERedisKey[ERedisKey["KEY_FANOUT_EXCHANGES"] = 23] = "KEY_FANOUT_EXCHANGES";
|
|
33
33
|
ERedisKey[ERedisKey["KEY_MESSAGE"] = 24] = "KEY_MESSAGE";
|
|
34
|
-
ERedisKey[ERedisKey["KEY_QUEUE_MESSAGES"] = 25] = "KEY_QUEUE_MESSAGES";
|
|
35
|
-
ERedisKey[ERedisKey["KEY_QUEUE_MESSAGE_IDS"] = 26] = "KEY_QUEUE_MESSAGE_IDS";
|
|
36
|
-
ERedisKey[ERedisKey["KEY_DELETED_QUEUES"] = 27] = "KEY_DELETED_QUEUES";
|
|
37
|
-
ERedisKey[ERedisKey["KEY_QUEUE_CONSUMER_GROUPS"] = 28] = "KEY_QUEUE_CONSUMER_GROUPS";
|
|
38
34
|
})(ERedisKey || (ERedisKey = {}));
|
|
39
35
|
function makeNamespacedKeys(keys, namespace, ...rest) {
|
|
40
36
|
const result = {};
|
|
@@ -56,12 +52,15 @@ exports.redisKeys = {
|
|
|
56
52
|
keyQueueProcessingQueues: ERedisKey.KEY_QUEUE_PROCESSING_QUEUES,
|
|
57
53
|
keyQueueAcknowledged: ERedisKey.KEY_QUEUE_ACKNOWLEDGED,
|
|
58
54
|
keyQueueScheduled: ERedisKey.KEY_QUEUE_SCHEDULED,
|
|
55
|
+
keyQueueRequeued: ERedisKey.KEY_QUEUE_REQUEUED,
|
|
56
|
+
keyQueueDelayed: ERedisKey.KEY_QUEUE_DELAYED,
|
|
59
57
|
keyQueueConsumers: ERedisKey.KEY_QUEUE_CONSUMERS,
|
|
60
58
|
keyQueueRateLimitCounter: ERedisKey.KEY_QUEUE_RATE_LIMIT_COUNTER,
|
|
61
59
|
keyQueueProperties: ERedisKey.KEY_QUEUE_PROPERTIES,
|
|
62
60
|
keyQueueMessages: ERedisKey.KEY_QUEUE_MESSAGES,
|
|
63
61
|
keyQueueMessageIds: ERedisKey.KEY_QUEUE_MESSAGE_IDS,
|
|
64
62
|
keyQueueConsumerGroups: ERedisKey.KEY_QUEUE_CONSUMER_GROUPS,
|
|
63
|
+
keyQueueWorkersLock: ERedisKey.KEY_QUEUE_WORKERS_LOCK,
|
|
65
64
|
};
|
|
66
65
|
const pendingKeys = {
|
|
67
66
|
keyQueuePending: ERedisKey.KEY_QUEUE_PENDING,
|
|
@@ -85,6 +84,7 @@ exports.redisKeys = {
|
|
|
85
84
|
getConsumerKeys(instanceId) {
|
|
86
85
|
const consumerKeys = {
|
|
87
86
|
keyConsumerQueues: ERedisKey.KEY_CONSUMER_QUEUES,
|
|
87
|
+
keyConsumerHeartbeat: ERedisKey.KEY_CONSUMER_HEARTBEAT,
|
|
88
88
|
};
|
|
89
89
|
return Object.assign({}, makeNamespacedKeys(consumerKeys, globalNamespace, instanceId));
|
|
90
90
|
},
|
|
@@ -97,16 +97,8 @@ exports.redisKeys = {
|
|
|
97
97
|
getMainKeys() {
|
|
98
98
|
const mainKeys = {
|
|
99
99
|
keyQueues: ERedisKey.KEY_QUEUES,
|
|
100
|
-
keyProcessingQueues: ERedisKey.KEY_PROCESSING_QUEUES,
|
|
101
|
-
keyHeartbeats: ERedisKey.KEY_HEARTBEATS,
|
|
102
|
-
keyHeartbeatTimestamps: ERedisKey.KEY_HEARTBEAT_CONSUMER_WEIGHT,
|
|
103
|
-
keyScheduledMessages: ERedisKey.KEY_SCHEDULED_MESSAGES,
|
|
104
|
-
keyLockConsumerWorkersRunner: ERedisKey.KEY_LOCK_CONSUMER_WORKERS_RUNNER,
|
|
105
|
-
keyDelayedMessages: ERedisKey.KEY_DELAYED_MESSAGES,
|
|
106
|
-
keyRequeueMessages: ERedisKey.KEY_REQUEUE_MESSAGES,
|
|
107
100
|
keyNamespaces: ERedisKey.KEY_NAMESPACES,
|
|
108
101
|
keyFanOutExchanges: ERedisKey.KEY_FANOUT_EXCHANGES,
|
|
109
|
-
keyDeletedQueues: ERedisKey.KEY_DELETED_QUEUES,
|
|
110
102
|
};
|
|
111
103
|
return makeNamespacedKeys(mainKeys, globalNamespace);
|
|
112
104
|
},
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EMessageUnknowledgmentDeadLetterReason, EMessageUnknowledgmentReason, IConsumerHeartbeat, IQueueParams, IQueueParsedParams, IQueueProperties } from '../../lib/index.js';
|
|
2
2
|
export type TConsumerHeartbeatEvent = {
|
|
3
3
|
'consumerHeartbeat.heartbeat': (consumerId: string, timestamp: number, heartbeatPayload: IConsumerHeartbeat) => void;
|
|
4
4
|
'consumerHeartbeat.error': (err: Error) => void;
|
|
5
5
|
};
|
|
6
6
|
export type TConsumerConsumeMessageEvent = {
|
|
7
7
|
'consumer.consumeMessage.messageAcknowledged': (messageId: string, queue: IQueueParsedParams, messageHandlerId: string, consumerId: string) => void;
|
|
8
|
-
'consumer.consumeMessage.messageUnacknowledged': (messageId: string, queue: IQueueParsedParams, messageHandlerId: string, consumerId: string,
|
|
9
|
-
'consumer.consumeMessage.messageDeadLettered': (messageId: string, queue: IQueueParsedParams, messageHandlerId: string, consumerId: string,
|
|
8
|
+
'consumer.consumeMessage.messageUnacknowledged': (messageId: string, queue: IQueueParsedParams, messageHandlerId: string, consumerId: string, unknowledgmentReason: EMessageUnknowledgmentReason) => void;
|
|
9
|
+
'consumer.consumeMessage.messageDeadLettered': (messageId: string, queue: IQueueParsedParams, messageHandlerId: string, consumerId: string, deadLetterReason: EMessageUnknowledgmentDeadLetterReason) => void;
|
|
10
10
|
'consumer.consumeMessage.messageRequeued': (messageId: string, queue: IQueueParsedParams, messageHandlerId: string, consumerId: string) => void;
|
|
11
11
|
'consumer.consumeMessage.messageDelayed': (messageId: string, queue: IQueueParsedParams, messageHandlerId: string, consumerId: string) => void;
|
|
12
12
|
'consumer.consumeMessage.error': (err: Error, consumerId: string, queue: IQueueParsedParams) => void;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const configuration_message_store_expire_error_js_1 = require("../errors/configuration-message-store-expire.error.js");
|
|
3
|
+
const index_js_1 = require("../errors/index.js");
|
|
5
4
|
function getMessageStorageConfig(config, key) {
|
|
6
5
|
var _a;
|
|
7
6
|
const { store } = (_a = config.messages) !== null && _a !== void 0 ? _a : {};
|
|
@@ -25,11 +24,11 @@ function getMessageStorageParams(config, key) {
|
|
|
25
24
|
}
|
|
26
25
|
const queueSize = Number((_a = params.queueSize) !== null && _a !== void 0 ? _a : 0);
|
|
27
26
|
if (isNaN(queueSize) || queueSize < 0) {
|
|
28
|
-
throw new
|
|
27
|
+
throw new index_js_1.ConfigurationMessageQueueSizeError();
|
|
29
28
|
}
|
|
30
29
|
const expire = Number((_b = params.expire) !== null && _b !== void 0 ? _b : 0);
|
|
31
30
|
if (isNaN(expire) || expire < 0) {
|
|
32
|
-
throw new
|
|
31
|
+
throw new index_js_1.ConfigurationMessageStoreExpireError();
|
|
33
32
|
}
|
|
34
33
|
return {
|
|
35
34
|
store: true,
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const redis_keys_js_1 = require("../common/redis-keys/redis-keys.js");
|
|
4
|
-
const
|
|
4
|
+
const index_js_1 = require("./errors/index.js");
|
|
5
5
|
const defaultNamespace = 'default';
|
|
6
6
|
function Namespace(userConfig) {
|
|
7
7
|
if (!userConfig.namespace)
|
|
8
8
|
return defaultNamespace;
|
|
9
9
|
const ns = redis_keys_js_1.redisKeys.validateNamespace(userConfig.namespace);
|
|
10
10
|
if (ns instanceof Error)
|
|
11
|
-
throw new
|
|
11
|
+
throw new index_js_1.ConfigurationNamespaceError();
|
|
12
12
|
return ns;
|
|
13
13
|
}
|
|
14
14
|
exports.default = Namespace;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ICallback, ILogger, Runnable, TRedisClientEvent, TUnaryFunction
|
|
1
|
+
import { ICallback, ILogger, Runnable, TRedisClientEvent, TUnaryFunction } from 'redis-smq-common';
|
|
2
2
|
import { TConsumerEvent } from '../../../common/index.js';
|
|
3
3
|
import { IQueueParsedParams, TQueueExtendedParams } from '../../queue/index.js';
|
|
4
4
|
import { ConsumerHeartbeat } from '../consumer-heartbeat/consumer-heartbeat.js';
|
|
@@ -10,13 +10,10 @@ export declare class Consumer extends Runnable<TConsumerEvent> {
|
|
|
10
10
|
protected redisClient: import("../../../common/redis-client/redis-client-instance.js").RedisClientInstance;
|
|
11
11
|
protected eventBus: import("../../index.js").EventBusRedisInstance | undefined;
|
|
12
12
|
protected heartbeat: ConsumerHeartbeat | null;
|
|
13
|
-
protected workerResourceGroup: WorkerResourceGroup | null;
|
|
14
13
|
constructor(enableMultiplexing?: boolean);
|
|
15
14
|
protected onRedisError: TRedisClientEvent['error'];
|
|
16
15
|
protected setUpHeartbeat: (cb: ICallback<void>) => void;
|
|
17
16
|
protected shutDownHeartbeat: (cb: ICallback<void>) => void;
|
|
18
|
-
protected setUpConsumerWorkers: (cb: ICallback<void>) => void;
|
|
19
|
-
protected shutDownConsumerWorkers: (cb: ICallback<void>) => void;
|
|
20
17
|
protected runMessageHandlers: (cb: ICallback<void>) => void;
|
|
21
18
|
protected shutdownMessageHandlers: (cb: ICallback<void>) => void;
|
|
22
19
|
protected initRedisClient: (cb: ICallback<void>) => void;
|
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.Consumer = void 0;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
4
|
const redis_smq_common_1 = require("redis-smq-common");
|
|
9
5
|
const redis_client_factory_js_1 = require("../../../common/redis-client/redis-client-factory.js");
|
|
10
|
-
const redis_keys_js_1 = require("../../../common/redis-keys/redis-keys.js");
|
|
11
6
|
const index_js_1 = require("../../../config/index.js");
|
|
12
7
|
const event_bus_redis_factory_js_1 = require("../../event-bus/event-bus-redis-factory.js");
|
|
13
8
|
const _parse_queue_extended_params_js_1 = require("../../queue/_/_parse-queue-extended-params.js");
|
|
14
|
-
const _cleanup_offline_consumer_js_1 = require("../consumer-heartbeat/_/_cleanup-offline-consumer.js");
|
|
15
9
|
const consumer_heartbeat_js_1 = require("../consumer-heartbeat/consumer-heartbeat.js");
|
|
16
10
|
const message_handler_runner_js_1 = require("../message-handler-runner/message-handler-runner.js");
|
|
17
11
|
const multiplexed_message_handler_runner_js_1 = require("../message-handler-runner/multiplexed-message-handler-runner.js");
|
|
@@ -20,7 +14,6 @@ class Consumer extends redis_smq_common_1.Runnable {
|
|
|
20
14
|
constructor(enableMultiplexing) {
|
|
21
15
|
super();
|
|
22
16
|
this.heartbeat = null;
|
|
23
|
-
this.workerResourceGroup = null;
|
|
24
17
|
this.onRedisError = (error) => {
|
|
25
18
|
this.handleError(error);
|
|
26
19
|
};
|
|
@@ -39,42 +32,6 @@ class Consumer extends redis_smq_common_1.Runnable {
|
|
|
39
32
|
else
|
|
40
33
|
cb();
|
|
41
34
|
};
|
|
42
|
-
this.setUpConsumerWorkers = (cb) => {
|
|
43
|
-
const config = index_js_1.Configuration.getSetConfig();
|
|
44
|
-
const { keyLockConsumerWorkersRunner } = redis_keys_js_1.redisKeys.getMainKeys();
|
|
45
|
-
const nsLogger = redis_smq_common_1.logger.getLogger(config.logger, `consumer:${this.id}:worker-runner`);
|
|
46
|
-
const redisClient = this.redisClient.getInstance();
|
|
47
|
-
if (redisClient instanceof Error) {
|
|
48
|
-
cb(redisClient);
|
|
49
|
-
return void 0;
|
|
50
|
-
}
|
|
51
|
-
this.workerResourceGroup = new redis_smq_common_1.WorkerResourceGroup(redisClient, nsLogger, keyLockConsumerWorkersRunner);
|
|
52
|
-
this.workerResourceGroup.on('workerResourceGroup.error', (err) => this.handleError(err));
|
|
53
|
-
const workersDir = path_1.default.resolve((0, redis_smq_common_1.getDirname)(), '../workers');
|
|
54
|
-
this.workerResourceGroup.loadFromDir(workersDir, config, (err) => {
|
|
55
|
-
var _a;
|
|
56
|
-
if (err)
|
|
57
|
-
cb(err);
|
|
58
|
-
else {
|
|
59
|
-
(_a = this.workerResourceGroup) === null || _a === void 0 ? void 0 : _a.run((err) => {
|
|
60
|
-
if (err)
|
|
61
|
-
this.handleError(err);
|
|
62
|
-
});
|
|
63
|
-
cb();
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
this.shutDownConsumerWorkers = (cb) => {
|
|
68
|
-
if (this.workerResourceGroup) {
|
|
69
|
-
this.workerResourceGroup.shutdown(() => {
|
|
70
|
-
this.workerResourceGroup = null;
|
|
71
|
-
cb();
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
cb();
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
35
|
this.runMessageHandlers = (cb) => {
|
|
79
36
|
this.messageHandlerRunner.run((err) => cb(err));
|
|
80
37
|
};
|
|
@@ -123,23 +80,13 @@ class Consumer extends redis_smq_common_1.Runnable {
|
|
|
123
80
|
this.initRedisClient,
|
|
124
81
|
this.setUpHeartbeat,
|
|
125
82
|
this.runMessageHandlers,
|
|
126
|
-
this.setUpConsumerWorkers,
|
|
127
83
|
]);
|
|
128
84
|
}
|
|
129
85
|
goingDown() {
|
|
130
86
|
this.emit('consumer.goingDown', this.id);
|
|
131
87
|
return [
|
|
132
|
-
this.shutDownConsumerWorkers,
|
|
133
88
|
this.shutdownMessageHandlers,
|
|
134
89
|
this.shutDownHeartbeat,
|
|
135
|
-
(cb) => {
|
|
136
|
-
const redisClient = this.redisClient.getInstance();
|
|
137
|
-
if (redisClient instanceof Error) {
|
|
138
|
-
cb();
|
|
139
|
-
return void 0;
|
|
140
|
-
}
|
|
141
|
-
(0, _cleanup_offline_consumer_js_1._cleanupOfflineConsumer)(redisClient, [this.id], cb);
|
|
142
|
-
},
|
|
143
90
|
this.shutDownRedisClient,
|
|
144
91
|
].concat(super.goingDown());
|
|
145
92
|
}
|
|
@@ -1,25 +1,21 @@
|
|
|
1
|
-
import { ICallback, ILogger, IRedisClient,
|
|
1
|
+
import { ICallback, ILogger, IRedisClient, Runnable, Timer } from 'redis-smq-common';
|
|
2
2
|
import { TConsumerHeartbeatEvent } from '../../../common/index.js';
|
|
3
3
|
import { Consumer } from '../consumer/consumer.js';
|
|
4
4
|
import { IConsumerHeartbeat } from '../types/index.js';
|
|
5
5
|
export declare class ConsumerHeartbeat extends Runnable<TConsumerHeartbeatEvent> {
|
|
6
6
|
protected static readonly heartbeatTTL: number;
|
|
7
7
|
protected timer: Timer;
|
|
8
|
-
protected
|
|
9
|
-
protected keyHeartbeatTimestamps: string;
|
|
8
|
+
protected keyConsumerHeartbeat: string;
|
|
10
9
|
protected consumer: Consumer;
|
|
11
10
|
protected logger: ILogger;
|
|
12
11
|
protected redisClient: import("../../../common/redis-client/redis-client-instance.js").RedisClientInstance;
|
|
13
12
|
protected eventBus: import("../../index.js").EventBusRedisInstance | undefined;
|
|
14
13
|
constructor(consumer: Consumer, logger: ILogger);
|
|
15
|
-
protected static isExpiredHeartbeat(heartbeat: IConsumerHeartbeat): boolean;
|
|
16
14
|
protected getLogger(): ILogger;
|
|
17
15
|
protected getPayload(): IConsumerHeartbeat;
|
|
18
16
|
protected beat(): void;
|
|
19
17
|
protected goingUp(): ((cb: ICallback<void>) => void)[];
|
|
20
18
|
protected goingDown(): ((cb: ICallback<void>) => void)[];
|
|
21
|
-
static
|
|
22
|
-
static getExpiredHeartbeatIds(redisClient: IRedisClient, offset: number, count: number, cb: ICallback<string[]>): void;
|
|
23
|
-
static handleExpiredHeartbeatId(consumerId: string | string[], multi: IRedisTransaction): void;
|
|
19
|
+
static isConsumerAlive(redisClient: IRedisClient, consumerId: string, cb: ICallback<boolean>): void;
|
|
24
20
|
}
|
|
25
21
|
//# sourceMappingURL=consumer-heartbeat.d.ts.map
|