【问题标题】:CreateQueues and Exchanges - MassTransit创建队列和交换 - MassTransit
【发布时间】:2017-05-09 02:23:21
【问题描述】:

我将 massTransit 与 RabbitMQ 一起使用。使用 massTransit 发布消息将为我的消息类型创建一个交换。并且公共交通消费者将创建队列并绑定到交换。太好了,让事情变得简单。

在查看 massTransit 之前,我使用 rabbitMQ 的 api 创建队列、交换和绑定。我会让发布者和消费者都运行相同的设置代码。因此,无论谁先运行所有队列,无论应用程序的哪个部分先运行,都将创建交换和绑定。这在开发环境中运行时非常棒。

我想知道 massTransit 是否可以实现类似的目标?

【问题讨论】:

    标签: rabbitmq masstransit


    【解决方案1】:

    与 MassTransit 应该相同:消费者将创建绑定到他们消费的消息交换的队列(名称与消息类型相同)。 发布者将创建具有与他们发布的消息类型相同名称的交换。 请记住,如果发布或使用的消息具有超类或实现接口,MassTransit 将创建相同的层次结构,创建和绑定与您的消息类层次结构一样多的交换。

    【讨论】:

      【解决方案2】:

      您可以使用 HareDu 2 通过以下代码实现此目的。这适用于 Autofac 和 .NET Core DI。在此处查看文档:https://github.com/ahives/HareDu2

      // Create a queue
      var result = _container.Resolve<IBrokerObjectFactory>()
                      .Object<Queue>()
                      .Create(x =>
                      {
                          x.Queue("fake_queue");
                          x.Configure(c =>
                          {
                              c.IsDurable();
                              c.AutoDeleteWhenNotInUse();
                              c.HasArguments(arg =>
                              {
                                  arg.SetQueueExpiration(1000);
                                  arg.SetPerQueuedMessageExpiration(2000);
                              });
                          });
                          x.Targeting(t =>
                          {
                              t.VirtualHost("fake_vhost");
                              t.Node("fake_node");
                          });
                      });
      
      
      // Create an exchange
      var result = _container.Resolve<IBrokerObjectFactory>()
                      .Object<Exchange>()
                      .Create(x =>
                      {
                          x.Exchange("fake_exchange");
                          x.Configure(c =>
                          {
                              c.IsDurable();
                              c.IsForInternalUse();
                              c.HasRoutingType(ExchangeRoutingType.Fanout);
                              c.HasArguments(arg =>
                              {
                                  arg.Set("fake_arg", "fake_arg_value");
                              });
                          });
                          x.Targeting(t => t.VirtualHost("fake_vhost"));
                      });
      
      // Create a binding
      var result = _container.Resolve<IBrokerObjectFactory>()
                      .Object<Binding>()
                      .Create(x =>
                      {
                          x.Binding(b =>
                          {
                              b.Source("fake_exchange");
                              b.Destination("fake_queue");
                              b.Type(BindingType.Exchange);
                          });
                          x.Configure(c =>
                          {
                              c.HasRoutingKey("your_routing_key");
                              c.HasArguments(arg =>
                              {
                                  arg.Set("your_arg", "your_arg_value");
                              });
                          });
                          x.Targeting(t => t.VirtualHost("fake_vhost"));
                      });
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多