В настоящее время у меня есть облачная функция Google (написана в машинописном тексте), которую мне нужно подключить к кешу redis (я использую redis как гибрид коллекции очередей / метрик), чтобы ставить в очередь задания для моих работников, которые работают в других местах.
Все работает, когда я захожу в свой кэш redis, все работает, как я ожидал, конвейер работает нормально.Но я получаю тысячи таких ошибок:
[ioredis] Unhandled error event: Error: read ECONNRESET
Они, кажется, не влияют на выполнение облачной функции, но они непрерывны и влияют на журналы всех моих облачных функций, так как все они импортируются вмой index.ts.Я отчаянно нуждаюсь в тех, кто разбирается в этом, потратил дни, пытаясь исправить все, что я могу найти в Интернете.
Для справки, я использую Azure Redis Cache (премиум) и когда я подключаюсь через redis-cli, я вижу, что я предполагаю, что облачные функции инициируют соединения и успешно аутентифицируются, попадают в очередь, как и ожидалось, и т. д.
У меня есть /utils/index.ts
, в котором я использую Redis (нигде более).Я импортирую его так:
import { _createRedis } from './redis';
const redis = _createRedis();
Вот пример функции, где я использую Redis:
export async function runExtractor(): Promise<any> {
const data = await getActiveProfile();
const pipeline = redis.pipeline();
pipeline.lpush(`profile-extractor:jobs`, JSON.stringify((sanitizeSpec(data))));
const result = await pipeline.exec();
console.log('executed pipeline', { resultCount: result.length });
}
redis.ts содержимое:
import * as Redis from 'ioredis';
// export const redis = new Redis(6380, 'MYCACHE.redis.cache.windows.net', { tls: true as any, password: 'PASSWORD' });
export const _createRedis = () => {
return new Redis(6380, 'azuresucks.redis.cache.windows.net', { tls: true as any, password: 'PASSWORD' });;
}
Как видите, я возился с настройками tls, экспортировал их как функцию, но ничего не работает.Из того, что я смог найти, это может быть связано с тем, как ioredis работает с Azure Redis Cache и настройками SSL.Это было самое близкое, что я мог найти к моей проблеме, но ответ там не работал для меня. проблема ioredis
Примечательно, что я не сталкиваюсь с этой проблемой за пределами среды облачных функций Google.Я запускаю рабочих на Google Compute Engine, они прекрасно подключаются к Redis, вытаскивают элементы из очереди и выполняют свою работу.Повторим, все работает, но это явно нежелательно: сообщение об ошибке стека-драйвера