Я работаю с саг в ребус и из моего опыта с NServiceBus вы могли бы ответить на создателю Саги, чтобы дать обновления, что-то вроде этого:Ребус эквивалентно NServiceBus Saga ReplyToOriginator
Saga<>.ReplyToOriginator
творю Я не см. эквивалентный способ сделать это с помощью ReBus. Есть ли способ сделать это, и если нет, то, что является хорошим шаблоном (кроме опроса инициатора), я могу использовать то, что достигнет того же самого? Примером является попытка создать клиента и клиента, который хочет знать, когда он создан, прежде чем пытаться изменить его адрес.
Вот тривиальный пример сценария клиента я быстро собрать:
public class CreateCustomerSaga : Saga<CreateCustomerData>,
IAmInitiatedBy<CreateCustomerCommand>,
IHandleMessages<CustomerUniqunessCheckResult>
{
private readonly IBus _bus;
private readonly ICustomerResourceAccess _customerResourceAccess;
public CreateCustomerSaga(IBus bus, ICustomerResourceAccess customerResourceAccess)
{
_bus = bus;
_customerResourceAccess = customerResourceAccess;
}
public override void ConfigureHowToFindSaga()
{
Incoming<CustomerUniqunessCheckResult>(x => x.IsCustomerUnique).CorrelatesWith(y => y.CustomerId);
}
public void Handle(CreateCustomerCommand message)
{
Data.CustomerId = message.CustomerId;
Data.CustomerName = message.CustomerName;
_bus.Send(new CheckCustomerUniquenessCommand(message.CustomerId));
}
public void Handle(CustomerUniqunessCheckResult message)
{
if (message.IsCustomerUnique)
{
_customerResourceAccess.CreateCustomer(Data.CustomerId, Data.CustomerName);
// This is what seems to be missing from ReBus to reply to the original sender
_bus.?(new CustomerCreatedEvent(Data.CustomerId));
}
else
{
// This is what seems to be missing from ReBus to reply to the original sender
_bus.?(new CustomerAlreadExistsEvent(Data.CustomerId));
}
}
}
public class CustomerCreatedEvent
{
public Guid CustomerId { get; set; }
public CustomerCreatedEvent(Guid customerId)
{
CustomerId = customerId;
}
}
public class CustomerAlreadExistsEvent
{
public Guid CustomerId { get; set; }
public CustomerAlreadExistsEvent(Guid customerId)
{
CustomerId = customerId;
}
}
public class CustomerUniqunessCheckResult
{
public bool IsCustomerUnique { get; set; }
}
public class CheckCustomerUniquenessCommand
{
public CheckCustomerUniquenessCommand(Guid customerId)
{ }
}
public interface ICustomerResourceAccess
{
void CreateCustomer(Guid customerId, string customerName);
}
public class CreateCustomerCommand
{
public Guid CustomerId { get; set; }
public string CustomerName { get; set; }
}
public class CreateCustomerData : ISagaData
{
public CreateCustomerData()
{
Id = Guid.NewGuid();
}
public Guid CustomerId { get; set; }
public string CustomerName { get; set; }
public Guid Id { get; set; }
public int Revision { get; set; }
}
У вас есть какой-либо другой код ? Не могли бы вы дать краткий обзор технологии, которую вы описываете? Я занимаюсь программированием в течение последних 18 лет, я понятия не имею, о чем вы говорите. Если это что-то новое, было бы неплохо, если бы вы могли связать его с существующими технологиями, которые в настоящее время доступны. – Neolisk
Я добавил пример, для технологии см. Теги (ReBus, C#) –