Несколько потребителей одного и того же типа сообщения на одной конечной точке приема - PullRequest
0 голосов
/ 14 февраля 2019

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

cfg.ReceiveEndpoint(host, "MyQueue", e =>
            {
                logger.LogInformation("Consuming enabled.");

                //register consumers with middleware components
                e.Consumer<MyConsumer>(context);
                e.Consumer<MyOtherConsumer>(context);
            })

public class MyConsumer : IConsumer<MyMessage> {}

public class MyOtherConsumer : IConsumer<MyMessage> {}

Приведенное выше решение работает, каждый потребитель получаетсообщение.Даже если не получится (исключение).

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

1 Ответ

0 голосов
/ 14 февраля 2019

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

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

ec.Consumer<MyConsumer>(context, c => c.UseRetry(r => r.Interval(2,1000)));
ec.Consumer<MyOtherConsumer>(context, c => c.UseRetry(r => None()));

Это было одной из основных причин того, что MT был переписан для построения вокруг конвейеров (это было много лет назад, но тем не менее) и какGreenPipes создан.

В качестве дополнительного примечания вы можете поместить каждого потребителя в отдельную конечную точку и опубликовать сообщение, которое даст каждому потребителю его собственную копию - и собственный контекст выполнения (включая обработку ошибок повторов и посредников).) если нужно.

...