에 수천 개의 메시지를 추가합니다.내가 <strong>Node.js를</strong>와 함께 <strong>푸른 기능</strong> 내 <strong>푸른 저장 대기열</strong> 약 6000 메시지를 추가하기 위해 노력하고 푸른 저장 큐
나는 지금 내가 Promise
에서 QueueService method 포장 약 50 Bluebird를 사용하는 동시성으로 Promise.map
을 통해 6000 약속을 확인,이 작업을 수행하는 여러 가지 방법을 시도했습니다.
const addMessages = Promise.map(messages, (msg) => {
//returns a promise wrapping the Azure QueueService method
return myQueueService.addMessage(msg);
}, { concurrency: 50 });
//this returns a promise that resolves when all promises have resolved.
//it rejects when one of the promises have rejected.
addMessages.then((results) => {
console.log("SUCCESS");
}, (error) => {
console.log("ERROR");
});
My QueueService는 ExponentialRetry
정책으로 생성됩니다.
- 모든 메시지 내 대기열에 추가됩니다와 약속이 제대로 해결 :
나는이 전략을 사용하여 혼합 된 결과가 있었다.
- 모든 메시지가 내 대기열에 추가되고 약속이 해결되지 않거나 거부됩니다.
- 모든 메시지가 내 대기열에 추가되지 않으며 약속이 해결되지 않거나 거부됩니다.
오전 뭔가 없거나 내 전화가 가끔 해결하기 위해 2 분 소요, 때로는 10 분 이상하는 것이 가능할까요?
앞으로는 약 100.000 개의 메시지를 추가해야 할 것이므로 예상치 못한 결과가 나올지 걱정됩니다.
(푸른 기능에) 노드 에서 많은 수의 메시지를 추가 할 수있는 최선의 전략이 될 것입니다 무엇?
편집 :
을 : 내 저장 대기열 내 메시지를 추가 할 수있는 매우 신뢰할 수있는 방법을이 놓친하지만방법을 모르는 내 푸른 기능의 결합 큐 출력을 사용하는 것입니다
내 코드를 훨씬 쉽게 만들 수 있습니다.
for (var i = 0; i < messages.length; i++) {
// add each message to queue
context.bindings.outputQueue.push(messages[i]);
}
EDIT2 : 나는 약 1000의 일괄 내 메시지를 분할하고 푸른 물방울 저장 이러한 배치를 저장하기 위하여려고하고있다
.
또 다른 Azure 함수는 새로운 BLOB가 추가 될 때마다 트리거 될 수 있으며이 함수는 한 번에 1000 개씩 내 메시지 대기열을 처리합니다.
내 출력 바인딩을 통해 대기열에 20.000 개의 메시지를 추가하고 약 15,000 개의 메시지 만 처리 할 수있는 5 분 후에 Azure 함수 시간 초과를 수신 할 때 대기 시간이 훨씬 더 안정적이고 확장 가능해야합니다.
동일한 문제가 있습니다. 마지막 접근 방식이 효과가 있었습니까? 나는 그 아이디어가 마음에 든다. 추가 작업을 멀티 스레딩하는 것은 어떨까요? –