У меня есть служба Windows с планировщиком и потребителем заданий. Не могу понять, как поставить задание в очередь, IPublishEndpoint из примера — это служба с ограниченной областью действия, поэтому я не могу ее внедрить.
Мои попытки
Код: Выделить всё
clientFactory.CreateRequestClient
Код: Выделить всё
public class ImportScheduler(
IScheduleConfig config,
ILogger logger,
IClientFactory clientFactory)
: CronJobService(config.CronExpression, config.TimeZoneInfo, logger)
{
protected override async Task DoWork(CancellationToken cancellationToken)
{
var requestClient = clientFactory.CreateRequestClient();
var jobId = NewId.Next();
await requestClient.GetResponse(new ImportRequested(
jobId.ToGuid(),
Guid.Parse("7718D173-1F3F-4F8C-B282-5B5A1C183BCE")), cancellationToken);
}
}
MassTransit.EventExecutionException: Ошибка выполнения StartJobAttempt (Event)
MassTransit.PayloadNotFoundException: полезная нагрузка не найдена: MassTransit.MessageSchedulerContext
- Пыталась создать IPublishEndpoint из IBus с помощью GetPublishSendEndpoint, получен ISendEndpoint
Код: Выделить всё
public class ImportScheduler(
IScheduleConfig config,
ILogger logger,
IBus bus)
: CronJobService(config.CronExpression, config.TimeZoneInfo, logger)
{
protected override async Task DoWork(CancellationToken cancellationToken)
{
var publishEndpoint = await bus.GetPublishSendEndpoint();
var jobId = NewId.Next();
await publishEndpoint.Send(new
{
JobId = jobId,
Job = new ImportRequested(
jobId.ToGuid(),
Guid.Parse("7718D173-1F3F-4F8C-B282-5B5A1C183BCE"))
}, cancellationToken);
}
}
- Используемый bus.publish напрямую, но получил ошибку, аналогичную первой.
{
// some consumers
x.AddConsumer(cc =>
{
cc.Options(xx =>
xx.SetRetry(r => r.None()).SetJobTimeout(TimeSpan.FromHours(3)).SetConcurrentJobLimit(1));
});
x.SetJobConsumerOptions();
x.AddJobSagaStateMachines();
x.SetInMemorySagaRepositoryProvider();
x.SetKebabCaseEndpointNameFormatter();
x.UsingAzureServiceBus((context, cfg) =>
{
cfg.Host(configuration.GetValue("AzureServiceBus"));
cfg.ConfigureEndpoints(context);
});
});
[/code]
Если я изменю своего потребителя с IJobConsumer на IConsumer, я смогу поставить его в очередь с помощью IBus.Publish
Подробнее здесь: https://stackoverflow.com/questions/790 ... on-faulted
Мобильная версия