MassTransit,在不同的虚拟主机上使用UseMessageScheduler

时间:2018-08-10 05:46:03

标签: masstransit

是否可以将UseMessageScheduler配置为使用与其总线不同的虚拟主机?

在尝试实现此操作时,我遇到“找不到指定地址的主机”。

这是我的总线配置:

_myBus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
    var host = sbc.Host(new Uri("rabbitmq://localhost/MyVirtualHostName"), h =>
    {
        h.Username("guest");
        h.Password("guest");
    });

    sbc.ReceiveEndpoint(host, "MySaga", ep =>
    {
        var machine = new MyStateMachine();
        ep.StateMachineSaga(machine, _sagaRepository);

        sbc.UseMessageScheduler(new Uri("rabbitmq://localhost/Quartz"));
    });
});

我还检查了MassTransit.QuartzService是否正在运行并且正在使用“ rabbitmq:// localhost / Quartz”。

当我在同一虚拟主机上使用调度时,它可以正常工作。更清楚地说,我的意图是使用相同的QuartzService在不同的虚拟主机上拥有不同的应用程序。

我使用:
MT 5.1.4
自动同名5.1.3
MassTransit.Quartz 5.1.4

任何帮助都非常感激:)

1 个答案:

答案 0 :(得分:0)

由于@ chris-patterson的评论,我通过在总线内添加另一个主机来解决此问题。这是我的配置:

_myBus = Bus.Factory.CreateUsingRabbitMq(sbc =>
 {
     var quartzHost = sbc.Host(new Uri("rabbitmq://localhost"), h =>
     {
        h.Username("guest");
        h.Password("guest");
     });

     var host = sbc.Host(new Uri("rabbitmq://localhost/MyVirtualHostName"), h =>
     {
        h.Username("guest");
        h.Password("guest");
     });

     sbc.ReceiveEndpoint(host, "MySaga", ep =>
     {
         var machine = new MyStateMachine();
         ep.StateMachineSaga(machine, _sagaRepository);

         sbc.UseMessageScheduler(new Uri("rabbitmq://localhost/Quartz"));
     });
});