@ application- kit/ 切换出局
交易收发箱 QQ TypeORM \ NestJS : # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # # ## # # # #### ### transaction_outboxes {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你应该知道 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你是谁
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 queue_name
卡夫卡(英语:Event Router, route.by.field: queue_name) (中文(简体) ).
Установка
yarn add @application-kit/transaction-outbox
对等者 : @application-kit/kafka 页:1 /event-contract, (中文(简体) ), @application-kit/typeorm, (中文(简体) ),
@libs-for-dev/nestjs-ddd-library, (中文(简体) ), @nestjs/common, (中文(简体) ), @nestjs/core, (中文(简体) ), @nestjs/typeorm, (中文(简体) ),
nestjs-pino, (中文(简体) ), oxide.ts, (中文(简体) ), typeorm。 。 。 . kafkajs и @nestjs/microservices не:пакет也
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢.
Подключение
- Приложение,из: TransactionOutboxModule
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢.
import {
TRANSACTION_OUTBOX_LOGGER,
TRANSACTION_OUTBOX_REQUEST_FACTS,
TransactionOutboxLogger,
} from '@application-kit/transaction-outbox'
@Global()
@Module({
exports: [TRANSACTION_OUTBOX_LOGGER, TRANSACTION_OUTBOX_REQUEST_FACTS],
providers: [
{ provide: TRANSACTION_OUTBOX_LOGGER, useClass: TransactionOutboxLogger },
{ provide: TRANSACTION_OUTBOX_REQUEST_FACTS, useValue: () => ({ ip: currentIp() }) },
],
})
class CommonModule {}
TRANSACTION_OUTBOX_LOGGERлюбой классerror(context, message)· ;TransactionOutboxLogger—— 说 реализацияnestjs-pino(нуженLoggerModule) (中文(简体) ).TRANSACTION_OUTBOX_REQUEST_FACTS——обогащения:функция也 ложится вpayload.factsсобытийcarriesRequestFacts: true。 。 。 。 . QQ 用户代理QQresolveRequestFactsиз@application-kit/observability/http; текущий {\fn黑体\fs20\shad2\2ah82\3ah20\4ah33\fscx95\3ch592001\be1}♪####################################################################################################################################################################################################################################AsyncLocalStorage。 。 。 . Хук:него也carriesRequestFactsпишутсяfacts。 。 。 .
Запись
const result = await outbox.save([new UserWasCreatedEvent({ id })], async () => {
return repository.save(user)
})
Колбэк:это也, save отвечает Ok(true)。 。 。 . Result нужен,
? когда.
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得怎样. Err {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
значением. save {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 save {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢.
Репозитории,которые也
TransactionAwareTypeOrmModule.forFeature([...]) вместо TypeOrmModule.forFeature。 。 。 .
Версия
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 versionedQueueName(queueName, eventVersion) из
@application-kit/kafka/event-contract? ? ? ? ? 吗 <queue>.v<N>。 。 。 .
Базовый AbstractSingleIdOutboxEvent фиксирует 1。 。 。 .
Миграция
Пакет orm . . . . . TransactionOutboxEntity и и TransactionOutbox1734780489810
классами:передайте也 packages qQ CLI 数据来源. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
migrations {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得怎么样.
import { orm as outboxOrm } from '@application-kit/transaction-outbox'
createCliDataSource({ ..., packages: [outboxOrm] }) // @application-kit/typeorm/nest
Тесты
import { TransactionOutboxFake } from '@application-kit/transaction-outbox/testing'
const outbox = new TransactionOutboxFake(logger)
await service.run()
expect(outbox.events.size).toBe(1)
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 events {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你应该知道 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你是谁 Err {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢.