нагугленный пример
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
using Dapper;
using MassTransit;
using MassTransit.EntityFrameworkIntegration;
using MassTransit.Saga;
using Npgsql;
public class YourSagaInstance : SagaStateMachineInstance
{
public Guid CorrelationId { get; set; }
public string CurrentState { get; set; }
// Добавьте дополнительные свойства саги
}
public class YourSaga : MassTransitStateMachine
{
// Определите состояния и действия для вашей саги
}
public class YourSagaRepository : ISagaRepository
{
private readonly IDbConnection _connection;
public YourSagaRepository(string connectionString)
{
_connection = new NpgsqlConnection(connectionString);
}
public async Task> Find(Guid correlationId)
{
var sql = "SELECT CorrelationId FROM YourSagaInstance WHERE CorrelationId = @correlationId";
return await _connection.QueryAsync(sql, new { correlationId });
}
// Реализуйте остальные методы ISagaRepository
}
class Program
{
static async Task Main(string[] args)
{
var repository = new YourSagaRepository("YourPostgreConnectionString");
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(new Uri("rabbitmq://localhost"), h => { /* конфигурация хоста */ });
cfg.UseSerilog();
cfg.UseMessageRetry(r => r.Interval(3, 100));
cfg.ReceiveEndpoint(host, "your_queue", e =>
{
e.PrefetchCount = 16;
e.StateMachineSaga(new YourSaga(), repository);
});
});
}
}