В CQRS есть 3 типа: Event, Command, Query. Я подготовил несколько примеров на github. Они просто настраивают издателя RabbitMQ для 2 типов: «Событие», «Команда».
Пример: Service.A, Service.B Служба A требует выбора некоторой информации из базы Службы B с идентификатором.
В CQRS, Я использую типы запросов, я хотел бы отправить данные в Service.B и получить результат Service.B.
Могу ли я использовать RabbitMQ или HTTP-клиент для этого?
public async Task PublishAsync<TEvent>(TEvent _event, ICorrelationContext context) where TEvent : IEvent
{
var eventName = _event.GetType().Name;
_logger.LogInformation($"[Published an event] : '{eventName}'");
await _busClient.PublishAsync(_event, ctx => ctx.UseMessageContext(context)
.UsePublishConfiguration(p => p.WithRoutingKey(GetRoutingKey(_event))));
}
public async Task SendAsync<TCommand>(TCommand command, ICorrelationContext context) where TCommand : ICommand
{
var commandName = command.GetType().Name;
_logger.LogInformation($"[Sent a command] : '{commandName}'"); ;
await _busClient.PublishAsync(command, ctx => ctx.UseMessageContext(context)
.UsePublishConfiguration(p => p.WithRoutingKey(GetRoutingKey(command))));
}