redis-smq 8.0.0-rc.24 → 8.0.0-rc.26
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 +12 -0
- package/README.md +2 -2
- 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 +22 -20
- 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,5 +1,17 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
+
## [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
|
+
|
|
5
|
+
|
|
6
|
+
### Documentation
|
|
7
|
+
|
|
8
|
+
* add a link to redis-smq-rest-api ([a1ab6fc](https://github.com/weyoss/redis-smq/commit/a1ab6fc594b4d32de5f4e4257fbf46c2447f0018))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Misc
|
|
12
|
+
|
|
13
|
+
* make redis-smq-common a peer dependency ([3b7dbab](https://github.com/weyoss/redis-smq/commit/3b7dbab7a14fc3b11aa75badc36a396727fb4f3b))
|
|
14
|
+
|
|
3
15
|
## [8.0.0-rc.24](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.23...v8.0.0-rc.24) (2024-05-15)
|
|
4
16
|
|
|
5
17
|
|
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ RedisSMQ is a Node.js library for queuing messages (aka jobs) and processing the
|
|
|
30
30
|
* Messages can be [set to expire](docs/api/classes/ProducibleMessage.md#setttl) when not delivered within a given amount of time or to have a [consumption timeout](docs/api/classes/ProducibleMessage.md#setconsumetimeout) while being in process.
|
|
31
31
|
* Queues may be [rate Limited](docs/queue-rate-limiting.md) to control the rate at which the messages are consumed.
|
|
32
32
|
* Has a builtin [scheduler](docs/scheduling-messages.md) allowing messages [to be delayed](docs/api/classes/ProducibleMessage.md#setscheduleddelay), [to be delivered for N times](docs/api/classes/ProducibleMessage.md#setscheduledrepeat) with an optional [period between deliveries](docs/api/classes/ProducibleMessage.md#setscheduledrepeatperiod), or simply [to be scheduled using CRON expressions](docs/api/classes/ProducibleMessage.md#setscheduledcron).
|
|
33
|
-
* Provides [an HTTP
|
|
33
|
+
* Provides [an HTTP interface](https://github.com/weyoss/redis-smq-rest-api) to interact with the message queue using a RESTful API.
|
|
34
34
|
* RedisSMQ can be managed also from your [web browser](https://github.com/weyoss/redis-smq-monitor-client).
|
|
35
35
|
* Either [node-redis](https://github.com/redis/node-redis) or [ioredis](https://github.com/luin/ioredis) can be used as a Redis client.
|
|
36
36
|
* [Highly optimized](https://lgtm.com/projects/g/weyoss/redis-smq/context:javascript), implemented using pure callbacks, with small memory footprint and no memory leaks. See [Callback vs Promise vs Async/Await benchmarks](https://gist.github.com/weyoss/24f9ecbda175d943a48cb7ec38bde821).
|
|
@@ -57,7 +57,7 @@ Current RedisSMQ v8 RC status:
|
|
|
57
57
|
|
|
58
58
|
- [x] RedisSMQ Common Library
|
|
59
59
|
- [x] RedisSMQ
|
|
60
|
-
- [
|
|
60
|
+
- [x] [RESTful API](https://github.com/weyoss/redis-smq-rest-api)
|
|
61
61
|
- [ ] Web UI (WIP)
|
|
62
62
|
|
|
63
63
|
If you wish to get the latest updates early feel free to try RedisSMQ v8 RC. Do not hesitate to report any bug or issue if encountered.
|
|
@@ -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
|
}
|