Использую nest js + next js.
Суть вопроса: Есть микросервис на одном сервере, который производит запрос в сторонне приложение, обрабатывает его и передает на другой сервер для записи в БД. Но запросов надо делать много и для того чтобы обойти ограничение, требуется отправлять запросы с разных ip.
Можно конечно этот микросервис раскидать на разные серверы и будут они там работать, но не целесообразно и запаса по серверу достаточно много.
Как сделать так чтобы на одном сервере, микросервис отправлял код с разных ip.
Ниже представлен контроллер. Есть метод который опрашивает сторонний сервис через их APi, но проблема в том, что я хочу через cron запускать эту задачу для разных ip на одном сервере и не понял пока как это реализовать.
Представил вариант ниже который опробовал но это не работает.
В файле default на сервере настроил nginx, указал несколько location с проксированием на 4 ip адреса для приема входящих запросов, но этот будет исходящий.
ip адреса сервера:
export const serverConfig = {
servers: [
{ ip: '79.**********', port: 7000 },
{ ip: '79.*********', port: 7000 },
{ ip: '79.*********', port: 7000 },
{ ip: '79.*********', port: 7000 },
],
};
Контроллер:
@Controller('posts')
export class PostsController {
constructor(private readonly postsService: PostsService) {}
@Cron('0 */10 * * * *')
@Get('/addNewPosts')
addNewPosts() {
let start = 2000
let pass = 0
serverConfig.servers.map((item) => {
this.postsService.processGroups(`2`, start, pass, false, item.ip, item.port)
start += 2000
pass += 2000
})
}
}
Если пройдем в функцию processGroups, то тут будет запрос в стороннее приложение (добавил блок proxy )
async checkIsClosedGroup(code, ip, port) {
const access = process.env['****'];
const version = process.env['****];
try {
const { data } = await firstValueFrom(
this.httpService
.get<any>(
`https://********/*******/*******?code=${encodeURIComponent(code)}&access_token=${access}&v=${version}`,
я добавил этот блок но видимо не так надо делать
{
proxy: {
host: ip,
port: port,
protocol: 'https'
}
}
)
.pipe(
catchError((error: AxiosError) => {
if (error.response &&
'data' in error.response &&
error.response.data != undefined) {
this.logsServicePostsAdd.error(******* );
}
this.logsServicePostsAdd.error(****** );
throw new Error(
`checkIsClosedGroup An error happened! ${data} для ${code}`,
);
}),
),
);
if (!data || !data.response || typeof data.response !== 'object') {
this.logsServicePostsAdd.error(***** );
}
return data;
} catch (err) {
await this.logsServicePostsAdd.error(****);
}
}
Но ничего выходит, получаю {"level":"error","message":"checkIsClosedGroup error","trace":"ошибка получения постов в группе undefined код \n.... Как правильно настроить проксирование запросов исхолящих с разных ip, кто может подсказать.
Без объекта proxe соответственно все работает