여기에 나와있는 두 가지 해결책이 있습니다.
- 테이블 저장소를 확인하기 위해 중간에 큐 트리거 기능을 추가하십시오. 테이블에 항목이 없으면 테이블과 두 번째 큐에 항목을 추가하십시오.
function.json
{
"disabled": false,
"bindings": [
{
"name": "queueItem",
"type": "queueTrigger",
"direction": "in",
"queueName": "itemqueue",
"connection": "AzureWebJobsStorage"
},
{
"name": "itemsFoundIn",
"type": "table",
"tableName": "itemsFound",
"partitionKey": "{productId}",
"rowKey": "{price}",
"direction": "in",
"connection": "AzureWebJobsStorage"
},
{
"name": "itemsFoundOut",
"type": "table",
"tableName": "itemsFound",
"partitionKey": "{productId}",
"rowKey": "{price}",
"direction": "out",
"connection": "AzureWebJobsStorage"
},
{
"type": "queue",
"direction": "out",
"name": "$return",
"queueName": "smsqueue",
"connection": "AzureWebJobsStorage"
}
]
}
하는 index.js
module.exports = function (context, queueItem) {
if (context.bindings.itemsFoundIn) {
context.log("queueItem already present in table storage. Treating as duplicate.");
context.done();
}
else {
context.log("queueItem not found in table storage. Placing in table and destination queue.");
context.bindings.itemsFoundOut = queueItem;
context.done(null, queueItem);
}
};
단점이 기능은 잠시 동안 비활성화 이상 사용할 경우, 테이블을 확인 병렬 실행이있을 수있다 동시에 두 번째 대기열에 동일한 목록의 두 인스턴스를 전달합니다.
- 대기열 트리거 대신 sms 함수에 blob 트리거를 사용하십시오. 블랍 이름을 사용하여 중복을 제거하십시오. 바인딩 만 사용되는 경우 별도의 큐 트리거 함수를 추가하여 기존 BLOB를 확인하고 큐 항목을 새 BLOB로 변환해야합니다. 단점
:
시나리오 1에서 메시지의 TTL을 <15 분으로 설정할 수 있으므로 기능을 사용하지 않으면 이전 실행의 메시지가 삭제됩니다. – Mikhail
@Mikhail 그레이트 포인트! 출력 바인딩과 관련된 C# 및'CloudQueue' 매개 변수를 사용하여 여러 메시지를 대기열에 넣고 TTL을 지정할 수있는 것처럼 보입니다. –