Как динамически установить количество предварительных выборок RabbitMq

Можно ли динамически задавать параметр количества предварительных выборок? Вот то, чего я хотел достичь. У меня есть служба, которая является абонентом очереди. У меня есть механизм, который наблюдает за ресурсами сервиса, такими как использование процессора, ОЗУ и т. Д. Этот механизм будет отправлять уведомление сервису, когда эти ресурсы будут использоваться много. Поэтому, когда приходит это уведомление, мне нравится останавливать получение сообщений из очереди. Это можно сделать, отписавшись от очереди, но это будет эффективно? Можно ли установить количество предварительных выборок в 1 динамически, когда приходит это уведомление? Если нет, как этого добиться? Я использую C# и MasstTransit в качестве сервисной шины.

2 ответа

Решение

Забавно, что вы должны спросить, на самом деле есть очень специфический модульный тест, который делает именно эту вещь:

https://github.com/MassTransit/MassTransit/blob/master/src/MassTransit.RabbitMqTransport.Tests/SetPrefetchCount_Specs.cs

Самый простой способ прекратить использование всех сообщений - это остановить автобус. Помните, что отправка сообщений по-прежнему работает, даже когда автобус остановлен. Чтобы начать получать сообщения снова, вам просто нужно запустить шину.

Управление подсчетом предварительной выборки не помешает потреблению сообщений.

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

Другие вопросы по тегам