redis-smq 7.2.3 → 8.0.0-rc.1

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 (183) hide show
  1. package/CHANGELOG.md +80 -1
  2. package/README.md +42 -188
  3. package/dist/index.cjs +4965 -0
  4. package/dist/index.d.cts +857 -0
  5. package/dist/index.d.ts +857 -10
  6. package/dist/index.js +4951 -23
  7. package/dist/lua/acknowledge-message.lua +28 -0
  8. package/dist/lua/create-queue.lua +20 -0
  9. package/dist/lua/delete-message.lua +103 -0
  10. package/dist/lua/delete-queue-messages.lua +21 -0
  11. package/dist/lua/fetch-message-for-processing.lua +12 -0
  12. package/dist/lua/handle-processing-queue.lua +136 -0
  13. package/dist/lua/has-queue-rate-exceeded.lua +19 -0
  14. package/dist/lua/init-consumer-queue.lua +21 -0
  15. package/dist/lua/publish-message.lua +61 -0
  16. package/dist/lua/publish-scheduled-message.lua +122 -0
  17. package/dist/lua/requeue-message.lua +83 -0
  18. package/dist/lua/schedule-message.lua +100 -0
  19. package/package.json +20 -29
  20. package/.codecov.yml +0 -5
  21. package/dist/misc/health-check/combined-run.d.ts +0 -1
  22. package/dist/misc/health-check/combined-run.js +0 -62
  23. package/dist/src/common/events/events.d.ts +0 -14
  24. package/dist/src/common/events/events.js +0 -6
  25. package/dist/src/common/redis-client/lua/create-queue.lua +0 -16
  26. package/dist/src/common/redis-client/lua/enqueue-scheduled-message.lua +0 -63
  27. package/dist/src/common/redis-client/lua/has-queue-rate-exceeded.lua +0 -15
  28. package/dist/src/common/redis-client/lua/init-consumer-queue.lua +0 -17
  29. package/dist/src/common/redis-client/lua/publish-message.lua +0 -32
  30. package/dist/src/common/redis-client/lua/requeue-message.lua +0 -27
  31. package/dist/src/common/redis-client/lua/schedule-message.lua +0 -22
  32. package/dist/src/common/redis-client/redis-client.d.ts +0 -9
  33. package/dist/src/common/redis-client/redis-client.js +0 -30
  34. package/dist/src/common/redis-keys/redis-keys.d.ts +0 -96
  35. package/dist/src/common/redis-keys/redis-keys.error.d.ts +0 -3
  36. package/dist/src/common/redis-keys/redis-keys.error.js +0 -8
  37. package/dist/src/common/redis-keys/redis-keys.js +0 -122
  38. package/dist/src/config/configuration.d.ts +0 -2
  39. package/dist/src/config/configuration.error.d.ts +0 -3
  40. package/dist/src/config/configuration.error.js +0 -8
  41. package/dist/src/config/configuration.js +0 -19
  42. package/dist/src/config/event-listeners/event-listeners.d.ts +0 -2
  43. package/dist/src/config/event-listeners/event-listeners.js +0 -14
  44. package/dist/src/config/logger.d.ts +0 -2
  45. package/dist/src/config/logger.js +0 -12
  46. package/dist/src/config/messages/messages.d.ts +0 -2
  47. package/dist/src/config/messages/messages.js +0 -24
  48. package/dist/src/config/messages/store.d.ts +0 -2
  49. package/dist/src/config/messages/store.js +0 -46
  50. package/dist/src/config/namespace.d.ts +0 -2
  51. package/dist/src/config/namespace.js +0 -11
  52. package/dist/src/config/redis.d.ts +0 -2
  53. package/dist/src/config/redis.js +0 -13
  54. package/dist/src/lib/base.d.ts +0 -34
  55. package/dist/src/lib/base.js +0 -157
  56. package/dist/src/lib/consumer/consumer-heartbeat.d.ts +0 -22
  57. package/dist/src/lib/consumer/consumer-heartbeat.js +0 -137
  58. package/dist/src/lib/consumer/consumer-message-handler/acknowledge-message.d.ts +0 -5
  59. package/dist/src/lib/consumer/consumer-message-handler/acknowledge-message.js +0 -32
  60. package/dist/src/lib/consumer/consumer-message-handler/consume-message.d.ts +0 -15
  61. package/dist/src/lib/consumer/consumer-message-handler/consume-message.js +0 -79
  62. package/dist/src/lib/consumer/consumer-message-handler/dead-letter-message.d.ts +0 -6
  63. package/dist/src/lib/consumer/consumer-message-handler/dead-letter-message.js +0 -58
  64. package/dist/src/lib/consumer/consumer-message-handler/delay-message.d.ts +0 -7
  65. package/dist/src/lib/consumer/consumer-message-handler/delay-message.js +0 -25
  66. package/dist/src/lib/consumer/consumer-message-handler/dequeue-message.d.ts +0 -23
  67. package/dist/src/lib/consumer/consumer-message-handler/dequeue-message.js +0 -141
  68. package/dist/src/lib/consumer/consumer-message-handler/message-handler-runner.d.ts +0 -26
  69. package/dist/src/lib/consumer/consumer-message-handler/message-handler-runner.js +0 -128
  70. package/dist/src/lib/consumer/consumer-message-handler/message-handler.d.ts +0 -36
  71. package/dist/src/lib/consumer/consumer-message-handler/message-handler.js +0 -166
  72. package/dist/src/lib/consumer/consumer-message-handler/multiplexed-message-handler/multiplexed-dequeue-message.d.ts +0 -4
  73. package/dist/src/lib/consumer/consumer-message-handler/multiplexed-message-handler/multiplexed-dequeue-message.js +0 -44
  74. package/dist/src/lib/consumer/consumer-message-handler/multiplexed-message-handler/multiplexed-message-handler-runner.d.ts +0 -24
  75. package/dist/src/lib/consumer/consumer-message-handler/multiplexed-message-handler/multiplexed-message-handler-runner.js +0 -125
  76. package/dist/src/lib/consumer/consumer-message-handler/multiplexed-message-handler/multiplexed-message-handler.d.ts +0 -10
  77. package/dist/src/lib/consumer/consumer-message-handler/multiplexed-message-handler/multiplexed-message-handler.js +0 -44
  78. package/dist/src/lib/consumer/consumer-message-handler/processing-queue.d.ts +0 -10
  79. package/dist/src/lib/consumer/consumer-message-handler/processing-queue.js +0 -65
  80. package/dist/src/lib/consumer/consumer-message-handler/requeue-message.d.ts +0 -6
  81. package/dist/src/lib/consumer/consumer-message-handler/requeue-message.js +0 -19
  82. package/dist/src/lib/consumer/consumer-message-handler/retry-message.d.ts +0 -15
  83. package/dist/src/lib/consumer/consumer-message-handler/retry-message.js +0 -97
  84. package/dist/src/lib/consumer/consumer-queues.d.ts +0 -10
  85. package/dist/src/lib/consumer/consumer-queues.js +0 -51
  86. package/dist/src/lib/consumer/consumer.d.ts +0 -31
  87. package/dist/src/lib/consumer/consumer.js +0 -141
  88. package/dist/src/lib/consumer/errors/consumer.error.d.ts +0 -3
  89. package/dist/src/lib/consumer/errors/consumer.error.js +0 -8
  90. package/dist/src/lib/consumer/errors/message-handler-already-exists.error.d.ts +0 -5
  91. package/dist/src/lib/consumer/errors/message-handler-already-exists.error.js +0 -11
  92. package/dist/src/lib/exchange/direct-exchange.d.ts +0 -10
  93. package/dist/src/lib/exchange/direct-exchange.js +0 -34
  94. package/dist/src/lib/exchange/errors/destination-queue-required.error.d.ts +0 -4
  95. package/dist/src/lib/exchange/errors/destination-queue-required.error.js +0 -11
  96. package/dist/src/lib/exchange/errors/exchange.error.d.ts +0 -3
  97. package/dist/src/lib/exchange/errors/exchange.error.js +0 -8
  98. package/dist/src/lib/exchange/errors/fan-out-exchange-queue.error.d.ts +0 -4
  99. package/dist/src/lib/exchange/errors/fan-out-exchange-queue.error.js +0 -11
  100. package/dist/src/lib/exchange/errors/invalid-exchange-data.error.d.ts +0 -4
  101. package/dist/src/lib/exchange/errors/invalid-exchange-data.error.js +0 -11
  102. package/dist/src/lib/exchange/exchange.d.ts +0 -19
  103. package/dist/src/lib/exchange/exchange.js +0 -51
  104. package/dist/src/lib/exchange/fan-out-exchange-manager.d.ts +0 -21
  105. package/dist/src/lib/exchange/fan-out-exchange-manager.js +0 -172
  106. package/dist/src/lib/exchange/fan-out-exchange.d.ts +0 -10
  107. package/dist/src/lib/exchange/fan-out-exchange.js +0 -28
  108. package/dist/src/lib/exchange/topic-exchange.d.ts +0 -12
  109. package/dist/src/lib/exchange/topic-exchange.js +0 -58
  110. package/dist/src/lib/message/errors/message-exchange-required.error.d.ts +0 -4
  111. package/dist/src/lib/message/errors/message-exchange-required.error.js +0 -11
  112. package/dist/src/lib/message/errors/message.error.d.ts +0 -3
  113. package/dist/src/lib/message/errors/message.error.js +0 -8
  114. package/dist/src/lib/message/message-state.d.ts +0 -37
  115. package/dist/src/lib/message/message-state.js +0 -141
  116. package/dist/src/lib/message/message.d.ts +0 -85
  117. package/dist/src/lib/message/message.js +0 -411
  118. package/dist/src/lib/message-manager/errors/message-not-found.error.d.ts +0 -4
  119. package/dist/src/lib/message-manager/errors/message-not-found.error.js +0 -11
  120. package/dist/src/lib/message-manager/errors/message-requeue.error.d.ts +0 -4
  121. package/dist/src/lib/message-manager/errors/message-requeue.error.js +0 -11
  122. package/dist/src/lib/message-manager/message-manager.d.ts +0 -16
  123. package/dist/src/lib/message-manager/message-manager.js +0 -41
  124. package/dist/src/lib/message-manager/message-storage/abstract-message-storage.d.ts +0 -20
  125. package/dist/src/lib/message-manager/message-storage/abstract-message-storage.js +0 -18
  126. package/dist/src/lib/message-manager/message-storage/list-message-storage.d.ts +0 -24
  127. package/dist/src/lib/message-manager/message-storage/list-message-storage.js +0 -122
  128. package/dist/src/lib/message-manager/message-storage/sorted-set-message-storage.d.ts +0 -19
  129. package/dist/src/lib/message-manager/message-storage/sorted-set-message-storage.js +0 -101
  130. package/dist/src/lib/message-manager/messages/acknowledged-messages.d.ts +0 -10
  131. package/dist/src/lib/message-manager/messages/acknowledged-messages.js +0 -56
  132. package/dist/src/lib/message-manager/messages/dead-lettered-messages.d.ts +0 -10
  133. package/dist/src/lib/message-manager/messages/dead-lettered-messages.js +0 -56
  134. package/dist/src/lib/message-manager/messages/pending-messages.d.ts +0 -16
  135. package/dist/src/lib/message-manager/messages/pending-messages.js +0 -64
  136. package/dist/src/lib/message-manager/messages/pending-non-priority-messages.d.ts +0 -9
  137. package/dist/src/lib/message-manager/messages/pending-non-priority-messages.js +0 -46
  138. package/dist/src/lib/message-manager/messages/pending-priority-messages.d.ts +0 -11
  139. package/dist/src/lib/message-manager/messages/pending-priority-messages.js +0 -65
  140. package/dist/src/lib/message-manager/messages/scheduled-messages.d.ts +0 -9
  141. package/dist/src/lib/message-manager/messages/scheduled-messages.js +0 -51
  142. package/dist/src/lib/producer/errors/message-already-published.error.d.ts +0 -4
  143. package/dist/src/lib/producer/errors/message-already-published.error.js +0 -11
  144. package/dist/src/lib/producer/errors/message-not-published.error.d.ts +0 -3
  145. package/dist/src/lib/producer/errors/message-not-published.error.js +0 -8
  146. package/dist/src/lib/producer/errors/message-not-scheduled.error.d.ts +0 -3
  147. package/dist/src/lib/producer/errors/message-not-scheduled.error.js +0 -8
  148. package/dist/src/lib/producer/errors/producer-not-running.error.d.ts +0 -4
  149. package/dist/src/lib/producer/errors/producer-not-running.error.js +0 -11
  150. package/dist/src/lib/producer/producer.d.ts +0 -12
  151. package/dist/src/lib/producer/producer.js +0 -121
  152. package/dist/src/lib/producer/schedule-message.d.ts +0 -5
  153. package/dist/src/lib/producer/schedule-message.js +0 -59
  154. package/dist/src/lib/queue-manager/delete-queue-transaction.d.ts +0 -4
  155. package/dist/src/lib/queue-manager/delete-queue-transaction.js +0 -102
  156. package/dist/src/lib/queue-manager/errors/namespace-not-found.error.d.ts +0 -4
  157. package/dist/src/lib/queue-manager/errors/namespace-not-found.error.js +0 -11
  158. package/dist/src/lib/queue-manager/errors/queue-exists.error.d.ts +0 -3
  159. package/dist/src/lib/queue-manager/errors/queue-exists.error.js +0 -8
  160. package/dist/src/lib/queue-manager/errors/queue-not-found.error.d.ts +0 -4
  161. package/dist/src/lib/queue-manager/errors/queue-not-found.error.js +0 -11
  162. package/dist/src/lib/queue-manager/errors/queue-rate-limit.error.d.ts +0 -3
  163. package/dist/src/lib/queue-manager/errors/queue-rate-limit.error.js +0 -8
  164. package/dist/src/lib/queue-manager/namespace.d.ts +0 -12
  165. package/dist/src/lib/queue-manager/namespace.js +0 -77
  166. package/dist/src/lib/queue-manager/queue-manager.d.ts +0 -17
  167. package/dist/src/lib/queue-manager/queue-manager.js +0 -42
  168. package/dist/src/lib/queue-manager/queue-metrics.d.ts +0 -10
  169. package/dist/src/lib/queue-manager/queue-metrics.js +0 -82
  170. package/dist/src/lib/queue-manager/queue-rate-limit.d.ts +0 -14
  171. package/dist/src/lib/queue-manager/queue-rate-limit.js +0 -68
  172. package/dist/src/lib/queue-manager/queue.d.ts +0 -26
  173. package/dist/src/lib/queue-manager/queue.js +0 -147
  174. package/dist/src/workers/delay.worker.d.ts +0 -10
  175. package/dist/src/workers/delay.worker.js +0 -46
  176. package/dist/src/workers/requeue.worker.d.ts +0 -10
  177. package/dist/src/workers/requeue.worker.js +0 -54
  178. package/dist/src/workers/schedule.worker.d.ts +0 -12
  179. package/dist/src/workers/schedule.worker.js +0 -79
  180. package/dist/src/workers/watchdog.worker.d.ts +0 -11
  181. package/dist/src/workers/watchdog.worker.js +0 -74
  182. package/dist/types/index.d.ts +0 -189
  183. package/dist/types/index.js +0 -37
