2017-01-25 5 views
1

Je souhaite utiliser l'API d'ordonnancement Masstransit pour les applications multi-locataires. Je dois envoyer des messages récurrents par locataire.Masstransit - Planification d'un message récurrent prenant en charge la multitenancy

var schedule1 = new MySchedule("1 * * * * ?", "Tenant 1"); 
var schedule2 = new MySchedule("6 * * * * ?", "Tenant 2"); 

endPoint.Result.ScheduleRecurringSend(sendToUri, schedule1, new OrderCommand 
{ 
    Id = Guid.NewGuid().ToString(), 
    Name = "Tenant 1" 
}); 

endPoint.Result.ScheduleRecurringSend(sendToUri, schedule2, new OrderCommand 
{ 
    Id = Guid.NewGuid().ToString(), 
    Name = "Tenant 2" 
}); 


public class MySchedule : DefaultRecurringSchedule 
{ 
    public MySchedule(string cronExpression, string description) 
    { 
     CronExpression = cronExpression; 
     Description = description; 
    } 
} 

Le problème est que le planificateur utilise le nom de classe « MyScheduler » comme nom de travail et ne peut pas envoyer deux messages récurrents en utilisant MyScheduler. Existe-t-il un moyen d'implémenter le multitenancy avec l'API d'ordonnancement Masstransit?

Répondre

1

Modifiez le ScheduleId et/ou ScheduleGroup dans votre constructeur (pour votre classe MySchedule) pour qu'il soit spécifique au locataire, et il changera l'identifiant utilisé par Quartz.

public class MySchedule : DefaultRecurringSchedule 
{ 
    public MySchedule(string cronExpression, string description, string tenantId) 
    { 
     CronExpression = cronExpression; 
     Description = description; 

     ScheduleId = "MyScheduleForTenant" + tenantId; 
    } 
} 
+0

Oui, c'est ça. Je dois utiliser l'interface RecurringSchedule au lieu de DefaultRecurringSchedule et il modifie l'identifiant Quartz. –