@makebelieve21213-packages/rabbitmq-client 1.0.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/LICENSE +21 -0
- package/README.md +461 -0
- package/dist/__tests__/__mocks__/logger.d.ts +10 -0
- package/dist/__tests__/__mocks__/logger.d.ts.map +1 -0
- package/dist/__tests__/__mocks__/logger.js +11 -0
- package/dist/__tests__/__mocks__/logger.js.map +1 -0
- package/dist/__tests__/__mocks__/redis-client.d.ts +9 -0
- package/dist/__tests__/__mocks__/redis-client.d.ts.map +1 -0
- package/dist/__tests__/__mocks__/redis-client.js +10 -0
- package/dist/__tests__/__mocks__/redis-client.js.map +1 -0
- package/dist/__tests__/connect-rabbitmq-receiver.spec.d.ts +2 -0
- package/dist/__tests__/connect-rabbitmq-receiver.spec.d.ts.map +1 -0
- package/dist/__tests__/connect-rabbitmq-receiver.spec.js +206 -0
- package/dist/__tests__/connect-rabbitmq-receiver.spec.js.map +1 -0
- package/dist/__tests__/connect-rabbitmq-receivers.spec.d.ts +2 -0
- package/dist/__tests__/connect-rabbitmq-receivers.spec.d.ts.map +1 -0
- package/dist/__tests__/connect-rabbitmq-receivers.spec.js +139 -0
- package/dist/__tests__/connect-rabbitmq-receivers.spec.js.map +1 -0
- package/dist/__tests__/index.spec.d.ts +2 -0
- package/dist/__tests__/index.spec.d.ts.map +1 -0
- package/dist/__tests__/index.spec.js +206 -0
- package/dist/__tests__/index.spec.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +15 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/test-types.d.ts +52 -0
- package/dist/__tests__/test-types.d.ts.map +1 -0
- package/dist/__tests__/test-types.js +2 -0
- package/dist/__tests__/test-types.js.map +1 -0
- package/dist/config/__tests__/factories.spec.d.ts +2 -0
- package/dist/config/__tests__/factories.spec.d.ts.map +1 -0
- package/dist/config/__tests__/factories.spec.js +168 -0
- package/dist/config/__tests__/factories.spec.js.map +1 -0
- package/dist/config/factories.d.ts +23 -0
- package/dist/config/factories.d.ts.map +1 -0
- package/dist/config/factories.js +123 -0
- package/dist/config/factories.js.map +1 -0
- package/dist/connect-rabbitmq-receiver.d.ts +8 -0
- package/dist/connect-rabbitmq-receiver.d.ts.map +1 -0
- package/dist/connect-rabbitmq-receiver.js +49 -0
- package/dist/connect-rabbitmq-receiver.js.map +1 -0
- package/dist/connect-rabbitmq-receivers.d.ts +8 -0
- package/dist/connect-rabbitmq-receivers.d.ts.map +1 -0
- package/dist/connect-rabbitmq-receivers.js +18 -0
- package/dist/connect-rabbitmq-receivers.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/__tests__/rabbitmq.interceptor.spec.d.ts +2 -0
- package/dist/interceptors/__tests__/rabbitmq.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptors/__tests__/rabbitmq.interceptor.spec.js +647 -0
- package/dist/interceptors/__tests__/rabbitmq.interceptor.spec.js.map +1 -0
- package/dist/interceptors/rabbitmq.interceptor.d.ts +18 -0
- package/dist/interceptors/rabbitmq.interceptor.d.ts.map +1 -0
- package/dist/interceptors/rabbitmq.interceptor.js +107 -0
- package/dist/interceptors/rabbitmq.interceptor.js.map +1 -0
- package/dist/main/__tests__/rabbitmq.module.spec.d.ts +2 -0
- package/dist/main/__tests__/rabbitmq.module.spec.d.ts.map +1 -0
- package/dist/main/__tests__/rabbitmq.module.spec.js +266 -0
- package/dist/main/__tests__/rabbitmq.module.spec.js.map +1 -0
- package/dist/main/__tests__/rabbitmq.service.spec.d.ts +2 -0
- package/dist/main/__tests__/rabbitmq.service.spec.d.ts.map +1 -0
- package/dist/main/__tests__/rabbitmq.service.spec.js +349 -0
- package/dist/main/__tests__/rabbitmq.service.spec.js.map +1 -0
- package/dist/main/rabbitmq.module.d.ts +10 -0
- package/dist/main/rabbitmq.module.d.ts.map +1 -0
- package/dist/main/rabbitmq.module.js +51 -0
- package/dist/main/rabbitmq.module.js.map +1 -0
- package/dist/main/rabbitmq.service.d.ts +26 -0
- package/dist/main/rabbitmq.service.d.ts.map +1 -0
- package/dist/main/rabbitmq.service.js +100 -0
- package/dist/main/rabbitmq.service.js.map +1 -0
- package/dist/types/base.config.d.ts +15 -0
- package/dist/types/base.config.d.ts.map +1 -0
- package/dist/types/base.config.js +2 -0
- package/dist/types/base.config.js.map +1 -0
- package/dist/types/idempotent-message.d.ts +6 -0
- package/dist/types/idempotent-message.d.ts.map +1 -0
- package/dist/types/idempotent-message.js +2 -0
- package/dist/types/idempotent-message.js.map +1 -0
- package/dist/types/message-with-correlation-id.d.ts +10 -0
- package/dist/types/message-with-correlation-id.d.ts.map +1 -0
- package/dist/types/message-with-correlation-id.js +2 -0
- package/dist/types/message-with-correlation-id.js.map +1 -0
- package/dist/types/rabbitmq-config-dlx.d.ts +4 -0
- package/dist/types/rabbitmq-config-dlx.d.ts.map +1 -0
- package/dist/types/rabbitmq-config-dlx.js +2 -0
- package/dist/types/rabbitmq-config-dlx.js.map +1 -0
- package/dist/types/rabbitmq-config-receiver.d.ts +15 -0
- package/dist/types/rabbitmq-config-receiver.d.ts.map +1 -0
- package/dist/types/rabbitmq-config-receiver.js +2 -0
- package/dist/types/rabbitmq-config-receiver.js.map +1 -0
- package/dist/types/rabbitmq-config-retry.d.ts +13 -0
- package/dist/types/rabbitmq-config-retry.d.ts.map +1 -0
- package/dist/types/rabbitmq-config-retry.js +2 -0
- package/dist/types/rabbitmq-config-retry.js.map +1 -0
- package/dist/types/rabbitmq-config-sender.d.ts +14 -0
- package/dist/types/rabbitmq-config-sender.d.ts.map +1 -0
- package/dist/types/rabbitmq-config-sender.js +2 -0
- package/dist/types/rabbitmq-config-sender.js.map +1 -0
- package/dist/types/rabbitmq-module-options.d.ts +17 -0
- package/dist/types/rabbitmq-module-options.d.ts.map +1 -0
- package/dist/types/rabbitmq-module-options.js +2 -0
- package/dist/types/rabbitmq-module-options.js.map +1 -0
- package/dist/types/rabbitmq-receiver-options.d.ts +18 -0
- package/dist/types/rabbitmq-receiver-options.d.ts.map +1 -0
- package/dist/types/rabbitmq-receiver-options.js +2 -0
- package/dist/types/rabbitmq-receiver-options.js.map +1 -0
- package/dist/types/rabbitmq-receiver-subscription.d.ts +19 -0
- package/dist/types/rabbitmq-receiver-subscription.d.ts.map +1 -0
- package/dist/types/rabbitmq-receiver-subscription.js +2 -0
- package/dist/types/rabbitmq-receiver-subscription.js.map +1 -0
- package/dist/types/rabbitmq-receivers-config.d.ts +14 -0
- package/dist/types/rabbitmq-receivers-config.d.ts.map +1 -0
- package/dist/types/rabbitmq-receivers-config.js +2 -0
- package/dist/types/rabbitmq-receivers-config.js.map +1 -0
- package/dist/types/rabbitmq-sender-options.d.ts +10 -0
- package/dist/types/rabbitmq-sender-options.d.ts.map +1 -0
- package/dist/types/rabbitmq-sender-options.js +2 -0
- package/dist/types/rabbitmq-sender-options.js.map +1 -0
- package/dist/types/routing-keys.d.ts +24 -0
- package/dist/types/routing-keys.d.ts.map +1 -0
- package/dist/types/routing-keys.js +29 -0
- package/dist/types/routing-keys.js.map +1 -0
- package/dist/utils/__tests__/injections.spec.d.ts +2 -0
- package/dist/utils/__tests__/injections.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/injections.spec.js +174 -0
- package/dist/utils/__tests__/injections.spec.js.map +1 -0
- package/dist/utils/injections.d.ts +2 -0
- package/dist/utils/injections.d.ts.map +1 -0
- package/dist/utils/injections.js +2 -0
- package/dist/utils/injections.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import { LoggerService } from "@makebelieve21213-packages/logger";
|
|
2
|
+
import { ConfigService } from "@nestjs/config";
|
|
3
|
+
import { Test } from "@nestjs/testing";
|
|
4
|
+
import { lastValueFrom, of, throwError } from "rxjs";
|
|
5
|
+
import { createSenderConfig } from "../../config/factories.js";
|
|
6
|
+
import RabbitMQService from "../../main/rabbitmq.service.js";
|
|
7
|
+
import { ROUTING_KEYS } from "../../types/routing-keys.js";
|
|
8
|
+
import { RABBITMQ_SENDER_SERVICE } from "../../utils/injections.js";
|
|
9
|
+
// Мокаем модуль lastValueFrom из rxjs
|
|
10
|
+
jest.mock("rxjs", () => ({
|
|
11
|
+
...jest.requireActual("rxjs"),
|
|
12
|
+
lastValueFrom: jest.fn(),
|
|
13
|
+
}));
|
|
14
|
+
// Мокаем createSenderConfig
|
|
15
|
+
jest.mock("src/config/factories", () => ({
|
|
16
|
+
createSenderConfig: jest.fn(),
|
|
17
|
+
}));
|
|
18
|
+
const mockLastValueFrom = lastValueFrom;
|
|
19
|
+
const mockCreateSenderConfig = createSenderConfig;
|
|
20
|
+
describe("RabbitMQService", () => {
|
|
21
|
+
let service;
|
|
22
|
+
let clientProxy;
|
|
23
|
+
let configService;
|
|
24
|
+
let loggerService;
|
|
25
|
+
const mockSenderOptions = {
|
|
26
|
+
url: "amqp://localhost:5672",
|
|
27
|
+
exchange: "test_exchange",
|
|
28
|
+
exchangeType: "topic",
|
|
29
|
+
};
|
|
30
|
+
const mockRoutingKeys = {
|
|
31
|
+
[ROUTING_KEYS.TOKENS_FETCH_ALL]: ROUTING_KEYS.TOKENS_FETCH_ALL,
|
|
32
|
+
[ROUTING_KEYS.TOKENS_FETCH_DETAILS_ETHEREUM]: ROUTING_KEYS.TOKENS_FETCH_DETAILS_ETHEREUM,
|
|
33
|
+
[ROUTING_KEYS.TOKENS_FETCH_DETAILS_NFT]: ROUTING_KEYS.TOKENS_FETCH_DETAILS_NFT,
|
|
34
|
+
[ROUTING_KEYS.TOKENS_DEPLOY_ETHEREUM]: ROUTING_KEYS.TOKENS_DEPLOY_ETHEREUM,
|
|
35
|
+
[ROUTING_KEYS.TOKENS_DEPLOY_NFT]: ROUTING_KEYS.TOKENS_DEPLOY_NFT,
|
|
36
|
+
[ROUTING_KEYS.ANALYTICS_GLOBAL]: ROUTING_KEYS.ANALYTICS_GLOBAL,
|
|
37
|
+
[ROUTING_KEYS.ANALYTICS_TOTAL_MARKET_CHART]: ROUTING_KEYS.ANALYTICS_TOTAL_MARKET_CHART,
|
|
38
|
+
[ROUTING_KEYS.ANALYTICS_MARKET_CHART]: ROUTING_KEYS.ANALYTICS_MARKET_CHART,
|
|
39
|
+
[ROUTING_KEYS.ANALYTICS_DOMINANCE_CHART]: ROUTING_KEYS.ANALYTICS_DOMINANCE_CHART,
|
|
40
|
+
[ROUTING_KEYS.ANALYTICS_VOLUME_CHART]: ROUTING_KEYS.ANALYTICS_VOLUME_CHART,
|
|
41
|
+
[ROUTING_KEYS.ANALYTICS_TOP_VOLUME_LEADERS]: ROUTING_KEYS.ANALYTICS_TOP_VOLUME_LEADERS,
|
|
42
|
+
[ROUTING_KEYS.ANALYTICS_TRENDING]: ROUTING_KEYS.ANALYTICS_TRENDING,
|
|
43
|
+
[ROUTING_KEYS.ANALYTICS_COINS_TABLE]: ROUTING_KEYS.ANALYTICS_COINS_TABLE,
|
|
44
|
+
[ROUTING_KEYS.ANALYTICS_UPDATE_GLOBAL]: ROUTING_KEYS.ANALYTICS_UPDATE_GLOBAL,
|
|
45
|
+
[ROUTING_KEYS.ANALYTICS_UPDATE_TOTAL_MARKET_CHART]: ROUTING_KEYS.ANALYTICS_UPDATE_TOTAL_MARKET_CHART,
|
|
46
|
+
[ROUTING_KEYS.ANALYTICS_UPDATE_MARKET_CHART]: ROUTING_KEYS.ANALYTICS_UPDATE_MARKET_CHART,
|
|
47
|
+
[ROUTING_KEYS.ANALYTICS_UPDATE_DOMINANCE_CHART]: ROUTING_KEYS.ANALYTICS_UPDATE_DOMINANCE_CHART,
|
|
48
|
+
[ROUTING_KEYS.ANALYTICS_UPDATE_VOLUME_CHART]: ROUTING_KEYS.ANALYTICS_UPDATE_VOLUME_CHART,
|
|
49
|
+
[ROUTING_KEYS.ANALYTICS_UPDATE_TOP_VOLUME_LEADERS]: ROUTING_KEYS.ANALYTICS_UPDATE_TOP_VOLUME_LEADERS,
|
|
50
|
+
[ROUTING_KEYS.ANALYTICS_UPDATE_TRENDING]: ROUTING_KEYS.ANALYTICS_UPDATE_TRENDING,
|
|
51
|
+
[ROUTING_KEYS.ANALYTICS_UPDATE_COINS_TABLE]: ROUTING_KEYS.ANALYTICS_UPDATE_COINS_TABLE,
|
|
52
|
+
};
|
|
53
|
+
beforeEach(async () => {
|
|
54
|
+
jest.clearAllMocks();
|
|
55
|
+
// Создаем моки для всех зависимостей
|
|
56
|
+
clientProxy = {
|
|
57
|
+
connect: jest.fn().mockResolvedValue(undefined),
|
|
58
|
+
close: jest.fn().mockResolvedValue(undefined),
|
|
59
|
+
emit: jest.fn().mockReturnValue(of(undefined)),
|
|
60
|
+
send: jest.fn().mockReturnValue(of({})),
|
|
61
|
+
};
|
|
62
|
+
configService = {
|
|
63
|
+
get: jest.fn(),
|
|
64
|
+
};
|
|
65
|
+
loggerService = {
|
|
66
|
+
setContext: jest.fn(),
|
|
67
|
+
log: jest.fn(),
|
|
68
|
+
info: jest.fn(),
|
|
69
|
+
error: jest.fn(),
|
|
70
|
+
warn: jest.fn(),
|
|
71
|
+
};
|
|
72
|
+
// Настраиваем мок для ConfigService
|
|
73
|
+
configService.get.mockImplementation((key) => {
|
|
74
|
+
if (key === "rabbitmqSender") {
|
|
75
|
+
return mockSenderOptions;
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
});
|
|
79
|
+
// Настраиваем мок для createSenderConfig
|
|
80
|
+
mockCreateSenderConfig.mockReturnValue({
|
|
81
|
+
transport: {},
|
|
82
|
+
options: {},
|
|
83
|
+
routingKeys: mockRoutingKeys,
|
|
84
|
+
});
|
|
85
|
+
const module = await Test.createTestingModule({
|
|
86
|
+
providers: [
|
|
87
|
+
RabbitMQService,
|
|
88
|
+
{
|
|
89
|
+
provide: RABBITMQ_SENDER_SERVICE,
|
|
90
|
+
useValue: clientProxy,
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
provide: ConfigService,
|
|
94
|
+
useValue: configService,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
provide: LoggerService,
|
|
98
|
+
useValue: loggerService,
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
}).compile();
|
|
102
|
+
service = module.get(RabbitMQService);
|
|
103
|
+
});
|
|
104
|
+
describe("конструктор", () => {
|
|
105
|
+
it("должен инициализировать сервис с правильными зависимостями", () => {
|
|
106
|
+
expect(service).toBeDefined();
|
|
107
|
+
expect(configService.get).toHaveBeenCalledWith("rabbitmqSender");
|
|
108
|
+
expect(loggerService.setContext).toHaveBeenCalledWith("RabbitMQService");
|
|
109
|
+
expect(mockCreateSenderConfig).toHaveBeenCalledWith(mockSenderOptions);
|
|
110
|
+
});
|
|
111
|
+
it("должен вычислить конфигурацию динамически через createSenderConfig", () => {
|
|
112
|
+
expect(mockCreateSenderConfig).toHaveBeenCalledWith(mockSenderOptions);
|
|
113
|
+
expect(loggerService.log).toHaveBeenCalledWith(expect.stringContaining("RabbitMQ routing keys initialized"));
|
|
114
|
+
});
|
|
115
|
+
it("должен использовать routing keys из вычисленной конфигурации", () => {
|
|
116
|
+
const testData = { test: "data" };
|
|
117
|
+
service.fireAndForget(ROUTING_KEYS.TOKENS_FETCH_ALL, testData);
|
|
118
|
+
expect(clientProxy.emit).toHaveBeenCalledWith(ROUTING_KEYS.TOKENS_FETCH_ALL, testData);
|
|
119
|
+
});
|
|
120
|
+
it("должен правильно инициализировать все параметры конструктора", () => {
|
|
121
|
+
expect(service).toBeDefined();
|
|
122
|
+
expect(clientProxy).toBeDefined();
|
|
123
|
+
expect(configService).toBeDefined();
|
|
124
|
+
});
|
|
125
|
+
it("должен выбросить ошибку если senderOptions не найдены в конфигурации", () => {
|
|
126
|
+
// Создаем новый ConfigService который возвращает undefined для rabbitmqSender
|
|
127
|
+
const emptyConfigService = {
|
|
128
|
+
get: jest.fn().mockReturnValue(undefined),
|
|
129
|
+
};
|
|
130
|
+
// Ошибка выбрасывается в конструкторе, поэтому нужно использовать try-catch
|
|
131
|
+
expect(() => {
|
|
132
|
+
new RabbitMQService(clientProxy, emptyConfigService, loggerService);
|
|
133
|
+
}).toThrow("RabbitMQ sender options not found in configuration");
|
|
134
|
+
});
|
|
135
|
+
it("должен использовать client и configService параметры конструктора", async () => {
|
|
136
|
+
// Создаем новые моки для явной проверки использования параметров
|
|
137
|
+
const testClientProxy = {
|
|
138
|
+
connect: jest.fn().mockResolvedValue(undefined),
|
|
139
|
+
close: jest.fn().mockResolvedValue(undefined),
|
|
140
|
+
emit: jest.fn().mockReturnValue(of(undefined)),
|
|
141
|
+
send: jest.fn().mockReturnValue(of({})),
|
|
142
|
+
};
|
|
143
|
+
const testConfigService = {
|
|
144
|
+
get: jest.fn(),
|
|
145
|
+
};
|
|
146
|
+
const testLoggerService = {
|
|
147
|
+
setContext: jest.fn(),
|
|
148
|
+
log: jest.fn(),
|
|
149
|
+
info: jest.fn(),
|
|
150
|
+
error: jest.fn(),
|
|
151
|
+
warn: jest.fn(),
|
|
152
|
+
};
|
|
153
|
+
// Настраиваем мок для ConfigService
|
|
154
|
+
testConfigService.get.mockImplementation((key) => {
|
|
155
|
+
if (key === "rabbitmqSender") {
|
|
156
|
+
return mockSenderOptions;
|
|
157
|
+
}
|
|
158
|
+
return undefined;
|
|
159
|
+
});
|
|
160
|
+
// Настраиваем мок для createSenderConfig
|
|
161
|
+
mockCreateSenderConfig.mockReturnValue({
|
|
162
|
+
transport: {},
|
|
163
|
+
options: {},
|
|
164
|
+
routingKeys: mockRoutingKeys,
|
|
165
|
+
});
|
|
166
|
+
// Создаем новый экземпляр сервиса с тестовыми зависимостями
|
|
167
|
+
const testService = new RabbitMQService(testClientProxy, testConfigService, testLoggerService);
|
|
168
|
+
// Проверяем, что configService был использован в конструкторе
|
|
169
|
+
expect(testConfigService.get).toHaveBeenCalledWith("rabbitmqSender");
|
|
170
|
+
// Проверяем, что client используется через вызов onModuleInit
|
|
171
|
+
await testService.onModuleInit();
|
|
172
|
+
expect(testClientProxy.connect).toHaveBeenCalled();
|
|
173
|
+
// Проверяем, что client используется через вызов fireAndForget
|
|
174
|
+
const testData = { test: "data" };
|
|
175
|
+
testService.fireAndForget(ROUTING_KEYS.TOKENS_FETCH_ALL, testData);
|
|
176
|
+
expect(testClientProxy.emit).toHaveBeenCalledWith(ROUTING_KEYS.TOKENS_FETCH_ALL, testData);
|
|
177
|
+
// Проверяем, что client используется через вызов publish
|
|
178
|
+
const observable = of({ result: "success" });
|
|
179
|
+
testClientProxy.send.mockReturnValue(observable);
|
|
180
|
+
mockLastValueFrom.mockResolvedValue({ result: "success" });
|
|
181
|
+
await testService.publish(ROUTING_KEYS.TOKENS_FETCH_DETAILS_ETHEREUM, testData);
|
|
182
|
+
expect(testClientProxy.send).toHaveBeenCalled();
|
|
183
|
+
// Проверяем, что client используется через вызов onModuleDestroy
|
|
184
|
+
await testService.onModuleDestroy();
|
|
185
|
+
expect(testClientProxy.close).toHaveBeenCalled();
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe("onModuleInit", () => {
|
|
189
|
+
it("должен подключиться к RabbitMQ и залогировать сообщение", async () => {
|
|
190
|
+
clientProxy.connect.mockResolvedValue(undefined);
|
|
191
|
+
await service.onModuleInit();
|
|
192
|
+
expect(clientProxy.connect).toHaveBeenCalled();
|
|
193
|
+
expect(loggerService.log).toHaveBeenCalledWith("RabbitMQ connected");
|
|
194
|
+
});
|
|
195
|
+
it("должен передать ошибку при неудачном подключении", async () => {
|
|
196
|
+
const error = new Error("Connection failed");
|
|
197
|
+
clientProxy.connect.mockRejectedValue(error);
|
|
198
|
+
await expect(service.onModuleInit()).rejects.toThrow("Connection failed");
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
describe("onModuleDestroy", () => {
|
|
202
|
+
it("должен отключиться от RabbitMQ и залогировать сообщение", async () => {
|
|
203
|
+
clientProxy.close.mockResolvedValue(undefined);
|
|
204
|
+
await service.onModuleDestroy();
|
|
205
|
+
expect(clientProxy.close).toHaveBeenCalled();
|
|
206
|
+
expect(loggerService.log).toHaveBeenCalledWith("RabbitMQ disconnected");
|
|
207
|
+
});
|
|
208
|
+
it("должен передать ошибку при неудачном отключении", async () => {
|
|
209
|
+
const error = new Error("Disconnect failed");
|
|
210
|
+
clientProxy.close.mockRejectedValue(error);
|
|
211
|
+
await expect(service.onModuleDestroy()).rejects.toThrow("Disconnect failed");
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
describe("fireAndForget", () => {
|
|
215
|
+
it("должен отправить сообщение без ожидания ответа", () => {
|
|
216
|
+
const testData = { test: "data" };
|
|
217
|
+
const routingKey = ROUTING_KEYS.TOKENS_FETCH_ALL;
|
|
218
|
+
service.fireAndForget(routingKey, testData);
|
|
219
|
+
expect(loggerService.log).toHaveBeenCalledWith(`fireAndForget [routingKey=${routingKey}, data=${JSON.stringify(testData)}]`);
|
|
220
|
+
expect(clientProxy.emit).toHaveBeenCalledWith(routingKey, testData);
|
|
221
|
+
});
|
|
222
|
+
it("должен корректно обработать пустые данные", () => {
|
|
223
|
+
const testData = {};
|
|
224
|
+
const routingKey = ROUTING_KEYS.ANALYTICS_GLOBAL;
|
|
225
|
+
service.fireAndForget(routingKey, testData);
|
|
226
|
+
expect(loggerService.log).toHaveBeenCalledWith(`fireAndForget [routingKey=${routingKey}, data=${JSON.stringify(testData)}]`);
|
|
227
|
+
expect(clientProxy.emit).toHaveBeenCalledWith(routingKey, testData);
|
|
228
|
+
});
|
|
229
|
+
it("должен корректно обработать сложные объекты", () => {
|
|
230
|
+
const testData = {
|
|
231
|
+
nested: { value: 123 },
|
|
232
|
+
array: [1, 2, 3],
|
|
233
|
+
boolean: true,
|
|
234
|
+
};
|
|
235
|
+
const routingKey = ROUTING_KEYS.TOKENS_DEPLOY_ETHEREUM;
|
|
236
|
+
service.fireAndForget(routingKey, testData);
|
|
237
|
+
expect(loggerService.log).toHaveBeenCalledWith(`fireAndForget [routingKey=${routingKey}, data=${JSON.stringify(testData)}]`);
|
|
238
|
+
expect(clientProxy.emit).toHaveBeenCalledWith(routingKey, testData);
|
|
239
|
+
});
|
|
240
|
+
it("должен обработать ошибку отправки через subscribe", () => {
|
|
241
|
+
const testData = { test: "data" };
|
|
242
|
+
const routingKey = ROUTING_KEYS.TOKENS_FETCH_ALL;
|
|
243
|
+
const error = new Error("Emit failed");
|
|
244
|
+
clientProxy.emit.mockReturnValue(throwError(() => error));
|
|
245
|
+
service.fireAndForget(routingKey, testData);
|
|
246
|
+
expect(loggerService.log).toHaveBeenCalled();
|
|
247
|
+
expect(clientProxy.emit).toHaveBeenCalledWith(routingKey, testData);
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
describe("publish", () => {
|
|
251
|
+
it("должен отправить сообщение с correlationId и вернуть ответ", async () => {
|
|
252
|
+
const testData = { input: "test" };
|
|
253
|
+
const expectedResponse = { output: "response" };
|
|
254
|
+
const routingKey = ROUTING_KEYS.TOKENS_FETCH_DETAILS_ETHEREUM;
|
|
255
|
+
const observable = of(expectedResponse);
|
|
256
|
+
clientProxy.send.mockReturnValue(observable);
|
|
257
|
+
mockLastValueFrom.mockResolvedValue(expectedResponse);
|
|
258
|
+
const result = await service.publish(routingKey, testData);
|
|
259
|
+
expect(loggerService.log).toHaveBeenCalledWith(expect.stringContaining(`publish [routingKey=${routingKey}, correlationId=`));
|
|
260
|
+
expect(loggerService.log).toHaveBeenCalledWith(expect.stringContaining(`data=${JSON.stringify(testData)}]`));
|
|
261
|
+
expect(clientProxy.send).toHaveBeenCalledWith(routingKey, expect.objectContaining({
|
|
262
|
+
...testData,
|
|
263
|
+
correlationId: expect.any(String),
|
|
264
|
+
correlationTimestamp: expect.any(Number),
|
|
265
|
+
}));
|
|
266
|
+
expect(mockLastValueFrom).toHaveBeenCalledWith(observable);
|
|
267
|
+
expect(result).toEqual(expectedResponse);
|
|
268
|
+
});
|
|
269
|
+
it("должен добавить correlationId и correlationTimestamp к сообщению", async () => {
|
|
270
|
+
const testData = { input: "test" };
|
|
271
|
+
const expectedResponse = { output: "response" };
|
|
272
|
+
const routingKey = ROUTING_KEYS.TOKENS_FETCH_DETAILS_NFT;
|
|
273
|
+
const observable = of(expectedResponse);
|
|
274
|
+
clientProxy.send.mockReturnValue(observable);
|
|
275
|
+
mockLastValueFrom.mockResolvedValue(expectedResponse);
|
|
276
|
+
await service.publish(routingKey, testData);
|
|
277
|
+
const sendCall = clientProxy.send.mock.calls[0];
|
|
278
|
+
const messageWithCorrelation = sendCall[1];
|
|
279
|
+
expect(messageWithCorrelation.correlationId).toBeDefined();
|
|
280
|
+
expect(typeof messageWithCorrelation.correlationId).toBe("string");
|
|
281
|
+
expect(messageWithCorrelation.correlationTimestamp).toBeDefined();
|
|
282
|
+
expect(typeof messageWithCorrelation.correlationTimestamp).toBe("number");
|
|
283
|
+
expect(messageWithCorrelation.input).toBe("test");
|
|
284
|
+
});
|
|
285
|
+
it("должен обработать необъектные данные, обернув их в объект", async () => {
|
|
286
|
+
const testData = "string data";
|
|
287
|
+
const expectedResponse = { output: "response" };
|
|
288
|
+
const routingKey = ROUTING_KEYS.ANALYTICS_GLOBAL;
|
|
289
|
+
const observable = of(expectedResponse);
|
|
290
|
+
clientProxy.send.mockReturnValue(observable);
|
|
291
|
+
mockLastValueFrom.mockResolvedValue(expectedResponse);
|
|
292
|
+
await service.publish(routingKey, testData);
|
|
293
|
+
const sendCall = clientProxy.send.mock.calls[0];
|
|
294
|
+
const messageWithCorrelation = sendCall[1];
|
|
295
|
+
expect(messageWithCorrelation.correlationId).toBeDefined();
|
|
296
|
+
expect(messageWithCorrelation.correlationTimestamp).toBeDefined();
|
|
297
|
+
expect(messageWithCorrelation.data).toBe("string data");
|
|
298
|
+
});
|
|
299
|
+
it("должен передать ошибку при неудачной отправке", async () => {
|
|
300
|
+
const testData = { input: "test" };
|
|
301
|
+
const routingKey = ROUTING_KEYS.TOKENS_FETCH_DETAILS_NFT;
|
|
302
|
+
const error = new Error("Send failed");
|
|
303
|
+
const observable = throwError(() => error);
|
|
304
|
+
clientProxy.send.mockReturnValue(observable);
|
|
305
|
+
mockLastValueFrom.mockRejectedValue(error);
|
|
306
|
+
await expect(service.publish(routingKey, testData)).rejects.toThrow("Send failed");
|
|
307
|
+
expect(loggerService.log).toHaveBeenCalledWith(expect.stringContaining(`publish [routingKey=${routingKey}`));
|
|
308
|
+
expect(clientProxy.send).toHaveBeenCalled();
|
|
309
|
+
});
|
|
310
|
+
it("должен работать с разными типами данных входа и выхода", async () => {
|
|
311
|
+
const testData = { id: 1, name: "test" };
|
|
312
|
+
const expectedResponse = {
|
|
313
|
+
success: true,
|
|
314
|
+
result: "processed",
|
|
315
|
+
};
|
|
316
|
+
const routingKey = ROUTING_KEYS.ANALYTICS_TRENDING;
|
|
317
|
+
const observable = of(expectedResponse);
|
|
318
|
+
clientProxy.send.mockReturnValue(observable);
|
|
319
|
+
mockLastValueFrom.mockResolvedValue(expectedResponse);
|
|
320
|
+
const result = await service.publish(routingKey, testData);
|
|
321
|
+
expect(result).toEqual(expectedResponse);
|
|
322
|
+
expect(result.success).toBe(true);
|
|
323
|
+
expect(result.result).toBe("processed");
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
describe("интеграция routing keys", () => {
|
|
327
|
+
it("должен использовать правильные routing keys для всех типов операций", () => {
|
|
328
|
+
const testData = { test: "data" };
|
|
329
|
+
// Тестируем все routing keys
|
|
330
|
+
Object.values(ROUTING_KEYS).forEach((routingKey) => {
|
|
331
|
+
service.fireAndForget(routingKey, testData);
|
|
332
|
+
expect(clientProxy.emit).toHaveBeenCalledWith(routingKey, testData);
|
|
333
|
+
});
|
|
334
|
+
expect(clientProxy.emit).toHaveBeenCalledTimes(Object.values(ROUTING_KEYS).length);
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
describe("динамическое вычисление конфигурации", () => {
|
|
338
|
+
it("должен вычислить конфигурацию динамически через createSenderConfig", () => {
|
|
339
|
+
expect(mockCreateSenderConfig).toHaveBeenCalledWith(mockSenderOptions);
|
|
340
|
+
expect(service).toBeDefined();
|
|
341
|
+
});
|
|
342
|
+
it("должен использовать вычисленные routing keys для отправки сообщений", () => {
|
|
343
|
+
const testData = { test: "data" };
|
|
344
|
+
service.fireAndForget(ROUTING_KEYS.TOKENS_FETCH_ALL, testData);
|
|
345
|
+
expect(clientProxy.emit).toHaveBeenCalledWith(ROUTING_KEYS.TOKENS_FETCH_ALL, testData);
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
//# sourceMappingURL=rabbitmq.service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitmq.service.spec.js","sourceRoot":"","sources":["../../../src/main/__tests__/rabbitmq.service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DynamicModule, Type } from "@nestjs/common";
|
|
2
|
+
import type RabbitMQSenderOptions from "../types/rabbitmq-sender-options.js";
|
|
3
|
+
export default class RabbitMQModule {
|
|
4
|
+
static forRootAsync(options: {
|
|
5
|
+
imports?: Type<unknown>[];
|
|
6
|
+
useFactory: (...args: unknown[]) => Promise<RabbitMQSenderOptions> | RabbitMQSenderOptions;
|
|
7
|
+
inject?: unknown[];
|
|
8
|
+
}): DynamicModule;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=rabbitmq.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitmq.module.d.ts","sourceRoot":"","sources":["../../src/main/rabbitmq.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAkB,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAOrE,OAAO,KAAK,qBAAqB,MAAM,mCAAmC,CAAC;AAK3E,MAAM,CAAC,OAAO,OAAO,cAAc;IAElC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;QAC5B,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,qBAAqB,CAAC,GAAG,qBAAqB,CAAC;QAC3F,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;KACnB,GAAG,aAAa;CA6BjB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var RabbitMQModule_1;
|
|
8
|
+
import { Global, Module } from "@nestjs/common";
|
|
9
|
+
import { ConfigModule } from "@nestjs/config";
|
|
10
|
+
import { ClientsModule } from "@nestjs/microservices";
|
|
11
|
+
import { createSenderConfig } from "../config/factories.js";
|
|
12
|
+
import RabbitMQService from "../main/rabbitmq.service.js";
|
|
13
|
+
import { RABBITMQ_SENDER_SERVICE } from "../utils/injections.js";
|
|
14
|
+
// Глобальный модуль отправки сообщений через RabbitMQ на другие сервисы
|
|
15
|
+
let RabbitMQModule = RabbitMQModule_1 = class RabbitMQModule {
|
|
16
|
+
// Статический метод для настройки модуля с конфигурацией через forRootAsync
|
|
17
|
+
static forRootAsync(options) {
|
|
18
|
+
return {
|
|
19
|
+
module: RabbitMQModule_1,
|
|
20
|
+
imports: [
|
|
21
|
+
ConfigModule,
|
|
22
|
+
...(options.imports || []),
|
|
23
|
+
ClientsModule.registerAsync([
|
|
24
|
+
{
|
|
25
|
+
name: RABBITMQ_SENDER_SERVICE,
|
|
26
|
+
imports: [ConfigModule, ...(options.imports || [])],
|
|
27
|
+
useFactory: async (...args) => {
|
|
28
|
+
// Получаем опции через useFactory
|
|
29
|
+
const moduleOptions = await options.useFactory(...args);
|
|
30
|
+
// Вычисляем конфигурацию sender
|
|
31
|
+
const rmq = createSenderConfig(moduleOptions);
|
|
32
|
+
return {
|
|
33
|
+
transport: rmq.transport,
|
|
34
|
+
options: rmq.options,
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
inject: options.inject || [],
|
|
38
|
+
},
|
|
39
|
+
]),
|
|
40
|
+
],
|
|
41
|
+
providers: [RabbitMQService],
|
|
42
|
+
exports: [RabbitMQService],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
RabbitMQModule = RabbitMQModule_1 = __decorate([
|
|
47
|
+
Global(),
|
|
48
|
+
Module({})
|
|
49
|
+
], RabbitMQModule);
|
|
50
|
+
export default RabbitMQModule;
|
|
51
|
+
//# sourceMappingURL=rabbitmq.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitmq.module.js","sourceRoot":"","sources":["../../src/main/rabbitmq.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAiB,MAAM,EAAE,MAAM,EAAQ,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,eAAe,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,wEAAwE;AAGzD,IAAM,cAAc,sBAApB,MAAM,cAAc;IAClC,4EAA4E;IAC5E,MAAM,CAAC,YAAY,CAAC,OAInB;QACA,OAAO;YACN,MAAM,EAAE,gBAAc;YACtB,OAAO,EAAE;gBACR,YAAY;gBACZ,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1B,aAAa,CAAC,aAAa,CAAC;oBAC3B;wBACC,IAAI,EAAE,uBAAuB;wBAC7B,OAAO,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;wBACnD,UAAU,EAAE,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;4BACxC,kCAAkC;4BAClC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;4BACxD,gCAAgC;4BAChC,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;4BAE9C,OAAO;gCACN,SAAS,EAAE,GAAG,CAAC,SAAS;gCACxB,OAAO,EAAE,GAAG,CAAC,OAAO;6BACpB,CAAC;wBACH,CAAC;wBACD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;qBAC5B;iBACD,CAAC;aACF;YACD,SAAS,EAAE,CAAC,eAAe,CAAC;YAC5B,OAAO,EAAE,CAAC,eAAe,CAAC;SAC1B,CAAC;IACH,CAAC;CACD,CAAA;AAnCoB,cAAc;IAFlC,MAAM,EAAE;IACR,MAAM,CAAC,EAAE,CAAC;GACU,cAAc,CAmClC;eAnCoB,cAAc"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { LoggerService } from "@makebelieve21213-packages/logger";
|
|
2
|
+
import { OnModuleDestroy, OnModuleInit } from "@nestjs/common";
|
|
3
|
+
import { ConfigService } from "@nestjs/config";
|
|
4
|
+
import { ClientProxy } from "@nestjs/microservices";
|
|
5
|
+
import { ROUTING_KEYS } from "../types/routing-keys.js";
|
|
6
|
+
export default class RabbitMQService implements OnModuleInit, OnModuleDestroy {
|
|
7
|
+
private readonly client;
|
|
8
|
+
private readonly configService;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
private readonly rk;
|
|
11
|
+
constructor(client: ClientProxy, configService: ConfigService, logger: LoggerService);
|
|
12
|
+
onModuleInit(): Promise<void>;
|
|
13
|
+
onModuleDestroy(): Promise<void>;
|
|
14
|
+
private addCorrelationId;
|
|
15
|
+
/**
|
|
16
|
+
* Отправляем сообщение по указанному routingKey используя fire-and-forget паттерн
|
|
17
|
+
* Для fire-and-forget не добавляем correlationId, так как идемпотентность не требуется
|
|
18
|
+
*/
|
|
19
|
+
fireAndForget<I>(key: ROUTING_KEYS, data: I): void;
|
|
20
|
+
/**
|
|
21
|
+
* Отправляем сообщение по указанному routingKey и ждем ответ от получателя (request-response паттерн)
|
|
22
|
+
* Добавляем correlationId и correlationTimestamp для идемпотентности
|
|
23
|
+
*/
|
|
24
|
+
publish<I, O>(key: ROUTING_KEYS, data: I): Promise<O>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=rabbitmq.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitmq.service.d.ts","sourceRoot":"","sources":["../../src/main/rabbitmq.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAsB,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAStD,MAAM,CAAC,OAAO,OAAO,eAAgB,YAAW,YAAY,EAAE,eAAe;IAK3E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IANxB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAqC;gBAItC,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,aAAa;IAkBjC,YAAY;IAKZ,eAAe;IAMrB,OAAO,CAAC,gBAAgB;IAiBxB;;;OAGG;IACH,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAalD;;;OAGG;IACG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAY3D"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
var RabbitMQService_1;
|
|
14
|
+
import { LoggerService } from "@makebelieve21213-packages/logger";
|
|
15
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
16
|
+
import { ConfigService } from "@nestjs/config";
|
|
17
|
+
import { ClientProxy } from "@nestjs/microservices";
|
|
18
|
+
import { lastValueFrom } from "rxjs";
|
|
19
|
+
import { createSenderConfig } from "../config/factories.js";
|
|
20
|
+
import { RABBITMQ_SENDER_SERVICE } from "../utils/injections.js";
|
|
21
|
+
import { v4 as uuidv4 } from "uuid";
|
|
22
|
+
// Сервис по отправке сообщений через RabbitMQ на другие сервисы
|
|
23
|
+
let RabbitMQService = RabbitMQService_1 = class RabbitMQService {
|
|
24
|
+
client;
|
|
25
|
+
configService;
|
|
26
|
+
logger;
|
|
27
|
+
rk;
|
|
28
|
+
constructor(client, configService, logger) {
|
|
29
|
+
this.client = client;
|
|
30
|
+
this.configService = configService;
|
|
31
|
+
this.logger = logger;
|
|
32
|
+
this.logger.setContext(RabbitMQService_1.name);
|
|
33
|
+
// Всегда вычисляем конфигурацию динамически из senderOptions
|
|
34
|
+
// Это гарантирует наличие routingKeys без необходимости регистрации в ConfigService
|
|
35
|
+
const senderOptions = this.configService.get("rabbitmqSender");
|
|
36
|
+
if (!senderOptions) {
|
|
37
|
+
throw new Error("RabbitMQ sender options not found in configuration");
|
|
38
|
+
}
|
|
39
|
+
const rmq = createSenderConfig(senderOptions);
|
|
40
|
+
this.rk = rmq.routingKeys;
|
|
41
|
+
this.logger.log(`RabbitMQ routing keys initialized: ${Object.keys(this.rk).length} keys`);
|
|
42
|
+
}
|
|
43
|
+
async onModuleInit() {
|
|
44
|
+
await this.client.connect();
|
|
45
|
+
this.logger.log("RabbitMQ connected");
|
|
46
|
+
}
|
|
47
|
+
async onModuleDestroy() {
|
|
48
|
+
await this.client.close();
|
|
49
|
+
this.logger.log("RabbitMQ disconnected");
|
|
50
|
+
}
|
|
51
|
+
// Добавляет correlationId и correlationTimestamp в сообщение для идемпотентности
|
|
52
|
+
addCorrelationId(data) {
|
|
53
|
+
if (data === null || typeof data !== "object") {
|
|
54
|
+
// Если данные не объект, оборачиваем в объект
|
|
55
|
+
return {
|
|
56
|
+
data,
|
|
57
|
+
correlationId: uuidv4(),
|
|
58
|
+
correlationTimestamp: Date.now(),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
...data,
|
|
63
|
+
correlationId: uuidv4(),
|
|
64
|
+
correlationTimestamp: Date.now(),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Отправляем сообщение по указанному routingKey используя fire-and-forget паттерн
|
|
69
|
+
* Для fire-and-forget не добавляем correlationId, так как идемпотентность не требуется
|
|
70
|
+
*/
|
|
71
|
+
fireAndForget(key, data) {
|
|
72
|
+
this.logger.log(`fireAndForget [routingKey=${this.rk[key]}, data=${JSON.stringify(data)}]`);
|
|
73
|
+
// Подписываемся на Observable для гарантии отправки и обработки ошибок
|
|
74
|
+
this.client.emit(this.rk[key], data).subscribe({
|
|
75
|
+
error: (error) => {
|
|
76
|
+
this.logger.error(`Ошибка отправки fire-and-forget сообщения [routingKey=${this.rk[key]}]: ${error}`);
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Отправляем сообщение по указанному routingKey и ждем ответ от получателя (request-response паттерн)
|
|
82
|
+
* Добавляем correlationId и correlationTimestamp для идемпотентности
|
|
83
|
+
*/
|
|
84
|
+
async publish(key, data) {
|
|
85
|
+
const messageWithCorrelation = this.addCorrelationId(data);
|
|
86
|
+
const routingKey = this.rk[key];
|
|
87
|
+
this.logger.log(`publish [routingKey=${routingKey}, correlationId=${messageWithCorrelation.correlationId}, data=${JSON.stringify(data)}]`);
|
|
88
|
+
const result = this.client.send(routingKey, messageWithCorrelation);
|
|
89
|
+
return (await lastValueFrom(result));
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
RabbitMQService = RabbitMQService_1 = __decorate([
|
|
93
|
+
Injectable(),
|
|
94
|
+
__param(0, Inject(RABBITMQ_SENDER_SERVICE)),
|
|
95
|
+
__metadata("design:paramtypes", [ClientProxy,
|
|
96
|
+
ConfigService,
|
|
97
|
+
LoggerService])
|
|
98
|
+
], RabbitMQService);
|
|
99
|
+
export default RabbitMQService;
|
|
100
|
+
//# sourceMappingURL=rabbitmq.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitmq.service.js","sourceRoot":"","sources":["../../src/main/rabbitmq.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Transport } from "@nestjs/microservices/enums/transport.enum.js";
|
|
2
|
+
export default interface RabbitMQConfigBase {
|
|
3
|
+
transport: Transport.RMQ;
|
|
4
|
+
options: {
|
|
5
|
+
urls: string[];
|
|
6
|
+
queue: string;
|
|
7
|
+
queueOptions: {
|
|
8
|
+
durable: boolean;
|
|
9
|
+
};
|
|
10
|
+
exchange: string;
|
|
11
|
+
exchangeType: string;
|
|
12
|
+
wildcards: boolean;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=base.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.config.d.ts","sourceRoot":"","sources":["../../src/types/base.config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AAG5E,MAAM,CAAC,OAAO,WAAW,kBAAkB;IAC1C,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC;IACzB,OAAO,EAAE;QACR,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE;YACb,OAAO,EAAE,OAAO,CAAC;SACjB,CAAC;QACF,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,OAAO,CAAC;KACnB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.config.js","sourceRoot":"","sources":["../../src/types/base.config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotent-message.d.ts","sourceRoot":"","sources":["../../src/types/idempotent-message.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,OAAO,WAAW,iBAAiB,CAAC,CAAC;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,CAAC,CAAC;CACR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotent-message.js","sourceRoot":"","sources":["../../src/types/idempotent-message.ts"],"names":[],"mappings":""}
|