>

서비스 버스 대기열 및 Azure 기능을 사용하고 있습니다. 일부 비즈니스 로직에 따라 실패가 다르게 처리됩니다. 일부 메시지는 데드 레터 큐로 전송해야하고, 다른 메시지는 수정 한 다음 명시 적으로 큐에 다시 추가해야합니다.

다음 코드를 고려하십시오 :

[FunctionName("ServiceBusTask")]
public static async Task Run(
    [ServiceBusTrigger("myQueue", Connection = "myConnectionString")]
    Message message, 
    MessageReceiver messageReceiver, 
    //MessageSender messageSender, 
    ILogger log)
{
    //some business logic that can fail
    if( condition for dead letter)
    {
        await messageReceiver.DeadLetterAsync(message.SystemProperties.LockToken);
    }
    else if( condition for a manual retry)
    {
        QueueClient qc = new Queueclient("myQueue", "myConnectionString");
        Message updatedMessage = GetUpdatedMessage(message);
        await qc.SendAsync(updatedMessage);
        //await messageSender.SendAsync(updatedMessage);
    }
}

messageReceiver는 데드 레터 큐로 메시지를 보내기 위해 잘 작동하지만 QueueClient 를 만들어야한다고 귀찮게합니다.  메시지를 대기열에 보냅니다. 그 MessageSender 를 알고  존재하지만 매개 변수에 추가하려고했지만 오류가 발생했습니다.

Cannot bind parameter 'messageSender' to type MessageSender. Make sure the parameter Type is supported by the binding. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

시작 코드에 대해 왜 말하는지 잘 모르겠습니다. 그런 메시지가 없으므로 오류 메시지가 업데이트되지 않은 것 같습니다 ...

Azure webjobs SDK에서이 문제 를 읽으면 지원되어야한다는 인상을 받았습니다 (잘못 읽고 있으면 정정하십시오).

내 질문

MessageSender 를 사용할 수 있습니까  이처럼 작동하면 작동하려면 어떻게해야하나요?

  • 답변 # 1

    함수가 ServiceBusTrigger 를 사용하고 있습니다 MessageReceiver 를 지원합니다. 그러나 MessageSender 는 아닙니다.  바인딩- ServiceBus 에서 지원합니다.  출력 바인딩. 함수에 추가 할 수 있습니다. (예)

관련 자료

  • 이전 aws lambda - Amazon API Gateway로 POST URL 인코딩 양식
  • 다음 json - v-for 루프에서 배열의 모든 객체를 표시 할 수 없으며 마지막 객체 만 표시