【问题标题】:Handle Publish/Subscribe in Rebus with Azure Service Bus使用 Azure 服务总线在 Rebus 中处理发布/订阅
【发布时间】:2018-02-26 23:12:06
【问题描述】:

我正在研究 Rebus 并将其与 Azure 服务总线一起使用。将它与 regalure Queues 一起使用很容易,但是当我想使用 Topic 时,我无法让它工作。

这里有没有完成设置并将其与主题/订阅一起使用。这是我目前所拥有的。

        static void Main(string[] args)
    {
        _bus1 = InitializeBus(System.Environment.MachineName);
        _bus2 = InitializeBus(System.Environment.MachineName + "_2");
        _bus3 = InitializeBus();

        Run();
        Console.WriteLine("Press Enter to exit!");
        Console.ReadLine();
    }

    private static void Run()
    {
        try
        {
            _bus1.Handle<string>((b, c, m) => { Console.WriteLine(m); return null; });
            _bus2.Handle<string>((b, c, m) => { Console.WriteLine(m); return null; });
            _bus1.Bus.Subscribe<string>();
            _bus2.Bus.Subscribe<string>();
            _bus3.Bus.Publish("Publish test message");
        }
        catch (Exception ex)
        {
            throw;
        }
    }

    private static BuiltinHandlerActivator InitializeBus(string queueName = null)
    {
        var activator = new BuiltinHandlerActivator();

        if(string.IsNullOrEmpty(queueName))
            Configure.With(activator)
                .Transport(t => t.UseAzureServiceBusAsOneWayClient(connectionString))
                .Options(o => { o.SetNumberOfWorkers(10); o.SetMaxParallelism(10); })
                .Start();
        else
            Configure.With(activator)
                .Transport(t => t.UseAzureServiceBus(connectionString, queueName).EnablePartitioning().DoNotCreateQueues())
                .Options(o => { o.SetNumberOfWorkers(10); o.SetMaxParallelism(10); })
                .Start();

        return activator;
    }

首先,我创建所有总线。我正在使用 DontCreateQueues() 因为我不希望在我的根目录中创建重复的队列,但只能在作为订阅的主题下创建。 然后我设置了总线,发布工作正常,在这个主题下创建了一个主题和 2 个订阅,每个订阅中有 1 条消息。但是消息永远不会被收集。

如果我在配置中删除 DontCreateQueues() 方法,代码可以工作,但随后在根目录中创建了 2 个队列与主题,它是 2 个订阅,但我不能这样。

最好的问候 马格努斯

【问题讨论】:

    标签: rebus


    【解决方案1】:

    Rebus 通过为您订阅的每个主题创建订阅来使用主题,然后配置订阅以将接收到的消息转发到总线的输入队列。

    如果总线没有具有预期名称的输入队列(由 Rebus 创建的或者您手动创建的),则将无法正常工作。

    DontCreateQueues() 存在的原因是允许专家用户配置他们的队列设置,超出 Rebus 能够(和愿意)做的事情。它需要关于 Rebus 期望你的队列实体如何布局的非常详细的知识,所以我建议几乎任何人不要手动创建任何东西,然后简单地让 Rebus 设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多