RabbitMQ和Webjob SDK。故意破坏功能

RabbitMQ和Webjob SDK。故意破坏功能,rabbitmq,azure-webjobs,azure-webjobssdk,Rabbitmq,Azure Webjobs,Azure Webjobssdk,我有一个webjob,它正在侦听rabbitMQ队列,并将拾取该队列的消息并发送到另一个服务 但是,如果服务失败(返回5xx错误或类似错误),我希望将消息放回队列,稍后再试 我正在使用webjob sdk()的rabbitmq扩展,如果我理解正确,如果webjob“函数”失败,就会发生这种情况。有没有办法故意让它失败?(抛出异常除外) 从扩展源代码: var result = _executor.TryExecuteAsync(new TriggeredFunctionD

我有一个webjob,它正在侦听rabbitMQ队列,并将拾取该队列的消息并发送到另一个服务

但是,如果服务失败(返回5xx错误或类似错误),我希望将消息放回队列,稍后再试

我正在使用webjob sdk()的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);
根据,我们知道WebJobs状态取决于您的WebJob/函数是否在没有任何异常的情况下执行。我们无法以编程方式设置正在运行的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;  
}
公共异步任务TryExecuteAsync(TriggeredFunctionData输入,CancellationToken CancellationToken)
{
IFunctionInstance实例=_instanceFactory.Create((TTriggerValue)input.TriggerValue,input.ParentId);
IDelayedException exception=wait _executor.TryExecuteAsync(实例,cancellationToken);
FunctionResult结果=异常!=空?
新函数结果(exception.exception)
:新函数结果(true);
返回结果;
}
有没有办法故意让它失败?(抛出异常除外)


因此,您的问题的答案是否定的。抛出异常是唯一的方法。

Hm,这很不幸,因为未经处理的异常似乎会触发webjob的重新启动。