2017-05-24 1 views
0

메시지를 제거하기 전까지는 어떻게 "기능 앱"에 메시지를 보관할 수 있습니까?Azure Queue 메시지를 제거하지 않고 실행되는 스토리지

queue.DeleteMessage(msg); 

내가이 절차를 자동으로 큐를 읽을 수 있어요 : functions-create-storage-queue-triggered-function 내가 읽을 메시지를 제거 할 때

나는 C#에서 콘솔 응용 프로그램을 구축

, 내가 결정할 수 있습니다. 푸른 말한 것처럼

문제가있다 :

  1. 돌아 가기 저장소 탐색기에서 새로 고침을 클릭하고 메시지가 처리되지 큐에 더 이상되었는지 확인합니다.

이 문맥에서는이 기능을 수행 할 때 메시지를 직접 제거 할 수 없습니다.

실패한 기능을 시뮬레이트하기 위해 Throw new Exception("failed");을 시도했지만 어쨌든 메시지가 제거되었습니다.

메시지를 제거하기 전까지는이 메시지를 대기열에 보관하려고합니다 (기능이 끝날 때까지).

답변

2

실패한 기능을 시뮬레이트하기 위해 Throw new Exception("failed");을 시도했지만 어쨌든 메시지가 제거되었습니다.

메시지가 제거되지 않고 초 단위로 표시됩니다 (visibility-timeout). WebJob SDK의 컨텍스트에서 코드를 실행하기 때문에 .DeleteMessage()을 직접 호출 할 수 없습니다. 대기열 클라이언트가 아닌 메시지 만 전달됩니다.

함수가 성공적으로 완료되면 함수 런타임 (WebJobs SDK)에서 메시지가 제거됩니다.

참조 :
https://stackoverflow.com/a/40011705/4148708
https://github.com/Azure/azure-webjobs-sdk/issues/1040

편집 : 큐에서 카운트가도 물린 수 있습니다. 런타임 메시지 dequeueCount 속성이 5

더이보기에 도달하면 포이즌 큐 (QueueName-poison)로 메시지를 이동합니다 :
https://github.com/Microsoft/azure-docs/blob/master/articles/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to.md#automatic-poison-message-handling

+0

사실, 나는 "던져"와 성공 메시지 1 시도 성공 메시지는 작동하고 사라지지만 실패한 메시지는 'myqueue-poison'에 있습니다. 그러나'NextVisibleTime = "Null"' –

+1

그것은 dequeued 5 번 이미, SDK는'dequeueCount' 속성이 5에 도달하면 포이즌 큐로 옮길 것입니다. 5라고 생각합니다. , 문서를 확인하십시오. – evilSnobu

+1

예, 5입니다. 다음과 같이 인용 할 수 있습니다. :) --https : //github.com/Microsoft/azure-docs/blob/master/articles/app-service-web/websites-dotnet-webjobs-sdk-storage- queues-how-to.md # 자동 - 독 - 메시지 처리 – evilSnobu

관련 문제