package/CHANGELOG.md CHANGED
@@ -1,3 +1,83 @@
1
+
2
+
3
+ ## [8.0.0-rc.1](https://github.com/weyoss/redis-smq/compare/v8.0.0-rc.0...v8.0.0-rc.1) (2023-11-21)
4
+
5
+
6
+ ### Codebase Refactoring
7
+
8
+ * pass keyQueueMessages as a key for SCHEDULE_MESSAGE script ([f9f69b3](https://github.com/weyoss/redis-smq/commit/f9f69b3359c63702974946d9ae486b1a59a38485))
9
+
10
+
11
+ ### Tests
12
+
13
+ * fix unpredictable error throwing when deleting a namespace ([4126670](https://github.com/weyoss/redis-smq/commit/4126670ca283073c42e69e80e5fc95f1eaf95a92))
14
+
15
+
16
+ ### Misc
17
+
18
+ * update lint-staged configuration ([9543401](https://github.com/weyoss/redis-smq/commit/9543401acae6abed6eaa53aa9149e0306b2cad64))
19
+
20
+ ## [8.0.0-rc.0](https://github.com/weyoss/redis-smq/compare/v7.2.3...v8.0.0-rc.0) (2023-11-20)
21
+
22
+
23
+ ### ⚠ BREAKING CHANGES
24
+
25
+ * use latest redis-smq-common release, fix breaking changes
26
+
27
+ ### Features
28
+
29
+ * allow to track a published message by its ID ([5f702d2](https://github.com/weyoss/redis-smq/commit/5f702d251a5b1f43c0364d6ce96a667d4f79d700))
30
+
31
+
32
+ ### Bug Fixes
33
+
34
+ * **exchange:** fix json argument typings for _fromJSON() ([55bf8cc](https://github.com/weyoss/redis-smq/commit/55bf8cca65fce23774a68e6aaac1b590bbc07ff4))
35
+
36
+
37
+ ### Documentation
38
+
39
+ * add missing error classes reference, clean up ([106b6d0](https://github.com/weyoss/redis-smq/commit/106b6d0627b747e49d5d09499dda21912803298a))
40
+ * **api:** improve IQueueProperties description ([4ffeee3](https://github.com/weyoss/redis-smq/commit/4ffeee30e4a119a4bf378a4e753b19ad60f62070))
41
+ * fix empty links ([dfc4ae9](https://github.com/weyoss/redis-smq/commit/dfc4ae992be9b4145e100d8f063947c316b04f37))
42
+ * fix javascript/typescript examples ([4cb2eb1](https://github.com/weyoss/redis-smq/commit/4cb2eb13055609ea05ed98b34a143feedb63ebc0))
43
+ * **queue:** update IQueueProperties interface reference ([631f239](https://github.com/weyoss/redis-smq/commit/631f2393fedb7f33a20611e1a006b19c64a9fa93))
44
+ * **README.md:** add pre-release notice ([458fc57](https://github.com/weyoss/redis-smq/commit/458fc57e8089b8aa2835783a8bfe642364989ff6))
45
+ * **README.md:** fix typo ([3abf1e2](https://github.com/weyoss/redis-smq/commit/3abf1e2665c4ae5d3eb91b8166abc630cd9f039a))
46
+ * **README.md:** update minimal supported Redis version ([2c3ea00](https://github.com/weyoss/redis-smq/commit/2c3ea00dd93266b59ee649ffc8ff9351708f925b))
47
+ * **README:** fix heading hierarchy ([6dc0bd5](https://github.com/weyoss/redis-smq/commit/6dc0bd5ea10b42cc5a4ab1012c480f206e576edb))
48
+ * update docs ([188679e](https://github.com/weyoss/redis-smq/commit/188679e9476c9c0ba979be500168567775e085f3))
49
+ * update examples ([ac4b0b5](https://github.com/weyoss/redis-smq/commit/ac4b0b5d7d1d50ad10e9f5bcd825b28a51c37c40))
50
+
51
+
52
+ ### Codebase Refactoring
53
+
54
+ * **queue:** use friendly keys for queue properties object ([9e88f54](https://github.com/weyoss/redis-smq/commit/9e88f54052a9b0bc89144e8d067f1818f0d32a13))
55
+ * use latest redis-smq-common release, fix breaking changes ([e347d4d](https://github.com/weyoss/redis-smq/commit/e347d4d148c3b104e7d73c9ef8d5bf796657c1d6))
56
+
57
+
58
+ ### Tests
59
+
60
+ * fix breaking changes from latest redis-smq-common ([30a6099](https://github.com/weyoss/redis-smq/commit/30a609981786cabd4d08e9277be5b0bab8ad86fb))
61
+ * fix QueueMessageNotFoundError checking ([6053cee](https://github.com/weyoss/redis-smq/commit/6053ceef7b7922bbb58eaf91d4d3a15baea34bb4))
62
+ * fix tests ([561f0d0](https://github.com/weyoss/redis-smq/commit/561f0d06f0c4f28e6338def878210f2704b718b0))
63
+
64
+
65
+ ### Misc
66
+
67
+ * add npm scripts ([34b4883](https://github.com/weyoss/redis-smq/commit/34b4883fa65a3c0b75d019cd1aedda3d42ccfc63))
68
+ * bump up redis-smq-common to v3.0.0-rc.6 ([f177b95](https://github.com/weyoss/redis-smq/commit/f177b95a84b1ab41304a8ceb568922e359c626b2))
69
+ * bump up type-coverage to v2.27.0 ([5140727](https://github.com/weyoss/redis-smq/commit/5140727f59ebf820702b2822149d85a266ca4b5e))
70
+ * fix incorrect imports ([ba82774](https://github.com/weyoss/redis-smq/commit/ba827746f1824191bd677919f3165e405ff8bcfc))
71
+ * update both .gitignore and .npmignore files ([3e84387](https://github.com/weyoss/redis-smq/commit/3e8438758d65fec2afa4f8de11f25239f581c368))
72
+ * update package-lock.json ([77c761a](https://github.com/weyoss/redis-smq/commit/77c761aec04e103bc6a60b01ae0393a9e9bf7e43))
73
+ * update project copyright annotation ([4080ac0](https://github.com/weyoss/redis-smq/commit/4080ac0b76f418193391e20f5e8c294cac7671e9))
74
+
75
+
76
+ ### Continuous Integration
77
+
78
+ * drop support for redis server 2.8 and 3 ([9ef8ade](https://github.com/weyoss/redis-smq/commit/9ef8adec08bf90d1cc27b9bbabe591bca25a7d8e))
79
+ * update minimal supported versions for nodejs and redis ([13b3197](https://github.com/weyoss/redis-smq/commit/13b31977937c65aa989de8d715022d1afb5f0839))
80
+
1
81
  # CHANGELOG
2
82
 
3
83
  ## 7.2.3 (2023-03-26)
@@ -776,4 +856,3 @@ the configuration namespace is not set, the default namespace is used.
776
856
  * Rewritten RedisSMQ Monitor based on React and D3
777
857
  * RedisSMQ Monitor has split up from main repository and now maintained separately.
778
858
  * Introduced changelog
779
-
package/README.md CHANGED
@@ -17,240 +17,94 @@ RedisSMQ is a Node.js library for queuing messages (aka jobs) and processing the
17
17
 
18
18
  ## Features
19
19
 
20
- * **[High-performance message processing](/docs/performance.md)**.
21
- * **[Multi-Queue Producers](#producer) & [Multi-Queue Consumers](#consumer)**: Offering flexible Producer/Consumer models, with focus on simplicity and without tons of features. This can make RedisSMQ an ideal message broker for your microservices.
22
- * **[at-least-once/at-most-once Delivery](/docs/api/message.md#messageprototypesetretrythreshold)**: In case of failures, while delivering or processing a message, RedisSMQ can guaranty that the message will be not lost and redelivered again. When configured to do so, RedisSMQ can also ensure that the message is delivered at-most-once.
23
- * **[Different Exchange Types](/docs/message-exchanges.md)**: RedisSMQ offers 3 types of exchanges: [Direct Exchange](/docs/message-exchanges.md#direct-exchange), [Topic Exchange](/docs/message-exchanges.md#topic-exchange), and [Fanout Exchange](/docs/message-exchanges.md#fanout-exchange) for publishing a message to one or multiple queues.
24
- * **[FIFO queues, LIFO queues, and Reliable Priority Queues](/docs/queues.md)**: Provides different queuing strategies that you may use depending on your needs and requirements.
25
- * **[Message Expiration](/docs/api/message.md#messageprototypesetttl)**: Allowing a message to expire if it has not been delivered within a given amount of time.
26
- * **[Message Consumption Timeout](/docs/api/message.md#messageprototypesetconsumetimeout)**: Allowing to set up a timeout for consuming messages.
27
- * **[Queue Rate Limiting](/docs/queue-rate-limiting.md)**: Allowing to control the rate at which the messages are consumed from a given queue.
28
- * **[Scheduling Messages](/docs/scheduling-messages.md)**: Messages can be configured to be delayed, delivered for N times with an optional period between deliveries, and to be scheduled using CRON expressions.
29
- * **[Multiplexing](/docs/multiplexing.md)**: A feature which allows message handlers to use a single redis connection to dequeue and consume messages.
20
+ * **[High-performance message processing](docs/performance.md)**.
21
+ * **[Multi-Queue Producers](docs/producing-messages.md) & [Multi-Queue Consumers](docs/consuming-messages.md)**: Offering flexible Producer/Consumer models, with focus on simplicity and without tons of features. This can make RedisSMQ an ideal message broker for your microservices.
22
+ * **[at-least-once/at-most-once Delivery](docs/api/classes/Message.md#setretrythreshold)**: In case of failures, while delivering or processing a message, RedisSMQ can guaranty that the message will be not lost and redelivered again. When configured to do so, RedisSMQ can also ensure that the message is delivered at-most-once.
23
+ * **[Different Exchange Types](docs/message-exchanges.md)**: RedisSMQ offers 3 types of exchanges: [Direct Exchange](docs/message-exchanges.md#direct-exchange), [Topic Exchange](docs/message-exchanges.md#topic-exchange), and [FanOut Exchange](docs/message-exchanges.md#fanout-exchange) for publishing a message to one or multiple queues.
24
+ * **[FIFO queues, LIFO queues, and Reliable Priority Queues](docs/queues.md)**: Provides different queuing strategies that you may use depending on your needs and requirements.
25
+ * **[Message Expiration](docs/api/classes/Message.md#setttl)**: Allowing a message to expire if it has not been delivered within a given amount of time.
26
+ * **[Message Consumption Timeout](docs/api/classes/Message.md#setconsumetimeout)**: Allowing to set up a timeout for consuming messages.
27
+ * **[Queue Rate Limiting](docs/queue-rate-limiting.md)**: Allowing to control the rate at which the messages are consumed from a given queue.
28
+ * **[Scheduling Messages](docs/scheduling-messages.md)**: Messages can be configured to be delayed, delivered for N times with an optional period between deliveries, and to be scheduled using CRON expressions.
29
+ * **[Multiplexing](/docs/multiplexing.md)**: A feature which allows message handlers to use a single redis connection to dequeue and consume messages.
30
30
  * **[HTTP API](https://github.com/weyoss/redis-smq-monitor)**: an HTTP interface is provided to interact with the MQ.
31
31
  * **[Web UI](https://github.com/weyoss/redis-smq-monitor-client)**: RedisSMQ can be managed also from your web browser.
32
32
  * **[Logging](https://github.com/weyoss/redis-smq-common/blob/master/docs/logs.md)**: RedisSMQ comes with a built-in JSON logger, but can also use your application logger.
33
- * **[Configurable](/docs/configuration.md)**: Many options and features can be configured.
34
- * **[Multiple Redis clients](/docs/configuration.md)**: Depending on your preferences, RedisSMQ can use either [node-redis v3](https://github.com/redis/node-redis/tree/v3.1.2), [node-redis v4](https://github.com/redis/node-redis), or [ioredis](https://github.com/luin/ioredis).
33
+ * **[Configurable](docs/configuration.md)**: Many options and features can be configured.
34
+ * **[Multiple Redis clients](docs/configuration.md)**: Depending on your preferences, RedisSMQ can use either [node-redis v3](https://github.com/redis/node-redis/tree/v3.1.2), [node-redis v4](https://github.com/redis/node-redis), or [ioredis](https://github.com/luin/ioredis).
35
35
  * **[Highly optimized](https://lgtm.com/projects/g/weyoss/redis-smq/context:javascript)**: Strongly-typed and 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).
36
36
 
37
-
38
- ### RedisSMQ Use Case: Multi-Queue Producers & Multi-Queue Consumers
37
+ ## RedisSMQ Use Case: Multi-Queue Producers & Multi-Queue Consumers
39
38
 
40
39
   
41
40
 
42
- ![RedisSMQ Overview](/docs/redis-smq-overview.png)
43
-
44
- ## Table of Content
45
-
46
- 1. [What's new?](#whats-new)
47
- 2. [Installation](#installation)
48
- 3. [Configuration](#configuration)
49
- 4. [Usage](#usage)
50
- 1. [Basics](#basics)
51
- 1. [Message](#message)
52
- 2. [Producer](#producer)
53
- 3. [Consumer](#consumer)
54
- 1. [Message Acknowledgement](#message-acknowledgement)
55
- 2. [Advanced Topics](#advanced-topics)
56
- 1. [Scheduling Messages](/docs/scheduling-messages.md)
57
- 2. [Message Exchanges](/docs/message-exchanges.md)
58
- 3. [Queue Rate Limiting](/docs/queue-rate-limiting.md)
59
- 4. [Multiplexing](/docs/multiplexing.md)
60
- 5. [Message Manager](/docs/api/message-manager.md)
61
- 6. [Queue Manager](/docs/api/queue-manager.md)
62
- 7. [HTTP API](https://github.com/weyoss/redis-smq-monitor)
63
- 8. [Web UI](https://github.com/weyoss/redis-smq-monitor-client)
64
- 9. [Logs](https://github.com/weyoss/redis-smq-common/blob/master/docs/logs.md)
65
- 5. [RedisSMQ Architecture](/docs/redis-smq-architecture.md)
66
- 6. [Performance](#performance)
67
- 7. [Contributing](#contributing)
68
- 8. [License](#license)
41
+ ![RedisSMQ Overview](docs/redis-smq-overview.png)
69
42
 
70
43
  ## What's new?
71
44
 
72
- **2023.01.06**
73
-
74
- :rocket: RedisSMQ v7.2 is released! Before this release RedisSMQ supported both LIFO queues and Priority queues.
75
- With this new release, RedisSMQ now provides FIFO queues as a third option that completes the list of supported queue types.
76
- For more details see [Queues](/docs/queues.md).
45
+ :rocket: RedisSMQ v8 is coming soon!
77
46
 
78
47
  ## Installation
79
48
 
80
- ```text
81
- npm install redis-smq-common redis-smq --save
49
+ > Currently, RedisSMQ is going under heavy development. Pre-releases at any time may introduce new commits with breaking changes. To view the latest release reference see [RedisSMQ v7.2.3](https://github.com/weyoss/redis-smq/tree/v7.2.3)
50
+
51
+ ```shell
52
+ npm i redis-smq@rc
82
53
  ```
83
54
 
84
55
  Considerations:
85
56
 
86
- - Minimal Node.js version is >= 14 (RedisSMQ is tested under current active LTS and maintenance LTS Node.js releases).
87
- - Minimal Redis server version is 2.6.12 (RedisSMQ is tested under Redis v2.6, v3, v4, v5, and v6).
88
-
89
- ## Configuration
90
-
91
- See [Configuration](/docs/configuration.md) for more details.
57
+ - Minimal Node.js version is >= 18 (RedisSMQ is tested under current active LTS and maintenance LTS Node.js releases).
58
+ - Minimal Redis server version is 4.0.0.
92
59
 
93
60
  ## Usage
94
61
 
95
- ### Basics
96
-
97
62
  RedisSMQ provides 3 classes in order to work with the message queue: `Message`, `Producer`, and `Consumer`.
98
63
 
99
- Producers and consumers exchange data using one or multiple queues that may be created using the [QueueManager](/docs/api/queue-manager.md).
64
+ Producers and consumers exchange data using one or multiple queues that may be created using the [Queue Class](docs/api/classes/Queue.md).
100
65
 
101
66
  A queue is responsible for holding messages which are produced by producers and are delivered to consumers.
102
67
 
103
- ```javascript
104
- const { QueueManager } = require('redis-smq');
105
- const { EQueueType } = require('redis-smq/dist/types');
106
- const config = require('./config')
107
-
108
- QueueManager.createInstance(config, (err, queueManager) => {
109
- if (err) console.log(err);
110
- // Creating a LIFO queue
111
- else queueManager.queue.save('test_queue', EQueueType.LIFO_QUEUE, (err) => console.log(err));
112
- })
113
- ```
114
-
115
- See [Queues](/docs/queues.md) for more details.
116
-
117
- #### Message
118
-
119
- `Message` class is responsible for creating messages that may be published.
120
-
121
- A message can carry your application data, sometimes referred to as `message payload`, which may be delivered to a consumer to be processed asynchronously.
122
-
123
- The message payload can be of any valid JSON data type. It may be a simple text message like `Hello world` or a complex data type like `{hello: 'world'}`.
68
+ ### Creating a queue
124
69
 
125
70
  ```javascript
126
- const { Message } = require('redis-smq');
127
- const message = new Message();
128
- message
129
- .setBody({hello: 'world'})
130
- .setTTL(3600000)
131
- .setRetryThreshold(5);
132
- ```
133
-
134
- The `Message` class provides many methods for setting up different message parameters such as message body, message priority, message TTL, etc.
135
-
136
- See [Message Reference](/docs/api/message.md) for more details.
137
-
138
- #### Producer
71
+ const { Queue, EQueueType } = require('redis-smq');
139
72
 
140
- A `Producer` instance allows to publish a message to a queue.
73
+ const queue = new Queue();
141
74
 
142
- You can use a single `Producer` instance to produce messages, including messages with priority, to one or multiple queues.
75
+ // Creating a LIFO queue
76
+ queue.save('my_queue', EQueueType.LIFO_QUEUE, (err) => console.log(err));
77
+ ```
143
78
 
144
- Before publishing a message do not forget to set an exchange for the message using [setQueue()](/docs/api/message.md#messageprototypesetqueue), [setTopic()](/docs/api/message.md#messageprototypesettopic), or [setFanOut()](/docs/api/message.md#messageprototypesetfanout). Otherwise, an error will be returned. See [Message Exchanges](/docs/message-exchanges.md) for more details.
79
+ ### Producing a message
145
80
 
146
81
  ```javascript
147
- 'use strict';
148
- const {Message, Producer} = require('redis-smq');
82
+ const { Producer, Message } = require('redis-smq');
149
83
 
150
84
  const producer = new Producer();
151
- producer.run((err) => {
152
- if (err) throw err;
153
- const message = new Message();
154
- message
155
- .setBody({hello: 'world'})
156
- .setTTL(3600000) // message expiration (in millis)
157
- .setQueue('test_queue'); // setting up a direct exchange
158
- message.getId() // null
159
- producer.produce(message, (err) => {
160
- if (err) console.log(err);
161
- else {
162
- const msgId = message.getId(); // string
163
- console.log('Successfully produced. Message ID is ', msgId);
164
- }
165
- });
166
- })
167
- ```
168
-
169
- Starting with v7.0.6, before producing messages you need first to run your producer instance.
170
-
171
- See [Producer Reference](/docs/api/producer.md) for more details.
172
-
173
- #### Consumer
174
-
175
- A `Consumer` instance can be used to receive and consume messages from one or multiple queues.
176
-
177
- To consume messages from a queue, the `Consumer` class provides the [consume()](/docs/api/consumer.md#consumerprototypeconsume) method which allows to register a `message handler`.
178
-
179
- A `message handler` is a function that receives a delivered message from a given queue.
180
-
181
- Message handlers can be registered at any time, before or after a consumer has been started.
182
85
 
183
- In contrast to producers, consumers are not automatically started upon creation. To start a consumer use the [run()](/docs/api/consumer.md#consumerprototyperun) method.
86
+ const message = new Message();
87
+ message.setQueue('my_queue').setBody('Hello Word!')
184
88
 
185
- To stop consuming messages from a queue and to remove the associated `message handler` from your consumer, use the [cancel()](/docs/api/consumer.md#consumerprototypecancel) method.
89
+ producer.produce(message, (err) => console.log(err));
90
+ ```
186
91
 
187
- To shut down completely your consumer and tear down all message handlers, use the [shutdown()](/docs/api/consumer.md#consumerprototypeshutdown) method.
92
+ ### Consuming a message
188
93
 
189
94
  ```javascript
190
- 'use strict';
191
-
192
95
  const { Consumer } = require('redis-smq');
193
96
 
194
97
  const consumer = new Consumer();
195
-
196
- const messageHandler = (msg, cb) => {
197
- const payload = msg.getBody();
198
- console.log('Message payload', payload);
199
- cb(); // acknowledging the message
200
- };
201
-
202
- consumer.consume('test_queue', messageHandler, (err) => {
203
- if (err) console.error(err);
204
- });
205
-
206
- consumer.run();
98
+ const messageHandler = (message, cb) => {
99
+ console.log(message.getBody());
100
+ cb();
101
+ }
102
+ consumer.consume('my_queue', messageHandler, (err) => console.log(err));
207
103
  ```
208
104
 
209
- ##### Message Acknowledgement
210
-
211
- Once a message is received, to acknowledge it, you invoke the callback function without arguments, as shown in the example above.
212
-
213
- Message acknowledgment informs the MQ that the delivered message has been successfully consumed.
214
-
215
- If an error occurred while processing a message, you can unacknowledge it by passing in the error to the callback function.
216
-
217
- By default, unacknowledged messages are re-queued and delivered again unless **message retry threshold** is exceeded.
218
-
219
- Delivered messages that couldn't be processed or can not be delivered to consumers are moved to a system generated queue called **dead-letter queue (DLQ)**.
220
-
221
- By default, RedisSMQ does not store acknowledged and dead-lettered messages for saving disk and memory spaces, and also to increase message processing performance.
222
-
223
- If you need such feature, you can enable it from your [configuration](/docs/configuration.md) object.
224
-
225
- See [Consumer Reference](/docs/api/consumer.md) for more details.
226
-
227
- ### Advanced Topics
228
-
229
- * [Scheduling Messages](/docs/scheduling-messages.md)
230
-
231
- * [Message Exchanges](/docs/message-exchanges.md)
232
-
233
- * [Queue Rate Limiting](/docs/queue-rate-limiting.md)
234
-
235
- * [Multiplexing](/docs/multiplexing.md)
236
-
237
- * [Message Manager](/docs/api/message-manager.md)
238
-
239
- * [Queue Manager](/docs/api/queue-manager.md)
240
-
241
- * [HTTP API](https://github.com/weyoss/redis-smq-monitor)
242
-
243
- * [Web UI](https://github.com/weyoss/redis-smq-monitor-client)
244
-
245
- * [Logs](https://github.com/weyoss/redis-smq-common/blob/master/docs/logs.md)
246
-
247
- ## RedisSMQ Architecture
248
-
249
- * See [Architecture Overview](/docs/redis-smq-architecture.md).
250
-
251
- ## Performance
105
+ ## Documentation
252
106
 
253
- See [Performance](/docs/performance.md) for more details.
107
+ See [RedisSMQ Docs](docs/README.md) for more details.
254
108
 
255
109
  ## Contributing
256
110