2017-09-08 3 views
1
public class RequestConsumer : 
    IConsumer<StartFlowCommand>, 
    IConsumer<List<StartAndNextCommand>> 
{ 
    readonly IWorkFlowHandler _flowHandler; 
    public RequestConsumer(IContainer container) 
    { 
     _flowHandler = container.Resolve<IWorkFlowHandler>(); 
    } 

    public async Task Consume(ConsumeContext<StartAndNextCommand> context) 
    { 
     var result =await _flowHandler.WorkFlowStartNext(context.Message); 
     await context.RespondAsync(result); 
    } 


    public async Task Consume(ConsumeContext<List<StartAndNextCommand>> context) 
    { 
     var result = await Task.Run(() => _flowHandler.WorkFlowStartNextBatch(context.Message)); 
     await context.RespondAsync(result); 
    } 

메시지 유형 StartAndNextCommand는 소비 할 수 있지만 목록의 유형은 사용할 수 없으며 그 이유는 무엇입니까?RabbitMq 소비자가 소비하지 않음

+0

하지만 유형을 게시해야 List 는 사용할 수 없습니다 – Andy

답변

1

이것은 의도적으로 설계된 것입니다. 우리는 하나의 메시지만을 소비 할 수 있습니다. 당신처럼, 새로운 계약을 체결 할 수

public interface StartAndNextBatch 
{ 
    IList<StartAndNextCommand> Commands { get; } 
} 

하고 해당 메시지 유형

public async Task Consume(ConsumeContext<StartAndNextBatch> context) 

을 위해 소비자를 가지고 있지만 당신은 또한의 메시지 유형

await bus.Publish<StartAndNextBatch>(
    new { Commands = ... } 
); 
+0

괜찮습니다. 정말 고마워요! – Andy

관련 문제