Вопрос новичка - что мне не хватает?Имеются ли какие-либо примеры Saga для dotnetcore 2.2?
У меня есть базовая сквозная система, работающая нормально с сообщениями, проходящими через контейнеры в docker-compose, но добавление Saga кажется сложной задачей -
Q.Я пропускаю зависимость планировщика?В MassTransit 5.5.5, cfg.UseInMemoryMessageScheduler ();не компилируется.
Что-то странное происходило, мне пришлось явно пометить свой конечный автомат как ISaga
MassTransit.ConfigurationException: не удалось создать соединитель конечного автомата для Model.WorkflowExecutionStateMachine --> MassTransit.ConfigurationException: конечный автомат не был должным образом настроен: workflowapi_1 |[Сбой] ExecutingTask не был указан
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
// Register MassTransit
services.AddMassTransit(x =>
{
x.AddConsumer<WorkflowTaskConsumer>();
// required?
x.AddSaga<WorkflowExecutionSaga>();
x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var rabbitMQHostName = $"rabbitmq://{configuration["RabbitMQHostName"]}";
Console.Out.WriteLineAsync($"Starting Workflow Receiver... {rabbitMQHostName}/{QueueNames.ExeuteWorkflowTaskQueue}");
var host = cfg.Host(new Uri(rabbitMQHostName), hostConfig =>
{
hostConfig.Username("guest");
hostConfig.Password("guest");
});
// A basic message works OK
cfg.ReceiveEndpoint(host, QueueNames.ExeuteWorkflowTaskQueue, ep =>
{
ep.PrefetchCount = 1;
ep.UseMessageRetry(mr => mr.Interval(1000, 2));
ep.ConfigureConsumer<WorkflowTaskConsumer>(provider);
});
// Doesn't like this
cfg.ReceiveEndpoint(host, QueueNames.WorkflowStateMachineSagaQueueName, ep =>
{
ep.PrefetchCount = 1;
ep.UseMessageRetry(mr => mr.Interval(1000, 2));
ep.StateMachineSaga(new WorkflowExecutionSaga(), new InMemorySagaRepository<WorkflowExecutionStateMachine>());
});
}));
cfg.UseInMemoryMessageScheduler(); // doesn't compile!
});
}
Шина запускается следующим образом -
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime lifetime)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios,
// see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseMvc();
var bus = app.ApplicationServices.GetService<IBusControl>();
var busHandle = TaskUtil.Await(() =>
{
return bus.StartAsync();
});
lifetime.ApplicationStopping.Register(() =>
{
busHandle.Stop();
});
}
Сведения об исключении
Необработанное исключение: MassTransit.ConfigurationException: Не удалось создатьсоединитель конечного автомата для Rapid.Workflow.Api.Model.WorkflowExecutionStateMachine ---> MassTransit.ConfigurationException: конечный автомат не был правильно настроен: workflowapi_1 |[Сбой] В ExecutingTask не было указано workflowapi_1 |at Automatonymous.StateMachineConfigurationResult.CompileResults (IEnumerable 1 results)
workflowapi_1 | at Automatonymous.StateMachineConnectors.StateMachineConnector
1.StateMachineEvents () + MoveNext () workflowapi_1 | at System.Collections.Generic.List 1.AddEnumerable(IEnumerable
1 перечислимый) workflowapi_1 |at System.Linq.Enumerable.ToList [TSource] (IEnumerable 1 source)
workflowapi_1 | at Automatonymous.StateMachineConnectors.StateMachineConnector
1..ctor (SagaStateMachine 1 stateMachine)
workflowapi_1 | --- End of inner exception stack trace ---
workflowapi_1 | at Automatonymous.StateMachineConnectors.StateMachineConnector
1..ctor (SagaStateMachine 1 stateMachine)
workflowapi_1 | at Automatonymous.SagaConfigurators.StateMachineSagaConfigurator
1..ctor (SagaStateMachine 1 stateMachine, ISagaRepository
1 хранилище, наблюдатель ISagaConfigurationObserver_1)| в MassTransit.AutomatonymousReceiveEndpointExtensions.StateMachineSaga [TInstance] (конфигуратор IReceiveEndpointConfigurator, хранилище SagaStateMachine 1 stateMachine, ISagaRepository
1, настройка Action`1) workflowapi_1 | в Rapid.Workflow.Workflow.Api / Startup.cs: строка 74
Зависимости
<PackageReference Include="Automatonymous" Version="4.1.6" />
<PackageReference Include="MassTransit" Version="5.5.5" />
<PackageReference Include="MassTransit.RabbitMQ" Version="5.5.5" />
<PackageReference Include="MassTransit.AspNetCore" Version="5.5.5" />
<PackageReference Include="MassTransit.Automatonymous" Version="5.5.5" />
<PackageReference Include="MassTransit.Extensions.DependencyInjection" Version="5.5.5" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
Спасибо за любые советы или идеи -