Обработчик событий для темы Rebus - PullRequest
1 голос
/ 25 октября 2019

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

Предположим, я публикую свое сообщение следующим образом

var message=new Student { StudentID=90008,FirstName="Chilipo",LastName="Mjengo" };

await bus.Advanced.Topics.Publish("rebus_example_topic", message);

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

await bus.Advanced.Topics.Subscribe("rebus_example_topic");

Меня интересует, как мне затем реализовать обработчик, который будет обрабатывать сообщения, опубликованные в rebus_example_topic.

С уважением

1 Ответ

1 голос
/ 25 октября 2019

Это довольно просто, на самом деле ? предпочтительным способом написания обработчиков сообщений является реализация IHandleMessage<TMessage>, где TMessage - ваш тип сообщения.

В вашем случае это будет

public class StudentHandler : IHandleMessages<Student>
{
    public async Task Handle(Student message)
    {
        // handle your message in here
    }
}

Способ активации обработчика сообщений зависит от того, какой активатор обработчика вы используете. «Активатор обработчика» - это то, что вы используете для создания экземпляров обработчиков сообщений, поэтому вам просто нужно зарегистрировать обработчик в нем, чтобы сделать его доступным для Rebus.

Некоторые интеграции контейнеров даже сопровождаются дополнительной помощью в форме регистрации. расширения, например, если вы используете Autofac, вы можете зарегистрировать свой обработчик следующим образом:

containerBuilder.RegisterHandler<StudentHandler>();
...