Как отфильтровать очередь сообщений на основе состояния сервера распределенного процессора сообщений (отображение хоста доставки электронной почты для SMTP в пуле) - PullRequest
0 голосов
/ 19 сентября 2019

Я строю систему доставки электронной почты.Почта отправляется на конечную точку HTTP в виде JSON, JSON создается в почтовом формате, а затем помещается в очередь в RabbitMQ для сбора SMTP-сервером отправителя, который затем отправляет его.

Моя проблема возникает, когда мне нужно объединить SMTP.В настоящее время мои серверы отправителей наивно высасывают новую почту из RabbitMQ без фильтрации по хосту получателя SMTP.Мне нужен способ посмотреть на состояние текущих серверов отправителей и определить, есть ли у какого-либо из них активное TCP-соединение с хостом, для которого предназначена электронная почта в очереди.Я не могу определить их вручную, потому что мне нужно быть осведомленным о загрузке (ускорить большее количество TCP-соединений где-нибудь еще, если текущее перегружено), и просто слишком много SMTP-хостов, чтобы вручную определять маршруты.

Вот график дляпомогите объяснить мою инфраструктуру:

письмо отправлено -1-> передано в очередь -2-> SMTP-сервер собирает сообщение из очереди для отправки

Короче говоря, мне нужен способ фильтрации шаг 2 по получателюхост электронной почты.

Пример. Допустим, у нас в MQ 100 сообщений и 5 серверов отправителей.Sever 2 имеет активное tcp-соединение с 1.1.1.1, и у нас есть электронная почта, предназначенная для 1.1.1.1.Мы хотим убедиться, что электронная почта направляется на сервер 2, а не на другие серверы, которые не имеют активного подключения.

Также следует отметить, что один MX-хост, такой как gmail.com, может иметь 5-10 альтернативных почтовых серверов, определенных в DNS, поэтому мне нужно определять хосты по IP, а не только по имени домена.

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

...