microservices.module.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { immichAppConfig } from '@app/common/config';
  2. import { DatabaseModule } from '@app/database';
  3. import { AssetEntity } from '@app/database/entities/asset.entity';
  4. import { ExifEntity } from '@app/database/entities/exif.entity';
  5. import { SmartInfoEntity } from '@app/database/entities/smart-info.entity';
  6. import { UserEntity } from '@app/database/entities/user.entity';
  7. import { QueueNameEnum } from '@app/job/constants/queue-name.constant';
  8. import { BullModule } from '@nestjs/bull';
  9. import { Module } from '@nestjs/common';
  10. import { ConfigModule } from '@nestjs/config';
  11. import { TypeOrmModule } from '@nestjs/typeorm';
  12. import { ImmichConfigModule } from 'libs/immich-config/src';
  13. import { CommunicationModule } from '../../immich/src/api-v1/communication/communication.module';
  14. import { MicroservicesService } from './microservices.service';
  15. import { AssetUploadedProcessor } from './processors/asset-uploaded.processor';
  16. import { GenerateChecksumProcessor } from './processors/generate-checksum.processor';
  17. import { MachineLearningProcessor } from './processors/machine-learning.processor';
  18. import { MetadataExtractionProcessor } from './processors/metadata-extraction.processor';
  19. import { ThumbnailGeneratorProcessor } from './processors/thumbnail.processor';
  20. import { UserDeletionProcessor } from './processors/user-deletion.processor';
  21. import { VideoTranscodeProcessor } from './processors/video-transcode.processor';
  22. @Module({
  23. imports: [
  24. ConfigModule.forRoot(immichAppConfig),
  25. DatabaseModule,
  26. ImmichConfigModule,
  27. TypeOrmModule.forFeature([UserEntity, ExifEntity, AssetEntity, SmartInfoEntity]),
  28. BullModule.forRootAsync({
  29. useFactory: async () => ({
  30. prefix: 'immich_bull',
  31. redis: {
  32. host: process.env.REDIS_HOSTNAME || 'immich_redis',
  33. port: parseInt(process.env.REDIS_PORT || '6379'),
  34. db: parseInt(process.env.REDIS_DBINDEX || '0'),
  35. password: process.env.REDIS_PASSWORD || undefined,
  36. path: process.env.REDIS_SOCKET || undefined,
  37. },
  38. }),
  39. }),
  40. BullModule.registerQueue(
  41. {
  42. name: QueueNameEnum.USER_DELETION,
  43. defaultJobOptions: {
  44. attempts: 3,
  45. removeOnComplete: true,
  46. removeOnFail: false,
  47. },
  48. },
  49. {
  50. name: QueueNameEnum.THUMBNAIL_GENERATION,
  51. defaultJobOptions: {
  52. attempts: 3,
  53. removeOnComplete: true,
  54. removeOnFail: false,
  55. },
  56. },
  57. {
  58. name: QueueNameEnum.ASSET_UPLOADED,
  59. defaultJobOptions: {
  60. attempts: 3,
  61. removeOnComplete: true,
  62. removeOnFail: false,
  63. },
  64. },
  65. {
  66. name: QueueNameEnum.METADATA_EXTRACTION,
  67. defaultJobOptions: {
  68. attempts: 3,
  69. removeOnComplete: true,
  70. removeOnFail: false,
  71. },
  72. },
  73. {
  74. name: QueueNameEnum.VIDEO_CONVERSION,
  75. defaultJobOptions: {
  76. attempts: 3,
  77. removeOnComplete: true,
  78. removeOnFail: false,
  79. },
  80. },
  81. {
  82. name: QueueNameEnum.CHECKSUM_GENERATION,
  83. defaultJobOptions: {
  84. attempts: 3,
  85. removeOnComplete: true,
  86. removeOnFail: false,
  87. },
  88. },
  89. {
  90. name: QueueNameEnum.MACHINE_LEARNING,
  91. defaultJobOptions: {
  92. attempts: 3,
  93. removeOnComplete: true,
  94. removeOnFail: false,
  95. },
  96. },
  97. ),
  98. CommunicationModule,
  99. ],
  100. controllers: [],
  101. providers: [
  102. MicroservicesService,
  103. AssetUploadedProcessor,
  104. ThumbnailGeneratorProcessor,
  105. MetadataExtractionProcessor,
  106. VideoTranscodeProcessor,
  107. GenerateChecksumProcessor,
  108. MachineLearningProcessor,
  109. UserDeletionProcessor,
  110. ],
  111. exports: [],
  112. })
  113. export class MicroservicesModule {}