RabbitMQ和Webjob SDK。故意失败的功能

时间:2017-08-09 11:21:33

标签: rabbitmq azure-webjobs azure-webjobssdk

我有一个正在侦听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);

1 个答案:

答案 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;  
}
  

有没有办法故意失败? (除了抛出例外)

所以问题的答案是否定的。抛出异常是唯一的方法。