我们知道,除了熟悉的基于类型的路由之外,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");
我的兴趣是了解如何实现处理程序,该处理程序将处理发布到rebs_example_topic的消息。
问候
实际上这很简单🙂编写消息处理程序的首选方式是实现IHandleMessage<TMessage>
,其中TMessage
是您的消息类型。
在你的情况下,那将是
public class StudentHandler : IHandleMessages<Student>
{
public async Task Handle(Student message)
{
// handle your message in here
}
}
然后如何激活消息处理程序取决于您使用的处理程序激活程序。"处理程序激活器"是您用来实例化消息处理程序的,因此您只需要在其中注册处理程序,即可使其对Rebus可用。
一些容器集成甚至以注册扩展的形式提供了额外的帮助,因此,例如,如果您正在使用Autofac,您可以这样注册您的处理程序:
containerBuilder.RegisterHandler<StudentHandler>();