@geekmidas/events 0.1.0 → 0.2.0
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/dist/{BasicConnection-C4_Y0nIj.d.mts → BasicConnection-BTRsXiuH.d.cts} +3 -2
- package/dist/BasicConnection-BTRsXiuH.d.cts.map +1 -0
- package/dist/{BasicConnection-Bz3F2rXA.cjs → BasicConnection-C-Cg2FJT.cjs} +1 -1
- package/dist/BasicConnection-C-Cg2FJT.cjs.map +1 -0
- package/dist/{BasicConnection-DOSOFSsW.mjs → BasicConnection-CpwybcC9.mjs} +1 -1
- package/dist/BasicConnection-CpwybcC9.mjs.map +1 -0
- package/dist/{BasicConnection-CddnULuT.d.cts → BasicConnection-DIxtA7jK.d.mts} +3 -2
- package/dist/BasicConnection-DIxtA7jK.d.mts.map +1 -0
- package/dist/{BasicPublisher-afwuA4Xp.cjs → BasicPublisher-CXAVKxgq.cjs} +1 -1
- package/dist/BasicPublisher-CXAVKxgq.cjs.map +1 -0
- package/dist/{BasicPublisher-DCBxaTwC.d.mts → BasicPublisher-CpJFK2oS.d.mts} +5 -3
- package/dist/BasicPublisher-CpJFK2oS.d.mts.map +1 -0
- package/dist/{BasicPublisher-V5hELHG9.d.cts → BasicPublisher-D1q0a2xp.d.cts} +5 -3
- package/dist/BasicPublisher-D1q0a2xp.d.cts.map +1 -0
- package/dist/{BasicPublisher-CaX8GCUi.mjs → BasicPublisher-DogbeHAH.mjs} +1 -1
- package/dist/BasicPublisher-DogbeHAH.mjs.map +1 -0
- package/dist/{BasicSubscriber-BB3aKeph.d.mts → BasicSubscriber-6w0Af4DD.d.mts} +5 -3
- package/dist/BasicSubscriber-6w0Af4DD.d.mts.map +1 -0
- package/dist/{BasicSubscriber-DPpJNUUY.mjs → BasicSubscriber-BJSZN22M.mjs} +2 -4
- package/dist/BasicSubscriber-BJSZN22M.mjs.map +1 -0
- package/dist/{BasicSubscriber-DOwgFw5j.d.cts → BasicSubscriber-DXxQewjc.d.cts} +5 -3
- package/dist/BasicSubscriber-DXxQewjc.d.cts.map +1 -0
- package/dist/{BasicSubscriber-Ckf3BkxS.cjs → BasicSubscriber-mVJRMXhZ.cjs} +2 -4
- package/dist/BasicSubscriber-mVJRMXhZ.cjs.map +1 -0
- package/dist/{EventConnection-DZhn1Msl.d.cts → EventConnection-BaJRXdg7.d.cts} +2 -2
- package/dist/EventConnection-BaJRXdg7.d.cts.map +1 -0
- package/dist/EventConnection-ClLMoIUU.mjs.map +1 -1
- package/dist/EventConnection-F_N81SXu.cjs.map +1 -1
- package/dist/{EventConnection-DeXfLGom.d.mts → EventConnection-SOhtmxib.d.mts} +2 -2
- package/dist/EventConnection-SOhtmxib.d.mts.map +1 -0
- package/dist/EventConnection.d.cts +2 -2
- package/dist/EventConnection.d.mts +2 -2
- package/dist/{Publisher-C3m8JFXm.d.mts → Publisher-1CfcYRnm.d.mts} +4 -2
- package/dist/Publisher-1CfcYRnm.d.mts.map +1 -0
- package/dist/{Publisher-nXNVjL0e.d.cts → Publisher-BfNgvHwQ.d.cts} +4 -2
- package/dist/Publisher-BfNgvHwQ.d.cts.map +1 -0
- package/dist/Publisher-DS0aOh8r.mjs.map +1 -1
- package/dist/Publisher-ceu6OxCj.cjs.map +1 -1
- package/dist/Publisher.d.cts +2 -2
- package/dist/Publisher.d.mts +2 -2
- package/dist/{RabbitMQConnection-BN_GybOv.cjs → RabbitMQConnection-Blj9Lo05.cjs} +2 -2
- package/dist/RabbitMQConnection-Blj9Lo05.cjs.map +1 -0
- package/dist/{RabbitMQConnection-7cWp_-_Q.d.cts → RabbitMQConnection-Bm8VCI2R.d.cts} +3 -2
- package/dist/RabbitMQConnection-Bm8VCI2R.d.cts.map +1 -0
- package/dist/{RabbitMQConnection-C2HC7J7K.d.mts → RabbitMQConnection-Ck-ktCp_.d.mts} +3 -2
- package/dist/RabbitMQConnection-Ck-ktCp_.d.mts.map +1 -0
- package/dist/{RabbitMQConnection-eVOVS4Dl.mjs → RabbitMQConnection-Co7f5Xsx.mjs} +2 -2
- package/dist/RabbitMQConnection-Co7f5Xsx.mjs.map +1 -0
- package/dist/{RabbitMQPublisher-CSCn6gMA.cjs → RabbitMQPublisher--DL6GM6g.cjs} +1 -1
- package/dist/RabbitMQPublisher--DL6GM6g.cjs.map +1 -0
- package/dist/{RabbitMQPublisher-CpcbgrXj.d.cts → RabbitMQPublisher-COnxcWEZ.d.mts} +5 -3
- package/dist/RabbitMQPublisher-COnxcWEZ.d.mts.map +1 -0
- package/dist/{RabbitMQPublisher-BZX0edgL.mjs → RabbitMQPublisher-o_oVI3wr.mjs} +1 -1
- package/dist/RabbitMQPublisher-o_oVI3wr.mjs.map +1 -0
- package/dist/{RabbitMQPublisher-DDZi15Ro.d.mts → RabbitMQPublisher-qQT7-1-p.d.cts} +5 -3
- package/dist/RabbitMQPublisher-qQT7-1-p.d.cts.map +1 -0
- package/dist/{RabbitMQSubscriber-Cj7qLIi6.cjs → RabbitMQSubscriber-C8MYAihn.cjs} +2 -3
- package/dist/RabbitMQSubscriber-C8MYAihn.cjs.map +1 -0
- package/dist/{RabbitMQSubscriber-BJ9PTGny.d.cts → RabbitMQSubscriber-C_sZjDPU.d.mts} +5 -3
- package/dist/RabbitMQSubscriber-C_sZjDPU.d.mts.map +1 -0
- package/dist/{RabbitMQSubscriber-CIvIw8MG.d.mts → RabbitMQSubscriber-D12sssMb.d.cts} +5 -3
- package/dist/RabbitMQSubscriber-D12sssMb.d.cts.map +1 -0
- package/dist/{RabbitMQSubscriber-B5I-hBaT.mjs → RabbitMQSubscriber-DlGL0pC2.mjs} +2 -3
- package/dist/RabbitMQSubscriber-DlGL0pC2.mjs.map +1 -0
- package/dist/{SNSConnection-CAImaMM2.d.mts → SNSConnection-BDfQrVBO.d.cts} +3 -2
- package/dist/SNSConnection-BDfQrVBO.d.cts.map +1 -0
- package/dist/{SNSConnection-DVEE3XoC.mjs → SNSConnection-D7wCf9Si.mjs} +1 -1
- package/dist/SNSConnection-D7wCf9Si.mjs.map +1 -0
- package/dist/{SNSConnection-CZz_U56V.cjs → SNSConnection-DVsC_pbB.cjs} +1 -1
- package/dist/SNSConnection-DVsC_pbB.cjs.map +1 -0
- package/dist/{SNSConnection-Cqbr7-Ho.d.cts → SNSConnection-mHb10nQ6.d.mts} +3 -2
- package/dist/SNSConnection-mHb10nQ6.d.mts.map +1 -0
- package/dist/{SNSPublisher-DbWVH-g_.cjs → SNSPublisher-BoA8uLnw.cjs} +2 -3
- package/dist/SNSPublisher-BoA8uLnw.cjs.map +1 -0
- package/dist/{SNSPublisher-Dkhb4LU-.d.mts → SNSPublisher-CM7UAWtf.d.mts} +7 -6
- package/dist/SNSPublisher-CM7UAWtf.d.mts.map +1 -0
- package/dist/{SNSPublisher-Do-FMUyT.mjs → SNSPublisher-Drr4kHn6.mjs} +2 -3
- package/dist/SNSPublisher-Drr4kHn6.mjs.map +1 -0
- package/dist/{SNSPublisher-RVZFa7kL.d.cts → SNSPublisher-kpsSlGDn.d.cts} +7 -6
- package/dist/SNSPublisher-kpsSlGDn.d.cts.map +1 -0
- package/dist/{SNSSubscriber-e7eG48yJ.mjs → SNSSubscriber-CBIvQpqK.mjs} +5 -9
- package/dist/SNSSubscriber-CBIvQpqK.mjs.map +1 -0
- package/dist/{SNSSubscriber-DpEwQ8Tb.cjs → SNSSubscriber-CWiAJjpU.cjs} +5 -9
- package/dist/SNSSubscriber-CWiAJjpU.cjs.map +1 -0
- package/dist/{SNSSubscriber-B31JmkAE.d.mts → SNSSubscriber-DDB3--pm.d.cts} +4 -3
- package/dist/SNSSubscriber-DDB3--pm.d.cts.map +1 -0
- package/dist/{SNSSubscriber-k2UwKUxu.d.cts → SNSSubscriber-Dwo8391f.d.mts} +4 -3
- package/dist/SNSSubscriber-Dwo8391f.d.mts.map +1 -0
- package/dist/{SQSConnection-C5WFqZW7.d.mts → SQSConnection-B5Ep9Tma.d.cts} +3 -2
- package/dist/SQSConnection-B5Ep9Tma.d.cts.map +1 -0
- package/dist/{SQSConnection-geav2Rsn.d.cts → SQSConnection-BI_xOzyJ.d.mts} +3 -2
- package/dist/SQSConnection-BI_xOzyJ.d.mts.map +1 -0
- package/dist/{SQSConnection-DWYDtftQ.cjs → SQSConnection-BwNjUPr4.cjs} +1 -1
- package/dist/SQSConnection-BwNjUPr4.cjs.map +1 -0
- package/dist/{SQSConnection-BBlDWZLU.mjs → SQSConnection-Eleqqre3.mjs} +1 -1
- package/dist/SQSConnection-Eleqqre3.mjs.map +1 -0
- package/dist/{SQSPublisher-CdsayOLV.d.mts → SQSPublisher-BN1ds6SN.d.mts} +5 -3
- package/dist/SQSPublisher-BN1ds6SN.d.mts.map +1 -0
- package/dist/{SQSPublisher-Utb_FTe5.d.cts → SQSPublisher-DFTqwzRW.d.cts} +5 -3
- package/dist/SQSPublisher-DFTqwzRW.d.cts.map +1 -0
- package/dist/{SQSPublisher-B3lS2zbu.mjs → SQSPublisher-DG9o4ME3.mjs} +1 -1
- package/dist/SQSPublisher-DG9o4ME3.mjs.map +1 -0
- package/dist/{SQSPublisher-nzbSaXSH.cjs → SQSPublisher-Dq5353oZ.cjs} +1 -1
- package/dist/SQSPublisher-Dq5353oZ.cjs.map +1 -0
- package/dist/{SQSSubscriber-DcL9BbG1.cjs → SQSSubscriber-B4sRXVl6.cjs} +5 -12
- package/dist/SQSSubscriber-B4sRXVl6.cjs.map +1 -0
- package/dist/{SQSSubscriber-B6iL1EnX.d.cts → SQSSubscriber-BO2me_gs.d.cts} +4 -3
- package/dist/SQSSubscriber-BO2me_gs.d.cts.map +1 -0
- package/dist/{SQSSubscriber-84pFnW1z.mjs → SQSSubscriber-CVGhZ8Nr.mjs} +5 -12
- package/dist/SQSSubscriber-CVGhZ8Nr.mjs.map +1 -0
- package/dist/{SQSSubscriber-DBeE4XAR.d.mts → SQSSubscriber-FyZFfr2-.d.mts} +4 -3
- package/dist/SQSSubscriber-FyZFfr2-.d.mts.map +1 -0
- package/dist/Subscriber-Bd9hb_jp.mjs.map +1 -1
- package/dist/{Subscriber-Cff9EIpv.d.mts → Subscriber-BxT-KzFJ.d.mts} +4 -2
- package/dist/Subscriber-BxT-KzFJ.d.mts.map +1 -0
- package/dist/{Subscriber-CpAwcUzb.d.cts → Subscriber-DDD_4Nlx.d.cts} +4 -2
- package/dist/Subscriber-DDD_4Nlx.d.cts.map +1 -0
- package/dist/Subscriber-saVOWuMq.cjs.map +1 -1
- package/dist/Subscriber.d.cts +2 -2
- package/dist/Subscriber.d.mts +2 -2
- package/dist/basic/BasicConnection.cjs +1 -1
- package/dist/basic/BasicConnection.d.cts +2 -2
- package/dist/basic/BasicConnection.d.mts +2 -2
- package/dist/basic/BasicConnection.mjs +1 -1
- package/dist/basic/BasicPublisher.cjs +1 -1
- package/dist/basic/BasicPublisher.d.cts +3 -3
- package/dist/basic/BasicPublisher.d.mts +3 -3
- package/dist/basic/BasicPublisher.mjs +1 -1
- package/dist/basic/BasicSubscriber.cjs +1 -1
- package/dist/basic/BasicSubscriber.d.cts +3 -3
- package/dist/basic/BasicSubscriber.d.mts +3 -3
- package/dist/basic/BasicSubscriber.mjs +1 -1
- package/dist/basic/index.cjs +3 -3
- package/dist/basic/index.d.cts +4 -4
- package/dist/basic/index.d.mts +4 -4
- package/dist/basic/index.mjs +3 -3
- package/dist/index.d.cts +4 -4
- package/dist/index.d.mts +4 -4
- package/dist/rabbitmq/RabbitMQConnection.cjs +1 -1
- package/dist/rabbitmq/RabbitMQConnection.d.cts +2 -2
- package/dist/rabbitmq/RabbitMQConnection.d.mts +2 -2
- package/dist/rabbitmq/RabbitMQConnection.mjs +1 -1
- package/dist/rabbitmq/RabbitMQPublisher.cjs +1 -1
- package/dist/rabbitmq/RabbitMQPublisher.d.cts +3 -3
- package/dist/rabbitmq/RabbitMQPublisher.d.mts +3 -3
- package/dist/rabbitmq/RabbitMQPublisher.mjs +1 -1
- package/dist/rabbitmq/RabbitMQSubscriber.cjs +1 -1
- package/dist/rabbitmq/RabbitMQSubscriber.d.cts +3 -3
- package/dist/rabbitmq/RabbitMQSubscriber.d.mts +3 -3
- package/dist/rabbitmq/RabbitMQSubscriber.mjs +1 -1
- package/dist/rabbitmq/index.cjs +3 -3
- package/dist/rabbitmq/index.d.cts +4 -4
- package/dist/rabbitmq/index.d.mts +4 -4
- package/dist/rabbitmq/index.mjs +3 -3
- package/dist/sns/SNSConnection.cjs +1 -1
- package/dist/sns/SNSConnection.d.cts +2 -2
- package/dist/sns/SNSConnection.d.mts +2 -2
- package/dist/sns/SNSConnection.mjs +1 -1
- package/dist/sns/SNSPublisher.cjs +1 -1
- package/dist/sns/SNSPublisher.d.cts +3 -3
- package/dist/sns/SNSPublisher.d.mts +3 -3
- package/dist/sns/SNSPublisher.mjs +1 -1
- package/dist/sns/SNSSubscriber.cjs +3 -3
- package/dist/sns/SNSSubscriber.d.cts +3 -3
- package/dist/sns/SNSSubscriber.d.mts +3 -3
- package/dist/sns/SNSSubscriber.mjs +3 -3
- package/dist/sns/index.cjs +5 -5
- package/dist/sns/index.d.cts +4 -4
- package/dist/sns/index.d.mts +4 -4
- package/dist/sns/index.mjs +5 -5
- package/dist/sqs/SQSConnection.cjs +1 -1
- package/dist/sqs/SQSConnection.d.cts +2 -2
- package/dist/sqs/SQSConnection.d.mts +2 -2
- package/dist/sqs/SQSConnection.mjs +1 -1
- package/dist/sqs/SQSPublisher.cjs +1 -1
- package/dist/sqs/SQSPublisher.d.cts +3 -3
- package/dist/sqs/SQSPublisher.d.mts +3 -3
- package/dist/sqs/SQSPublisher.mjs +1 -1
- package/dist/sqs/SQSSubscriber.cjs +1 -1
- package/dist/sqs/SQSSubscriber.d.cts +3 -3
- package/dist/sqs/SQSSubscriber.d.mts +3 -3
- package/dist/sqs/SQSSubscriber.mjs +1 -1
- package/dist/sqs/index.cjs +3 -3
- package/dist/sqs/index.d.cts +4 -4
- package/dist/sqs/index.d.mts +4 -4
- package/dist/sqs/index.mjs +3 -3
- package/dist/types-B63qHVOG.mjs.map +1 -1
- package/dist/types-CvSMEO5z.cjs.map +1 -1
- package/dist/{types-D0g-o6wX.d.mts → types-DSVsPgKd.d.mts} +2 -1
- package/dist/types-DSVsPgKd.d.mts.map +1 -0
- package/dist/{types-DEGUg5BA.d.cts → types-Dmbp1U-6.d.cts} +2 -1
- package/dist/types-Dmbp1U-6.d.cts.map +1 -0
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +1 -1
- package/src/EventConnection.ts +31 -31
- package/src/Publisher.ts +78 -78
- package/src/Subscriber.ts +91 -91
- package/src/__tests__/EventConnection.spec.ts +42 -0
- package/src/__tests__/Publisher.spec.ts +96 -0
- package/src/__tests__/Subscriber.spec.ts +91 -23
- package/src/basic/BasicConnection.ts +35 -35
- package/src/basic/BasicPublisher.ts +8 -8
- package/src/basic/BasicSubscriber.ts +13 -16
- package/src/basic/__tests__/BasicSubscriber.spec.ts +116 -116
- package/src/index.ts +13 -13
- package/src/rabbitmq/RabbitMQConnection.ts +139 -139
- package/src/rabbitmq/RabbitMQPublisher.ts +48 -48
- package/src/rabbitmq/RabbitMQSubscriber.ts +100 -102
- package/src/rabbitmq/__tests__/RabbitMQPublisher.spec.ts +364 -364
- package/src/rabbitmq/__tests__/RabbitMQSubscriber.spec.ts +204 -204
- package/src/rabbitmq/index.ts +3 -3
- package/src/sns/SNSConnection.ts +76 -76
- package/src/sns/SNSPublisher.ts +54 -56
- package/src/sns/SNSSubscriber.ts +187 -191
- package/src/sns/__tests__/SNS-SQS-Integration.spec.ts +321 -321
- package/src/sns/__tests__/SNSPublisher.spec.ts +449 -0
- package/src/sns/__tests__/SNSSubscriber.spec.ts +527 -0
- package/src/sns/index.ts +3 -3
- package/src/sqs/SQSConnection.ts +75 -75
- package/src/sqs/SQSPublisher.ts +93 -93
- package/src/sqs/SQSSubscriber.ts +157 -165
- package/src/sqs/__tests__/SQSPublisher.spec.ts +178 -178
- package/src/sqs/index.ts +3 -3
- package/src/types.ts +28 -29
- package/tsconfig.json +9 -0
- package/tsdown.config.ts +1 -1
- package/dist/BasicConnection-Bz3F2rXA.cjs.map +0 -1
- package/dist/BasicConnection-DOSOFSsW.mjs.map +0 -1
- package/dist/BasicPublisher-CaX8GCUi.mjs.map +0 -1
- package/dist/BasicPublisher-afwuA4Xp.cjs.map +0 -1
- package/dist/BasicSubscriber-Ckf3BkxS.cjs.map +0 -1
- package/dist/BasicSubscriber-DPpJNUUY.mjs.map +0 -1
- package/dist/RabbitMQConnection-BN_GybOv.cjs.map +0 -1
- package/dist/RabbitMQConnection-eVOVS4Dl.mjs.map +0 -1
- package/dist/RabbitMQPublisher-BZX0edgL.mjs.map +0 -1
- package/dist/RabbitMQPublisher-CSCn6gMA.cjs.map +0 -1
- package/dist/RabbitMQSubscriber-B5I-hBaT.mjs.map +0 -1
- package/dist/RabbitMQSubscriber-Cj7qLIi6.cjs.map +0 -1
- package/dist/SNSConnection-CZz_U56V.cjs.map +0 -1
- package/dist/SNSConnection-DVEE3XoC.mjs.map +0 -1
- package/dist/SNSPublisher-DbWVH-g_.cjs.map +0 -1
- package/dist/SNSPublisher-Do-FMUyT.mjs.map +0 -1
- package/dist/SNSSubscriber-DpEwQ8Tb.cjs.map +0 -1
- package/dist/SNSSubscriber-e7eG48yJ.mjs.map +0 -1
- package/dist/SQSConnection-BBlDWZLU.mjs.map +0 -1
- package/dist/SQSConnection-DWYDtftQ.cjs.map +0 -1
- package/dist/SQSPublisher-B3lS2zbu.mjs.map +0 -1
- package/dist/SQSPublisher-nzbSaXSH.cjs.map +0 -1
- package/dist/SQSSubscriber-84pFnW1z.mjs.map +0 -1
- package/dist/SQSSubscriber-DcL9BbG1.cjs.map +0 -1
|
@@ -10,283 +10,283 @@ const RABBITMQ_URL = 'amqp://geekmidas:geekmidas@localhost:5672';
|
|
|
10
10
|
|
|
11
11
|
// Helper to generate unique exchange names
|
|
12
12
|
const uniqueExchange = () =>
|
|
13
|
-
|
|
13
|
+
`test-exchange-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
14
14
|
|
|
15
15
|
describe('RabbitMQSubscriber - Integration Tests', () => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
it('should receive published messages', async () => {
|
|
17
|
+
const testExchange = uniqueExchange();
|
|
18
|
+
const connection = new RabbitMQConnection({
|
|
19
|
+
url: RABBITMQ_URL,
|
|
20
|
+
exchange: testExchange,
|
|
21
|
+
});
|
|
22
|
+
await connection.connect();
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const publisher = new RabbitMQPublisher<TestMessage>(connection);
|
|
25
|
+
const subscriber = new RabbitMQSubscriber<TestMessage>(connection);
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
const receivedMessages: TestMessage[] = [];
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
await subscriber.subscribe(['user.created'], async (message) => {
|
|
30
|
+
receivedMessages.push(message);
|
|
31
|
+
});
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
// Wait a bit for consumer to be ready
|
|
34
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
await publisher.publish([
|
|
37
|
+
{ type: 'user.created', payload: { userId: '123' } },
|
|
38
|
+
]);
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
// Wait for message to be processed
|
|
41
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
expect(receivedMessages).toHaveLength(1);
|
|
44
|
+
expect(receivedMessages[0].payload.userId).toBe('123');
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
await connection.close();
|
|
47
|
+
});
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
it('should receive multiple messages', async () => {
|
|
50
|
+
const testExchange = uniqueExchange();
|
|
51
|
+
const connection = new RabbitMQConnection({
|
|
52
|
+
url: RABBITMQ_URL,
|
|
53
|
+
exchange: testExchange,
|
|
54
|
+
});
|
|
55
|
+
await connection.connect();
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
const publisher = new RabbitMQPublisher<TestMessage>(connection);
|
|
58
|
+
const subscriber = new RabbitMQSubscriber<TestMessage>(connection);
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
const receivedMessages: TestMessage[] = [];
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
await subscriber.subscribe(['user.created'], async (message) => {
|
|
63
|
+
receivedMessages.push(message);
|
|
64
|
+
});
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
await publisher.publish([
|
|
69
|
+
{ type: 'user.created', payload: { userId: '1' } },
|
|
70
|
+
{ type: 'user.created', payload: { userId: '2' } },
|
|
71
|
+
{ type: 'user.created', payload: { userId: '3' } },
|
|
72
|
+
]);
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
expect(receivedMessages).toHaveLength(3);
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
await connection.close();
|
|
79
|
+
});
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
81
|
+
it('should only receive subscribed message types', async () => {
|
|
82
|
+
const testExchange = uniqueExchange();
|
|
83
|
+
const connection = new RabbitMQConnection({
|
|
84
|
+
url: RABBITMQ_URL,
|
|
85
|
+
exchange: testExchange,
|
|
86
|
+
});
|
|
87
|
+
await connection.connect();
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
const publisher = new RabbitMQPublisher<TestMessage>(connection);
|
|
90
|
+
const subscriber = new RabbitMQSubscriber<TestMessage>(connection);
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
const receivedMessages: TestMessage[] = [];
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
// Only subscribe to user.created
|
|
95
|
+
await subscriber.subscribe(['user.created'], async (message) => {
|
|
96
|
+
receivedMessages.push(message);
|
|
97
|
+
});
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
101
|
+
await publisher.publish([
|
|
102
|
+
{ type: 'user.created', payload: { userId: '1' } },
|
|
103
|
+
{ type: 'user.updated', payload: { userId: '2' } },
|
|
104
|
+
{ type: 'user.created', payload: { userId: '3' } },
|
|
105
|
+
]);
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
expect(receivedMessages).toHaveLength(2);
|
|
110
|
+
expect(receivedMessages.every((m) => m.payload.userId !== '2')).toBe(true);
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
await connection.close();
|
|
113
|
+
});
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
115
|
+
it('should subscribe to multiple message types', async () => {
|
|
116
|
+
const testExchange = uniqueExchange();
|
|
117
|
+
const connection = new RabbitMQConnection({
|
|
118
|
+
url: RABBITMQ_URL,
|
|
119
|
+
exchange: testExchange,
|
|
120
|
+
});
|
|
121
|
+
await connection.connect();
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
const publisher = new RabbitMQPublisher<TestMessage>(connection);
|
|
124
|
+
const subscriber = new RabbitMQSubscriber<TestMessage>(connection);
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
const receivedMessages: TestMessage[] = [];
|
|
127
127
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
128
|
+
await subscriber.subscribe(
|
|
129
|
+
['user.created', 'user.updated'],
|
|
130
|
+
async (message) => {
|
|
131
|
+
receivedMessages.push(message);
|
|
132
|
+
},
|
|
133
|
+
);
|
|
134
134
|
|
|
135
|
-
|
|
135
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
136
136
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
137
|
+
await publisher.publish([
|
|
138
|
+
{ type: 'user.created', payload: { userId: '1' } },
|
|
139
|
+
{ type: 'user.updated', payload: { userId: '2' } },
|
|
140
|
+
{ type: 'user.created', payload: { userId: '3' } },
|
|
141
|
+
]);
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
144
144
|
|
|
145
|
-
|
|
145
|
+
expect(receivedMessages).toHaveLength(3);
|
|
146
146
|
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
await connection.close();
|
|
148
|
+
});
|
|
149
149
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
150
|
+
it('should handle message processing errors with nack', async () => {
|
|
151
|
+
const testExchange = uniqueExchange();
|
|
152
|
+
const connection = new RabbitMQConnection({
|
|
153
|
+
url: RABBITMQ_URL,
|
|
154
|
+
exchange: testExchange,
|
|
155
|
+
});
|
|
156
|
+
await connection.connect();
|
|
157
157
|
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
const publisher = new RabbitMQPublisher<TestMessage>(connection);
|
|
159
|
+
const subscriber = new RabbitMQSubscriber<TestMessage>(connection);
|
|
160
160
|
|
|
161
|
-
|
|
161
|
+
let processCount = 0;
|
|
162
162
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
163
|
+
await subscriber.subscribe(['user.created'], async (_message) => {
|
|
164
|
+
processCount++;
|
|
165
|
+
if (processCount === 1) {
|
|
166
|
+
// Fail first time
|
|
167
|
+
throw new Error('Processing error');
|
|
168
|
+
}
|
|
169
|
+
// Success on retry
|
|
170
|
+
});
|
|
171
171
|
|
|
172
|
-
|
|
172
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
173
173
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
174
|
+
await publisher.publish([
|
|
175
|
+
{ type: 'user.created', payload: { userId: '123' } },
|
|
176
|
+
]);
|
|
177
177
|
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
// Wait for initial processing and retry
|
|
179
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
180
180
|
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
// Should have been processed twice (initial + retry after nack)
|
|
182
|
+
expect(processCount).toBeGreaterThanOrEqual(2);
|
|
183
183
|
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
await connection.close();
|
|
185
|
+
});
|
|
186
186
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
it('should work with custom queue name', async () => {
|
|
188
|
+
const testExchange = uniqueExchange();
|
|
189
|
+
const queueName = `test-queue-${Date.now()}`;
|
|
190
190
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
191
|
+
const connection = new RabbitMQConnection({
|
|
192
|
+
url: RABBITMQ_URL,
|
|
193
|
+
exchange: testExchange,
|
|
194
|
+
});
|
|
195
|
+
await connection.connect();
|
|
196
196
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
197
|
+
const publisher = new RabbitMQPublisher<TestMessage>(connection);
|
|
198
|
+
const subscriber = new RabbitMQSubscriber<TestMessage>(connection, {
|
|
199
|
+
queueName,
|
|
200
|
+
});
|
|
201
201
|
|
|
202
|
-
|
|
202
|
+
const receivedMessages: TestMessage[] = [];
|
|
203
203
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
await subscriber.subscribe(['user.created'], async (message) => {
|
|
205
|
+
receivedMessages.push(message);
|
|
206
|
+
});
|
|
207
207
|
|
|
208
|
-
|
|
208
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
209
209
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
210
|
+
await publisher.publish([
|
|
211
|
+
{ type: 'user.created', payload: { userId: '123' } },
|
|
212
|
+
]);
|
|
213
213
|
|
|
214
|
-
|
|
214
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
215
215
|
|
|
216
|
-
|
|
216
|
+
expect(receivedMessages).toHaveLength(1);
|
|
217
217
|
|
|
218
|
-
|
|
219
|
-
|
|
218
|
+
await connection.close();
|
|
219
|
+
});
|
|
220
220
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
221
|
+
it('should work with prefetch limit', async () => {
|
|
222
|
+
const testExchange = uniqueExchange();
|
|
223
|
+
const connection = new RabbitMQConnection({
|
|
224
|
+
url: RABBITMQ_URL,
|
|
225
|
+
exchange: testExchange,
|
|
226
|
+
});
|
|
227
|
+
await connection.connect();
|
|
228
228
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
229
|
+
const publisher = new RabbitMQPublisher<TestMessage>(connection);
|
|
230
|
+
const subscriber = new RabbitMQSubscriber<TestMessage>(connection, {
|
|
231
|
+
prefetch: 1,
|
|
232
|
+
});
|
|
233
233
|
|
|
234
|
-
|
|
234
|
+
const receivedMessages: TestMessage[] = [];
|
|
235
235
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
236
|
+
await subscriber.subscribe(['user.created'], async (message) => {
|
|
237
|
+
receivedMessages.push(message);
|
|
238
|
+
// Slow processing
|
|
239
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
240
|
+
});
|
|
241
241
|
|
|
242
|
-
|
|
242
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
243
243
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
244
|
+
// Publish multiple messages
|
|
245
|
+
await publisher.publish([
|
|
246
|
+
{ type: 'user.created', payload: { userId: '1' } },
|
|
247
|
+
{ type: 'user.created', payload: { userId: '2' } },
|
|
248
|
+
{ type: 'user.created', payload: { userId: '3' } },
|
|
249
|
+
]);
|
|
250
250
|
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
// Wait for all to be processed
|
|
252
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
253
253
|
|
|
254
|
-
|
|
254
|
+
expect(receivedMessages).toHaveLength(3);
|
|
255
255
|
|
|
256
|
-
|
|
257
|
-
|
|
256
|
+
await connection.close();
|
|
257
|
+
});
|
|
258
258
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
259
|
+
it('should work with fromConnectionString', async () => {
|
|
260
|
+
const testExchange = uniqueExchange();
|
|
261
|
+
const subscriber =
|
|
262
|
+
await RabbitMQSubscriber.fromConnectionString<TestMessage>(
|
|
263
|
+
`rabbitmq://geekmidas:geekmidas@localhost:5672?exchange=${testExchange}`,
|
|
264
|
+
);
|
|
265
265
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
266
|
+
const connection = new RabbitMQConnection({
|
|
267
|
+
url: RABBITMQ_URL,
|
|
268
|
+
exchange: testExchange,
|
|
269
|
+
});
|
|
270
|
+
await connection.connect();
|
|
271
271
|
|
|
272
|
-
|
|
272
|
+
const publisher = new RabbitMQPublisher<TestMessage>(connection);
|
|
273
273
|
|
|
274
|
-
|
|
274
|
+
const receivedMessages: TestMessage[] = [];
|
|
275
275
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
276
|
+
await subscriber.subscribe(['user.created'], async (message) => {
|
|
277
|
+
receivedMessages.push(message);
|
|
278
|
+
});
|
|
279
279
|
|
|
280
|
-
|
|
280
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
281
281
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
282
|
+
await publisher.publish([
|
|
283
|
+
{ type: 'user.created', payload: { userId: '123' } },
|
|
284
|
+
]);
|
|
285
285
|
|
|
286
|
-
|
|
286
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
287
287
|
|
|
288
|
-
|
|
288
|
+
expect(receivedMessages).toHaveLength(1);
|
|
289
289
|
|
|
290
|
-
|
|
291
|
-
|
|
290
|
+
await connection.close();
|
|
291
|
+
});
|
|
292
292
|
});
|
package/src/rabbitmq/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { RabbitMQConnection } from './RabbitMQConnection';
|
|
2
1
|
export type { RabbitMQConnectionConfig } from './RabbitMQConnection';
|
|
3
|
-
export {
|
|
2
|
+
export { RabbitMQConnection } from './RabbitMQConnection';
|
|
4
3
|
export type { RabbitMQPublisherOptions } from './RabbitMQPublisher';
|
|
5
|
-
export {
|
|
4
|
+
export { RabbitMQPublisher } from './RabbitMQPublisher';
|
|
6
5
|
export type { RabbitMQSubscriberOptions } from './RabbitMQSubscriber';
|
|
6
|
+
export { RabbitMQSubscriber } from './RabbitMQSubscriber';
|