Rebus - Rabbitmq 映射指定 namespace/assembly 中的所有对象

Rebus - Rabbitmq map all the objects in specified namespace/assembly

在我的应用程序中,我使用 Rabbitmq 配置 Producer。 我的配置如下所示

using (var adapter = new BuiltinHandlerActivator())
      {

        Configure.With(adapter)
            .Logging(l => l.ColoredConsole(LogLevel.Warn))
            .Transport(t => t.UseRabbitMqAsOneWayClient(connection))
            .Routing(r => r.TypeBased().MapAssemblyOf<TestClass>(queueName))
            .Start();
        await adapter.Bus.Publish(new TestClass() { Name = "TestName123" });
      }

我想像 TestClass 一样映射许多其他 Dto。 我可以在 Routing(..) 中指定 namespace/assembly 吗?以便映射该名称空间下的所有 objects/dtos? 其他类如下

public class TestClass
  {
    public String Name { get; set; }
    public String Date { get; set; }
  }

public class NewTest 
  {
    public string Name { get; set; }
  }

另一方面,我正在使用 WindsorContainer,它看起来像下面

public class Handle : IHandleMessages<TestClass>,IHandleMessages<NewTest>
  {
    Task IHandleMessages<TestClass>.Handle(TestClass message)
    {
      return null;
    }

    Task IHandleMessages<NewTest>.Handle(NewTest message)
    {
      return null;
    }
  }

当你

await bus.Publish(new TestClass(...));

您无需映射任何内容,因为使用 Rebus 发布会将事件消息的副本分发给订阅的任何人。

因此,要接收 TestClass 的已发布实例,您的订阅者只需

await bus.Subscribe<TestClass>();

这将在 RabbitMQ 中创建必要的绑定,以便将所有已发布的该类型事件分发给订阅者。

我鼓励您转到 RabbitMQ 的管理控制台(通常托管在 http://<rabbitmq-hostname>:15672 上)并查看拓扑结构 before/after 订阅。