我有一个简单的masstransit请求/响应概念证明。它由两个应用程序组成:一个用于消息发送,另一个用于消息消费。 消息发送应用程序如下:
var basicClient=_busControl.CreateRequestClient<IRequest,IResponse>(queueUri, timeout);
return await basicClient.Request(new Request(json), token);
Request
方法将CancellationToken
作为第二个可选参数。
消息使用者具有以下代码:
public async Task Consume(ConsumeContext<IRequest> context)
{
var outputJson = await _longRunningJob.Execute(context.Message.Input, context.CancellationToken);
context.Respond(new Response(outputJson));
}
我们可以看到ConsumeContext
也有一个CancellationToken
字段。
所以问题是:我如何使用这些令牌?
在我的留言发送应用中,我想取消等待回复,
在消息消费者中,我想取消等待_longrunningJob
完成。
Request
方法,然后在Cancel()
上调用CancellationTokenSource
时,我希望该方法可以抛出OperationCancelledException
,但我只是得到了响应<!/ LI>
所以,请告诉我,我在这里做错了,还有另一种处理CancellationTokens的方法,或者它只是一个Masstransit的错误?
答案 0 :(得分:0)
传递给请求的CancellationToken
是取消请求本身,它不会传递给消费者。
我们设法使用以下方法取消消费者: