Посмотрите здесь, я делаю что-то похожее на то, что вам нужно: https://github.com/nerdybeast/sith-api/blob/feature/redis-cache/src/modules/api/sobjects/trace-flag/TraceFlagPoller.ts
Я создал класс, который "опрашивает" серверную часть и генерирует событие, когда обнаруживает изменение вэтот бэкэнд. У вас может быть другой код, который прослушивает это событие, которое вызывает ваш API стороннего производителя.
ОБНОВЛЕНИЕ:
Как вы сказали, в Nest есть базовый контекст приложения, который пропускает службу httpнастройку, вот как вы можете это сделать:
index.ts
import { NestFactory } from '@nestjs/core';
import { ApplicationModule } from './ApplicationModule';
import { DatabaseService } from './DatabaseService';
(async () => {
const app = await NestFactory.createApplicationContext(ApplicationModule);
const databaseService = app.get<DatabaseService>(DatabaseService);
await databaseService.poll();
})();
DatabaseService.ts
@Injectable()
export class DatabaseService {
private expectedResult: any;
public async poll() : Promise<void> {
const result = await getData();
if(result !== this.expectedResult) {
this.expectedResult = result;
await axios.post('https://some-url.com', result);
}
//Poll every 5 seconds or whatever
setTimeout(() => this.poll(), 5000);
}
}
Это может быть решением, если вам придется опроситьбазы данных вместо возможности подписаться на нее. При таком подходе, когда вы запускаете приложение, оно будет опрашивать вечно, постоянно обновляя ваши сторонние API.
Я бы начал index.ts
файл с pm2
или forever
, чтобы вы могли иметьизящный перезапуск, если ваш процесс по какой-то причине падает.