@fedify/redis 0.2.0 → 0.3.0-dev.14
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/README.md +8 -0
- package/esm/src/mq.js +59 -27
- package/package.json +3 -2
- package/script/src/mq.js +59 -27
- package/types/src/mq.d.ts +7 -7
- package/types/src/mq.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -62,6 +62,14 @@ bun add @fedify/redis
|
|
|
62
62
|
Changelog
|
|
63
63
|
---------
|
|
64
64
|
|
|
65
|
+
### Version 0.3.0
|
|
66
|
+
|
|
67
|
+
To be released.
|
|
68
|
+
|
|
69
|
+
- Polling is now more efficient.
|
|
70
|
+
- Renamed `RedisMessageQueueOptions.loopInterval` option to `pollInterval`
|
|
71
|
+
option.
|
|
72
|
+
|
|
65
73
|
### Version 0.2.0
|
|
66
74
|
|
|
67
75
|
Released on September 26, 2024.
|
package/esm/src/mq.js
CHANGED
|
@@ -9,10 +9,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _RedisMessageQueue_instances, _RedisMessageQueue_redis, _RedisMessageQueue_subRedis, _RedisMessageQueue_workerId, _RedisMessageQueue_channelKey, _RedisMessageQueue_queueKey, _RedisMessageQueue_lockKey, _RedisMessageQueue_codec,
|
|
12
|
+
var _RedisMessageQueue_instances, _RedisMessageQueue_redis, _RedisMessageQueue_subRedis, _RedisMessageQueue_workerId, _RedisMessageQueue_channelKey, _RedisMessageQueue_queueKey, _RedisMessageQueue_lockKey, _RedisMessageQueue_codec, _RedisMessageQueue_pollIntervalMs, _RedisMessageQueue_loopHandle, _RedisMessageQueue_poll;
|
|
13
13
|
// deno-lint-ignore-file no-explicit-any
|
|
14
14
|
import * as dntShim from "../_dnt.shims.js";
|
|
15
|
+
import { getLogger } from "@logtape/logtape";
|
|
15
16
|
import { JsonCodec } from "./codec.js";
|
|
17
|
+
const logger = getLogger(["fedify", "redis", "mq"]);
|
|
16
18
|
/**
|
|
17
19
|
* A message queue that uses Redis as the underlying storage.
|
|
18
20
|
*
|
|
@@ -43,7 +45,7 @@ export class RedisMessageQueue {
|
|
|
43
45
|
_RedisMessageQueue_queueKey.set(this, void 0);
|
|
44
46
|
_RedisMessageQueue_lockKey.set(this, void 0);
|
|
45
47
|
_RedisMessageQueue_codec.set(this, void 0);
|
|
46
|
-
|
|
48
|
+
_RedisMessageQueue_pollIntervalMs.set(this, void 0);
|
|
47
49
|
_RedisMessageQueue_loopHandle.set(this, void 0);
|
|
48
50
|
__classPrivateFieldSet(this, _RedisMessageQueue_redis, redis(), "f");
|
|
49
51
|
__classPrivateFieldSet(this, _RedisMessageQueue_subRedis, redis(), "f");
|
|
@@ -52,59 +54,89 @@ export class RedisMessageQueue {
|
|
|
52
54
|
__classPrivateFieldSet(this, _RedisMessageQueue_queueKey, options.queueKey ?? "fedify_queue", "f");
|
|
53
55
|
__classPrivateFieldSet(this, _RedisMessageQueue_lockKey, options.lockKey ?? "fedify_lock", "f");
|
|
54
56
|
__classPrivateFieldSet(this, _RedisMessageQueue_codec, options.codec ?? new JsonCodec(), "f");
|
|
55
|
-
__classPrivateFieldSet(this,
|
|
57
|
+
__classPrivateFieldSet(this, _RedisMessageQueue_pollIntervalMs, dntShim.Temporal.Duration.from(options.pollInterval ?? { seconds: 5 }).total("millisecond"), "f");
|
|
56
58
|
}
|
|
57
59
|
async enqueue(message, options) {
|
|
58
60
|
const ts = options?.delay == null
|
|
59
61
|
? 0
|
|
60
62
|
: dntShim.Temporal.Now.instant().add(options.delay).epochMilliseconds;
|
|
61
|
-
const encodedMessage = __classPrivateFieldGet(this, _RedisMessageQueue_codec, "f").encode(
|
|
63
|
+
const encodedMessage = __classPrivateFieldGet(this, _RedisMessageQueue_codec, "f").encode([
|
|
64
|
+
crypto.randomUUID(),
|
|
65
|
+
message,
|
|
66
|
+
]);
|
|
62
67
|
await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").zadd(__classPrivateFieldGet(this, _RedisMessageQueue_queueKey, "f"), ts, encodedMessage);
|
|
63
68
|
if (ts < 1)
|
|
64
69
|
__classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").publish(__classPrivateFieldGet(this, _RedisMessageQueue_channelKey, "f"), "");
|
|
65
70
|
}
|
|
66
|
-
listen(handler, options = {}) {
|
|
71
|
+
async listen(handler, options = {}) {
|
|
67
72
|
if (__classPrivateFieldGet(this, _RedisMessageQueue_loopHandle, "f") != null) {
|
|
68
73
|
throw new Error("Already listening");
|
|
69
74
|
}
|
|
70
75
|
const signal = options.signal;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
const poll = async () => {
|
|
77
|
+
while (!signal?.aborted) {
|
|
78
|
+
let message;
|
|
79
|
+
try {
|
|
80
|
+
message = await __classPrivateFieldGet(this, _RedisMessageQueue_instances, "m", _RedisMessageQueue_poll).call(this);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
logger.error("Error polling for messages: {error}", error);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
80
86
|
if (message === undefined)
|
|
81
87
|
return;
|
|
82
88
|
await handler(message);
|
|
83
|
-
}
|
|
84
|
-
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const promise = __classPrivateFieldGet(this, _RedisMessageQueue_subRedis, "f").subscribe(__classPrivateFieldGet(this, _RedisMessageQueue_channelKey, "f"), () => {
|
|
92
|
+
__classPrivateFieldGet(this, _RedisMessageQueue_subRedis, "f").on("message", poll);
|
|
85
93
|
signal?.addEventListener("abort", () => {
|
|
86
|
-
__classPrivateFieldGet(this, _RedisMessageQueue_subRedis, "f").off("message",
|
|
94
|
+
__classPrivateFieldGet(this, _RedisMessageQueue_subRedis, "f").off("message", poll);
|
|
87
95
|
});
|
|
88
96
|
});
|
|
89
|
-
|
|
97
|
+
signal?.addEventListener("abort", () => {
|
|
98
|
+
for (const timeout of timeouts)
|
|
99
|
+
clearTimeout(timeout);
|
|
100
|
+
});
|
|
101
|
+
const timeouts = new Set();
|
|
102
|
+
while (!signal?.aborted) {
|
|
103
|
+
let timeout;
|
|
104
|
+
await new Promise((resolve) => {
|
|
105
|
+
signal?.addEventListener("abort", resolve);
|
|
106
|
+
timeout = setTimeout(() => {
|
|
107
|
+
signal?.removeEventListener("abort", resolve);
|
|
108
|
+
resolve(0);
|
|
109
|
+
}, __classPrivateFieldGet(this, _RedisMessageQueue_pollIntervalMs, "f"));
|
|
110
|
+
timeouts.add(timeout);
|
|
111
|
+
});
|
|
112
|
+
if (timeout != null)
|
|
113
|
+
timeouts.delete(timeout);
|
|
114
|
+
await poll();
|
|
115
|
+
}
|
|
116
|
+
return await new Promise((resolve) => {
|
|
90
117
|
signal?.addEventListener("abort", () => {
|
|
91
|
-
|
|
92
|
-
promise.then(() => resolve());
|
|
118
|
+
promise.catch(() => resolve()).then(() => resolve());
|
|
93
119
|
});
|
|
120
|
+
promise.catch(() => resolve()).then(() => resolve());
|
|
94
121
|
});
|
|
95
122
|
}
|
|
96
|
-
[(_RedisMessageQueue_redis = new WeakMap(), _RedisMessageQueue_subRedis = new WeakMap(), _RedisMessageQueue_workerId = new WeakMap(), _RedisMessageQueue_channelKey = new WeakMap(), _RedisMessageQueue_queueKey = new WeakMap(), _RedisMessageQueue_lockKey = new WeakMap(), _RedisMessageQueue_codec = new WeakMap(),
|
|
97
|
-
|
|
98
|
-
|
|
123
|
+
[(_RedisMessageQueue_redis = new WeakMap(), _RedisMessageQueue_subRedis = new WeakMap(), _RedisMessageQueue_workerId = new WeakMap(), _RedisMessageQueue_channelKey = new WeakMap(), _RedisMessageQueue_queueKey = new WeakMap(), _RedisMessageQueue_lockKey = new WeakMap(), _RedisMessageQueue_codec = new WeakMap(), _RedisMessageQueue_pollIntervalMs = new WeakMap(), _RedisMessageQueue_loopHandle = new WeakMap(), _RedisMessageQueue_instances = new WeakSet(), _RedisMessageQueue_poll = async function _RedisMessageQueue_poll() {
|
|
124
|
+
logger.debug("Polling for messages...");
|
|
125
|
+
const result = await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").set(__classPrivateFieldGet(this, _RedisMessageQueue_lockKey, "f"), __classPrivateFieldGet(this, _RedisMessageQueue_workerId, "f"), "EX", Math.floor(__classPrivateFieldGet(this, _RedisMessageQueue_pollIntervalMs, "f") / 1000 * 2), "NX");
|
|
126
|
+
if (result == null) {
|
|
127
|
+
logger.debug("Another worker is already processing messages; skipping...");
|
|
99
128
|
return;
|
|
100
|
-
|
|
129
|
+
}
|
|
130
|
+
logger.debug("Acquired lock; processing messages...");
|
|
101
131
|
const messages = await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").zrangebyscoreBuffer(__classPrivateFieldGet(this, _RedisMessageQueue_queueKey, "f"), 0, dntShim.Temporal.Now.instant().epochMilliseconds);
|
|
132
|
+
logger.debug("Found {messages} messages to process.", { messages: messages.length });
|
|
102
133
|
try {
|
|
103
134
|
if (messages.length < 1)
|
|
104
135
|
return;
|
|
105
|
-
const
|
|
106
|
-
await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").zrem(__classPrivateFieldGet(this, _RedisMessageQueue_queueKey, "f"),
|
|
107
|
-
|
|
136
|
+
const encodedMessage = messages[0];
|
|
137
|
+
await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").zrem(__classPrivateFieldGet(this, _RedisMessageQueue_queueKey, "f"), encodedMessage);
|
|
138
|
+
const [_, message] = __classPrivateFieldGet(this, _RedisMessageQueue_codec, "f").decode(encodedMessage);
|
|
139
|
+
return message;
|
|
108
140
|
}
|
|
109
141
|
finally {
|
|
110
142
|
await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").del(__classPrivateFieldGet(this, _RedisMessageQueue_lockKey, "f"));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedify/redis",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0-dev.14+1d5c67ec",
|
|
4
4
|
"description": "Redis drivers for Fedify",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fedify",
|
|
@@ -60,7 +60,8 @@
|
|
|
60
60
|
],
|
|
61
61
|
"dependencies": {
|
|
62
62
|
"@fedify/fedify": "^1.0.0",
|
|
63
|
-
"
|
|
63
|
+
"@logtape/logtape": "^0.6.3",
|
|
64
|
+
"ioredis": "^5.4.1",
|
|
64
65
|
"@deno/shim-deno": "~0.18.0",
|
|
65
66
|
"@js-temporal/polyfill": "^0.4.4"
|
|
66
67
|
},
|
package/script/src/mq.js
CHANGED
|
@@ -33,12 +33,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
33
33
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
34
34
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
35
35
|
};
|
|
36
|
-
var _RedisMessageQueue_instances, _RedisMessageQueue_redis, _RedisMessageQueue_subRedis, _RedisMessageQueue_workerId, _RedisMessageQueue_channelKey, _RedisMessageQueue_queueKey, _RedisMessageQueue_lockKey, _RedisMessageQueue_codec,
|
|
36
|
+
var _RedisMessageQueue_instances, _RedisMessageQueue_redis, _RedisMessageQueue_subRedis, _RedisMessageQueue_workerId, _RedisMessageQueue_channelKey, _RedisMessageQueue_queueKey, _RedisMessageQueue_lockKey, _RedisMessageQueue_codec, _RedisMessageQueue_pollIntervalMs, _RedisMessageQueue_loopHandle, _RedisMessageQueue_poll;
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
exports.RedisMessageQueue = void 0;
|
|
39
39
|
// deno-lint-ignore-file no-explicit-any
|
|
40
40
|
const dntShim = __importStar(require("../_dnt.shims.js"));
|
|
41
|
+
const logtape_1 = require("@logtape/logtape");
|
|
41
42
|
const codec_js_1 = require("./codec.js");
|
|
43
|
+
const logger = (0, logtape_1.getLogger)(["fedify", "redis", "mq"]);
|
|
42
44
|
/**
|
|
43
45
|
* A message queue that uses Redis as the underlying storage.
|
|
44
46
|
*
|
|
@@ -69,7 +71,7 @@ class RedisMessageQueue {
|
|
|
69
71
|
_RedisMessageQueue_queueKey.set(this, void 0);
|
|
70
72
|
_RedisMessageQueue_lockKey.set(this, void 0);
|
|
71
73
|
_RedisMessageQueue_codec.set(this, void 0);
|
|
72
|
-
|
|
74
|
+
_RedisMessageQueue_pollIntervalMs.set(this, void 0);
|
|
73
75
|
_RedisMessageQueue_loopHandle.set(this, void 0);
|
|
74
76
|
__classPrivateFieldSet(this, _RedisMessageQueue_redis, redis(), "f");
|
|
75
77
|
__classPrivateFieldSet(this, _RedisMessageQueue_subRedis, redis(), "f");
|
|
@@ -78,59 +80,89 @@ class RedisMessageQueue {
|
|
|
78
80
|
__classPrivateFieldSet(this, _RedisMessageQueue_queueKey, options.queueKey ?? "fedify_queue", "f");
|
|
79
81
|
__classPrivateFieldSet(this, _RedisMessageQueue_lockKey, options.lockKey ?? "fedify_lock", "f");
|
|
80
82
|
__classPrivateFieldSet(this, _RedisMessageQueue_codec, options.codec ?? new codec_js_1.JsonCodec(), "f");
|
|
81
|
-
__classPrivateFieldSet(this,
|
|
83
|
+
__classPrivateFieldSet(this, _RedisMessageQueue_pollIntervalMs, dntShim.Temporal.Duration.from(options.pollInterval ?? { seconds: 5 }).total("millisecond"), "f");
|
|
82
84
|
}
|
|
83
85
|
async enqueue(message, options) {
|
|
84
86
|
const ts = options?.delay == null
|
|
85
87
|
? 0
|
|
86
88
|
: dntShim.Temporal.Now.instant().add(options.delay).epochMilliseconds;
|
|
87
|
-
const encodedMessage = __classPrivateFieldGet(this, _RedisMessageQueue_codec, "f").encode(
|
|
89
|
+
const encodedMessage = __classPrivateFieldGet(this, _RedisMessageQueue_codec, "f").encode([
|
|
90
|
+
crypto.randomUUID(),
|
|
91
|
+
message,
|
|
92
|
+
]);
|
|
88
93
|
await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").zadd(__classPrivateFieldGet(this, _RedisMessageQueue_queueKey, "f"), ts, encodedMessage);
|
|
89
94
|
if (ts < 1)
|
|
90
95
|
__classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").publish(__classPrivateFieldGet(this, _RedisMessageQueue_channelKey, "f"), "");
|
|
91
96
|
}
|
|
92
|
-
listen(handler, options = {}) {
|
|
97
|
+
async listen(handler, options = {}) {
|
|
93
98
|
if (__classPrivateFieldGet(this, _RedisMessageQueue_loopHandle, "f") != null) {
|
|
94
99
|
throw new Error("Already listening");
|
|
95
100
|
}
|
|
96
101
|
const signal = options.signal;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
const poll = async () => {
|
|
103
|
+
while (!signal?.aborted) {
|
|
104
|
+
let message;
|
|
105
|
+
try {
|
|
106
|
+
message = await __classPrivateFieldGet(this, _RedisMessageQueue_instances, "m", _RedisMessageQueue_poll).call(this);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
logger.error("Error polling for messages: {error}", error);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
106
112
|
if (message === undefined)
|
|
107
113
|
return;
|
|
108
114
|
await handler(message);
|
|
109
|
-
}
|
|
110
|
-
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const promise = __classPrivateFieldGet(this, _RedisMessageQueue_subRedis, "f").subscribe(__classPrivateFieldGet(this, _RedisMessageQueue_channelKey, "f"), () => {
|
|
118
|
+
__classPrivateFieldGet(this, _RedisMessageQueue_subRedis, "f").on("message", poll);
|
|
111
119
|
signal?.addEventListener("abort", () => {
|
|
112
|
-
__classPrivateFieldGet(this, _RedisMessageQueue_subRedis, "f").off("message",
|
|
120
|
+
__classPrivateFieldGet(this, _RedisMessageQueue_subRedis, "f").off("message", poll);
|
|
113
121
|
});
|
|
114
122
|
});
|
|
115
|
-
|
|
123
|
+
signal?.addEventListener("abort", () => {
|
|
124
|
+
for (const timeout of timeouts)
|
|
125
|
+
clearTimeout(timeout);
|
|
126
|
+
});
|
|
127
|
+
const timeouts = new Set();
|
|
128
|
+
while (!signal?.aborted) {
|
|
129
|
+
let timeout;
|
|
130
|
+
await new Promise((resolve) => {
|
|
131
|
+
signal?.addEventListener("abort", resolve);
|
|
132
|
+
timeout = setTimeout(() => {
|
|
133
|
+
signal?.removeEventListener("abort", resolve);
|
|
134
|
+
resolve(0);
|
|
135
|
+
}, __classPrivateFieldGet(this, _RedisMessageQueue_pollIntervalMs, "f"));
|
|
136
|
+
timeouts.add(timeout);
|
|
137
|
+
});
|
|
138
|
+
if (timeout != null)
|
|
139
|
+
timeouts.delete(timeout);
|
|
140
|
+
await poll();
|
|
141
|
+
}
|
|
142
|
+
return await new Promise((resolve) => {
|
|
116
143
|
signal?.addEventListener("abort", () => {
|
|
117
|
-
|
|
118
|
-
promise.then(() => resolve());
|
|
144
|
+
promise.catch(() => resolve()).then(() => resolve());
|
|
119
145
|
});
|
|
146
|
+
promise.catch(() => resolve()).then(() => resolve());
|
|
120
147
|
});
|
|
121
148
|
}
|
|
122
|
-
[(_RedisMessageQueue_redis = new WeakMap(), _RedisMessageQueue_subRedis = new WeakMap(), _RedisMessageQueue_workerId = new WeakMap(), _RedisMessageQueue_channelKey = new WeakMap(), _RedisMessageQueue_queueKey = new WeakMap(), _RedisMessageQueue_lockKey = new WeakMap(), _RedisMessageQueue_codec = new WeakMap(),
|
|
123
|
-
|
|
124
|
-
|
|
149
|
+
[(_RedisMessageQueue_redis = new WeakMap(), _RedisMessageQueue_subRedis = new WeakMap(), _RedisMessageQueue_workerId = new WeakMap(), _RedisMessageQueue_channelKey = new WeakMap(), _RedisMessageQueue_queueKey = new WeakMap(), _RedisMessageQueue_lockKey = new WeakMap(), _RedisMessageQueue_codec = new WeakMap(), _RedisMessageQueue_pollIntervalMs = new WeakMap(), _RedisMessageQueue_loopHandle = new WeakMap(), _RedisMessageQueue_instances = new WeakSet(), _RedisMessageQueue_poll = async function _RedisMessageQueue_poll() {
|
|
150
|
+
logger.debug("Polling for messages...");
|
|
151
|
+
const result = await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").set(__classPrivateFieldGet(this, _RedisMessageQueue_lockKey, "f"), __classPrivateFieldGet(this, _RedisMessageQueue_workerId, "f"), "EX", Math.floor(__classPrivateFieldGet(this, _RedisMessageQueue_pollIntervalMs, "f") / 1000 * 2), "NX");
|
|
152
|
+
if (result == null) {
|
|
153
|
+
logger.debug("Another worker is already processing messages; skipping...");
|
|
125
154
|
return;
|
|
126
|
-
|
|
155
|
+
}
|
|
156
|
+
logger.debug("Acquired lock; processing messages...");
|
|
127
157
|
const messages = await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").zrangebyscoreBuffer(__classPrivateFieldGet(this, _RedisMessageQueue_queueKey, "f"), 0, dntShim.Temporal.Now.instant().epochMilliseconds);
|
|
158
|
+
logger.debug("Found {messages} messages to process.", { messages: messages.length });
|
|
128
159
|
try {
|
|
129
160
|
if (messages.length < 1)
|
|
130
161
|
return;
|
|
131
|
-
const
|
|
132
|
-
await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").zrem(__classPrivateFieldGet(this, _RedisMessageQueue_queueKey, "f"),
|
|
133
|
-
|
|
162
|
+
const encodedMessage = messages[0];
|
|
163
|
+
await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").zrem(__classPrivateFieldGet(this, _RedisMessageQueue_queueKey, "f"), encodedMessage);
|
|
164
|
+
const [_, message] = __classPrivateFieldGet(this, _RedisMessageQueue_codec, "f").decode(encodedMessage);
|
|
165
|
+
return message;
|
|
134
166
|
}
|
|
135
167
|
finally {
|
|
136
168
|
await __classPrivateFieldGet(this, _RedisMessageQueue_redis, "f").del(__classPrivateFieldGet(this, _RedisMessageQueue_lockKey, "f"));
|
package/types/src/mq.d.ts
CHANGED
|
@@ -16,31 +16,31 @@ export interface RedisMessageQueueOptions {
|
|
|
16
16
|
/**
|
|
17
17
|
* The Pub/Sub channel key to use for the message queue. `"fedify_channel"`
|
|
18
18
|
* by default.
|
|
19
|
+
* @default `"fedify_channel"`
|
|
19
20
|
*/
|
|
20
21
|
channelKey?: RedisKey;
|
|
21
22
|
/**
|
|
22
23
|
* The Sorted Set key to use for the delayed message queue. `"fedify_queue"`
|
|
23
24
|
* by default.
|
|
25
|
+
* @default `"fedify_queue"`
|
|
24
26
|
*/
|
|
25
27
|
queueKey?: RedisKey;
|
|
26
28
|
/**
|
|
27
29
|
* The key to use for locking the message queue. `"fedify_lock"` by default.
|
|
30
|
+
* @default `"fedify_lock"`
|
|
28
31
|
*/
|
|
29
32
|
lockKey?: RedisKey;
|
|
30
33
|
/**
|
|
31
34
|
* The codec to use for encoding and decoding messages in the key-value store.
|
|
32
35
|
* Defaults to {@link JsonCodec}.
|
|
36
|
+
* @default {@link JsonCodec}
|
|
33
37
|
*/
|
|
34
38
|
codec?: Codec;
|
|
35
39
|
/**
|
|
36
|
-
* The interval
|
|
37
|
-
*
|
|
38
|
-
* server. If it is too long, it may cause messages to be delayed longer
|
|
39
|
-
* than expected.
|
|
40
|
-
*
|
|
41
|
-
* 5 seconds by default.
|
|
40
|
+
* The poll interval for the message queue. 5 seconds by default.
|
|
41
|
+
* @default `{ seconds: 5 }`
|
|
42
42
|
*/
|
|
43
|
-
|
|
43
|
+
pollInterval?: dntShim.Temporal.Duration | dntShim.Temporal.DurationLike;
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* A message queue that uses Redis as the underlying storage.
|
package/types/src/mq.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mq.d.ts","sourceRoot":"","sources":["../../src/src/mq.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"mq.d.ts","sourceRoot":"","sources":["../../src/src/mq.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,YAAY,CAAC;AAInD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAC;IAEnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;CAC1E;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAkB,YAAW,YAAY,EAAE,UAAU;;IAWhE;;;;OAIG;gBACS,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,GAAE,wBAA6B;IAahE,OAAO,CACX,OAAO,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,IAAI,CAAC;IAgDV,MAAM,CACV,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC/C,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,IAAI,CAAC;IAoDhB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CAKzB"}
|