MassTransit - Отправка и публикация: между - PullRequest
0 голосов
/ 05 сентября 2018

Я понял разницу между Send (~ 1 потребитель звонил) и Publish (все потребители звонили). В моем окружении я бы хотел что-то среднее.

Например:

Посылка подготовлена ​​и готова к отправке. Событие может быть отправлено «ParcelPrepared». В этом случае должны быть запущены 2 действия: «Построить счет» и «Отправить письмо». Но каждое действие следует вызывать только один раз.

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

Если я использую Publish, будет вызван весь процесс, и я смогу отправить N электронных писем или создать N счетов, и я потеряю сообщения, если процесс не работает.

Я что-то пропустил?

EDIT:

Вот схема того, чего я хотел бы достичь.

Objective

Многие процессы «Подготовка посылки» могут выдавать сообщение (команда / событие, которое я не знаю) «Подготовка посылки».

Различные потребители («Выставление счетов» и «Отправитель электронной почты») хотят получать уведомления при отправке сообщения. Каждый потребитель создается несколько раз. Только один из каждого потребителя должен быть уведомлен, чтобы избежать одновременного обращения с каждым потребителем.

Каждый потребитель должен иметь возможность получать пропущенные сообщения, если они по какой-то причине не работают, даже если не работает только часть потребителя («Выставление счетов» вверх и «Отправитель электронной почты» вниз, оба вниз).

1 Ответ

0 голосов
/ 05 сентября 2018

Ваше ParcelPrepared - событие, и оно должно быть опубликовано . Затем вы можете иметь двух потребителей в этих разных процессах, которые будут отправлять команды BuildInvoice и SendEmail. Потребители этих команд выполнят эту работу.

Вы никогда не потеряете сообщения, поскольку они помещаются в очереди конечных точек и будут оставаться там до тех пор, пока не будут использованы.

...