MassTransit-ScheduleRecurringSend问题

时间:2018-09-07 08:40:56

标签: masstransit

我有一个ID用来通过REST API为工作计划提供适配器的服务。计划的作业是对各种其他服务进行HTTP调用。

我具有以下实现方式:

LOC_RANK    b       c       d       rownum  flg
---------   ------  ------  ------  ------  ---
1           (null)  (null)  (null)  1       E
1           a       b       c       2       N
2           a       b       c       3       E
3           (null)  (null)  (null)  4       N
4           (null)  (null)  (null)  5       E
4           (null)  (null)  (null)  6       N
5           a       b       c       7       E
6           a1      b1      c1      8       N
7           a       a       c       9       E 
7           a       a       c       10      N

但是,我发现ScheduleRecurringSend方法不能始终如一地将作业持久保存到Db。这是断断续续的。我尝试过更改ScheduleId和Group,但这会产生间歇性的结果。我在跳过的队列中收到很多消息。

我在Azure Service Fabric中使用了该服务的改进版本,以确保只有一个服务知道Quartz DB的位置。

https://github.com/MassTransit/MassTransit-Quartz

这种方法错误吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您使用不正确。

首先,您需要configure总线,以便它使用正确的调度程序地址:

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

    cfg.UseMessageScheduler(
        new Uri($"{_massTransitSettings.Protocol}://{_massTransitSettings.RabbitMqHost}/scheduler"));
});

然后,您需要正确使用ScheduleRecurringSend。第一个参数不是调度程序Uri,而是将获取调度消息的服务端点的Uri。必须在总线配置中指定调度程序Uri。