WebJob elabora più messaggi dalla coda che non desidero. La mia coda ha messaggi dipendenti che voglio elaborare uno dopo l'altro in sequenza. Ho provato a configurare "BatchSize" a 1, ma senza fortuna. Tuttavia sta elaborando più di un messaggio alla volta.WebJob che elabora più messaggi alla volta dalla coda
risposta
Che tipo di coda dipende in gran parte dal successo di ciò che stai facendo. Non sono sicuro del motivo per cui si verificano problemi con la coda batchsize: Azure Storage Queue fornisce un messaggio dopo l'altro, come anche il bus di servizio.
Azure WebJobs si espanderà con il numero di siti Web su cui vengono ospitati, il che potrebbe causare problemi di concorrenza, ad esempio se si dispone di un processore di coda come un webjob in esecuzione in continuo, quindi se il sito Web viene ridimensionato a due istanze , avrai due Anche i WebJob stanno combattendo per la stessa coda.
Quindi, se si desidera utilizzare un singolo processore di coda, potrebbe essere una soluzione migliore per spostare il webjob in un servizio cloud, dove si ha il controllo del 100% sul numero di istanze, la separazione netta dai siti Web e il loro le istanze.
Dal momento che è necessario elaborare ogni messaggio in modo seriale, uno dopo l'altro, non avrebbe senso ridimensionare il numero di processori, perché avrebbero bisogno di attendere comunque che il successivo messaggio venga elaborato, quindi finché questo è un requisito, e tu potresti voler scalare il tuo sito web, suggerirei CloudService come un modo migliore per andare.
L'impostazione di BatchSize (JobHostConfiguration.Queues.BatchSize
) non si applica all'elaborazione della coda di ServiceBus, solo alle code di Azure. Per configurare l'elaborazione della coda di ServiceBus, utilizzare ServiceBusConfiguration
. La manopola che si desidera configurare è ServiceBusConfiguration.MessageOptions.MaxConcurrentCalls
. Impostare questo per 1 per disattivare elaborazione simultanea su un unico (default è 16):
JobHostConfiguration config = new JobHostConfiguration();
ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration();
serviceBusConfig.MessageOptions.MaxConcurrentCalls = 1;
config.UseServiceBus(serviceBusConfig);
JobHost host = new JobHost(config);
host.RunAndBlock();
Ciò garantirà che solo un singolo messaggio viene elaborato alla volta su una singola istanza . Se la tua WebApp viene ridimensionata, ciascuna istanza ridotta verrà eseguita in questa modalità, il che significa che avrai un'elaborazione simultanea tra le istanze. Se non si desidera neanche quello, è possibile utilizzare SingletonAttribute
per garantire che una sola istanza della funzione sia in esecuzione tra le istanze. Vedere lo Singleton wiki page per ulteriori informazioni.
Grazie amico, proprio quello di cui avevo bisogno –
Se i messaggi hanno una dipendenza dall'ordine, è probabile che si disponga di una pipeline di operazioni. Ho uno scenario particolare in cui utilizzo Code di Azure anziché ServiceBus, ma credo che la seguente idea potrebbe applicare la stessa:
Ho un processo di automazione che: 1) crea un database, 2) crea un'applicazione web, 3) configurare l'app Web e 4) distribuire il codice. Per il mio caso, le cose devono essere fatte in questo ordine.
Per quel caso, ho creato una coda per ogni attività: create-database-queue
, create-webapp-queue
, configure-web-app
e deploy-app-queue
.
È molto più sicuro lavorare in questo modo perché si isolano le attività. Una volta terminato un processo in una coda, può essere trasferito alla coda successiva. Inoltre, potresti facilmente inserire un nuovo passaggio nel tuo processo. Ad esempio, posso facilmente inserire un nuovo passaggio 1.5) Restore database backup
senza pensarci due volte.
Inoltre, si promuove il disaccoppiamento delle responsabilità con le singole code.
- 1. Come inviare messaggi GCM a più dispositivi alla volta
- 2. Azure WebJob guarda l'app.config una volta distribuito
- 3. RabbitMQ messaggi coda
- 4. Sostituire più sottostringhe alla volta
- 5. Coda messaggi basata su Memcache?
- 6. Il messaggio QueueTrigger di Azure WebJob non viene eliminato dalla coda
- 7. NServiceBus: Come spostare i messaggi dalla coda degli errori
- 8. Spostare il messaggio dalla coda Dead Letter alla coda in uscita MSMQ
- 9. Celery/RabbitMQ messaggi non bloccati che bloccano la coda?
- 10. Coda coda messaggi JS su Heroku
- 11. C'è una raccolta che si comporta come una coda ma mi consente di ottenere più elementi alla volta?
- 12. Coda messaggi Boost
- 13. Webjob di Azure; Esecuzione programmata e trigger per coda
- 14. ActiveMQ non disconnettere i messaggi Coda
- 15. Coda WebJob di Azure Come rimuovere DeleteMessage dopo averlo ottenuto?
- 16. Mangusta cancella più dati alla volta
- 17. Hadoop legge più righe alla volta
- 18. Le migliori pratiche per il polling di una coda SQS AWS e l'eliminazione dei messaggi ricevuti dalla coda?
- 19. Come limitare gli eventi che si attivano più di una volta alla volta
- 20. Azure WebJob Best Approach
- 21. Modifica messaggi MSMQ in una coda
- 22. PHP che serve una pagina alla volta
- 23. Delphi thread che attende i dati, elabora, per poi riprendere in attesa
- 24. Come impostare più di un allarme alla volta in Android?
- 25. Agenti Clojure che consumano da una coda
- 26. Che cos'è TombstonedTaskError dalla coda attività di App Engine?
- 27. comunicazione tra un WebJob e SignalR Hub
- 28. Invia messaggio cloud firebase, ovvero notifica push a più, più di 3 argomenti, alla volta
- 29. Stato 405 dalla coda compito
- 30. WebJob pianificato
FYI è possibile configurare WebJobs come Singleton. Quindi non c'è bisogno di passare a un Servizio Cloud se questa è l'unica cosa che si vuole realizzare – lopezbertoni