Уже лучше, теперь дальше - как выглядит коннектор к реббиту?

если он из переменных окружения берет реквизиты - то покажите их

25 ответов

129 просмотров

async waitForConnection(interval = 1000, maxRetry) { console.log('... connecting to Queue ...') if (maxRetry > 0) { if (this.retry > maxRetry) { throw new Error('Exceeded Max Retry. Exiting ...') } this.retry++ } try { await this.connect() console.log('... connected to Queue ...') } catch (err) { console.log('Could not connect to Queue, retrying...') await this.wait(interval) await this.waitForConnection(maxRetry) } } async wait(time) { return new Promise((resolve) => setTimeout(resolve, time)) } async connect() { // connect to rabbitmq this.connection = await amqplib.connect(this.connectionString) // create connection this.channel = await this.connection.createChannel() // create exchange await this.channel.assertExchange(this.exchangeName, this.exchangeType, { durable: this.exchangeDurable, }) // create queue await this.channel.assertQueue(this.queueName, { durable: this.queueDurable, }) // set prefetch count this.channel.prefetch(this.prefetchCount) // bind queue to exchange await this.channel.bindQueue( this.queueName, this.exchangeName, this.routingKey ) return null } создание коннекта let RmqNotifications = await RMQConn({ exchangeType: 'direct', exchangeName: 'notifications', queueName: 'notifications', routingKey: 'notifications', })

Aleksey-Barabanov Автор вопроса
Aleksey Barabanov
connectionString как выглядит?

const connectionString = `amqp://${user}:${pass}@${host}:${port}` из ENV данные

module.exports.RMQConn = async function (initObj) { try { if (!instance) { instance = new QueueClient(initObj) await instance.waitForConnection(1000) } return instance } catch (err) { console.log(err.message) } } создание коннекта let RmqNotifications = await RMQConn({ exchangeType: 'direct', exchangeName: 'notifications', queueName: 'notifications', routingKey: 'notifications', })

хм.. странно. Думал что если сеть отваливается amqplib в on disconnect сообщить должна об этом, а вот выходит что нифига не так.. но я понял, пойду переписывать

вот такое есть this.connection.on('connect', () => { console.log('Connected!') }) this.connection.on('disconnect', (params) => { console.log('Disconnected: ', params.err) }) this.connection.on('connectFailed', (params) => { console.log('connectFailed: ', params) }) this.connection.on('unblocked', () => { console.log('Unblocked') }) this.connection.on('blocked', (params) => { console.log('Blocked, reason: ', params.reason) })

Vadim
А что за либа?

черт, сори, я перепутал либы )))) думал такое есть в amqplib, а он оесть только в amqp-connection-manager наверное ее проще заюзать будет, чем с нуля писать

а с чем это связано? разрушение каналов имею ввиду архитектура самого кролика? или внешние факторы?

Алекс
а с чем это связано? разрушение каналов имею ввиду...

С сетью, с опоздавшими хэртбитами, с проксей, если она стоит перед кроликом, с протоколом (например, если произошло исключение в процессе работы с каналом, то с ним уже ничего сделать нельзя).

А куда деваться, это нода, там единственный рекомендуемый клиент и тот без 1.0 версии в 2024м

Ну нода в целом в плане экосистемы по нулям

Владислав Килин
Ну нода в целом в плане экосистемы по нулям

Есть там и свои либы, аналогов которым нет. Скажем, лучше, чем жс, мы не нашли либы для рендера пдф, работы с браузером и даже для работы с smpp (не smtp).

Vadim
Есть там и свои либы, аналогов которым нет. Скажем...

На дотнетике есть божественные либы для пдф, даже в годы до неткора. Но может у вас конечно особые кейсы были

Владислав Килин
И зря!)

Да ну, он же специфический. Только под винду работает(л) (или уже нет?). Там только NServiceBus крутой, как я знаю, многие по нему джавовские либы пилили.

Похожие вопросы

Обсуждают сегодня

Всем привет. Понимаю, что, наверное, сто раз поднимали эту тему, но по ключевым словам не смог найти. Как передать в values.yaml зависимого хелм-чарта теги образов, собираемых...
Vitalik Petrov
4
Всем привет. Werf v2.10.5 При удалении релиза вместе с неймспейсом (werf dismiss --namespace namespace_name) Сыпятся ошибки ┌ Waiting for resources elimination: namespaces/rel...
Vitalik Petrov
1
@aigrychev, @ilya_lesikov добрый день! а поддерживает ли werf helm xxxx или werf bundle xxxx работу с сабчартами через http-прокси? (сработает ли использование HTTP_PROXY/HTTP...
Сергей Голод
4
Добрый день! Удалил все файлы с переменными из проекта, получил Error: release deploy: process resources: error validating adoptable resources: adoption validation failed: re...
Evgheni Mad
2
Привет! Вопрос про werf helm Приложение деплоится через werf helm upgrade --atomic Иногда(все условия для воспроизведения до конца непонятны, но есть версия, что это происходи...
𝓐𝓵͢͢͢𝓮𝔁 C
2
Всем привет. Сегодня добавили в приложение дополнительный образ nginx, в который докидывается системная статика прям в образ. При деплое бандлами деплоилось 200+ джоб(клиентов...
Владимир Муковоз
6
Добрый день, после перехода с версии 1.2 на 2.10 werf cleanup начал удалять использующиеся теги, и до и после обновления использовались дефолтные политики keepPolicies Подскаж...
Дмитрий
29
Блин а мне как поумнеть ?
Toxin
191
Друзья, добрый день. Прошу подсказать с базовым вопросом по использованию CI переменных gitlab в werf.yaml. Хочу в beforeInstall использовать env переменную с токеном. Мне нуж...
Anton Zol
10
Вопросик не совсем werf. Но вдруг мы подскажите воркэраунд или ещё что-нибудь. Могу ли я как-нибудь в моменте деплоя внутри heml рендера получить хэшсумму файла шаблона (./tem...
Alex Подрябинкин
11
Карта сайта