Излишне ли использовать служебную шину, если все сообщения отправляются локально? - PullRequest
1 голос
/ 23 ноября 2011

У меня есть служба чтения почты, которая читает каждое письмо из папки «Входящие», анализирует его и вставляет в базу данных. Проблема, с которой я сталкиваюсь, заключается в том, что нет никакой гарантии, что я буду анализировать электронные письма в порядке их получения (это бизнес-требование). Мое исправление для этого было бы ввести какую-то систему очередей. Таким образом, я обработал бы элементы в порядке их поступления. Это также дало бы мне возможность отделить мое чтение электронных писем и разобрать / вставить их в базу данных.

Итак, мой вопрос: не стоит ли использовать служебную шину (например, NServiceBus), если я планирую отправлять сообщения только локально? Это означает, что служба, которая будет считывать электронные письма, и служба, которая анализирует / вставляет электронную почту в базу данных, будут находиться на одном компьютере.

Спасибо.

Ответы [ 5 ]

3 голосов
/ 23 ноября 2011

Да, это явно перебор, , тем более что NServiceBus не гарантирует доставку сообщений в порядке .

Вы можете просто использовать Queue<T>, предполагая, что вы знаете, каквыводите сообщения по порядку (это, кажется, там, где у вас возникают проблемы, а не то, что вы используете или не используете очередь или что-то еще; вы должны знать, как получить элементы в очередь в правильном порядке, чтобы начать с).

КИСС и ЯГНИ применяются здесь, целый день, каждый день.

2 голосов
/ 23 ноября 2011

Я бы просто попросил MSMQ за ваши проблемы с постоянством. Как только он будет включен, он гарантированно будет там, независимо от потери мощности компьютера или сбоя какого-либо другого приложения.

1 голос
/ 26 ноября 2011

Это такая работа, где ZeroMQ работает хорошо, и побочным преимуществом для вас является то, что вы узнаете, как использовать инструмент, который можно использовать с другими языками и на других платформах.

1 голос
/ 23 ноября 2011

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

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

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

1 голос
/ 23 ноября 2011

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

В целом: будьте готовы к худшему маркетинговому решению, о котором вы только можете подумать.

...