我有一个正在侦听rabbitMQ队列的webjob,它会选择队列的消息并发布到另一个服务。
但是,如果服务失败(返回5xx错误或类似错误),我想将消息放回队列中,稍后再试。
我正在使用对webjob sdk(https://github.com/Sarmaad/WebJobs.Extensions.RabbitMQ/tree/master/WebJobs.Extensions.RabbitMQ)的rabbitmq扩展,如果我理解正确,如果webjob"功能"失败。有没有办法故意失败? (除了抛出例外)
来自扩展源代码:
var result = _executor.TryExecuteAsync(new TriggeredFunctionData{TriggerValue = triggerValue}, CancellationToken.None).Result;
if (result.Succeeded)
_channel.BasicAck(args.DeliveryTag, false);
else
_channel.BasicNack(args.DeliveryTag, false, false);
答案 0 :(得分:1)
根据Azure WebJob SDK,我们知道WebJobs状态取决于您的WebJob / Function是否在没有任何异常的情况下执行。我们无法以编程方式设置正在运行的WebJob的最终状态。
来自TriggeredFunctionExecutor类的代码。
public async Task<FunctionResult> TryExecuteAsync(TriggeredFunctionData input, CancellationToken cancellationToken)
{
IFunctionInstance instance = _instanceFactory.Create((TTriggerValue)input.TriggerValue, input.ParentId);
IDelayedException exception = await _executor.TryExecuteAsync(instance, cancellationToken);
FunctionResult result = exception != null ?
new FunctionResult(exception.Exception)
: new FunctionResult(true);
return result;
}
有没有办法故意失败? (除了抛出例外)
所以问题的答案是否定的。抛出异常是唯一的方法。