首页 > 解决方案 > Rebus 主题的事件处理程序

问题描述

我们知道,Rebus 除了熟悉的基于类型的路由之外,还提供基于主题的路由,尽管我们被告知基于类型的路由遵循相同的原则。然而不幸的是,在我这边,我还没有看到一个很好的例子来说明如何创建一个处理程序来处理发布到特定主题的消息。

假设我按如下方式发布我的消息

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 的消息的处理程序。

问候

标签: rebus

解决方案


这很简单,实际上编写消息处理程序的首选方式是实现IHandleMessage<TMessage>TMessage您的消息类型在哪里。

在你的情况下,那将是

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

然后如何激活消息处理程序取决于您使用的处理程序激活器。“处理程序激活器”是您用来实例化消息处理程序的工具,因此您只需在其中注册处理程序以使其可用于 Rebus。

一些容器集成甚至以注册扩展的形式提供额外的帮助,例如,如果你使用 Autofac,你可以像这样注册你的处理程序:

containerBuilder.RegisterHandler<StudentHandler>();

推荐阅读