Lavoro in coda serializzato dall'entità, notifiche all'interfaccia utente

1

Stiamo avendo un sacco di divertimento e successo usando le funzioni di Azure, ma stiamo cercando consigli su due problemi di progettazione correlati. La nostra prima sfida è che dobbiamo comunicare lo stato dei lavori all'interfaccia utente. Il cliente ha quindi un elenco di articoli e ad ognuno può essere associata l'elaborazione in background. L'interfaccia utente dovrebbe riflettere o nessuno stato, stato in coda o attualmente in elaborazione.

Pensiamo che il modo migliore per gestirlo sia una sorta di borsa di stato (probabilmente in Redis), che può avvisare gli abbonati degli aggiornamenti. Quindi possiamo usare qualcosa come SignalR per notificare l'interfaccia utente. Le mie preoccupazioni riguardano i fallimenti e alla fine lo stato non viene aggiornato.

La seconda sfida è che non vogliamo che una funzione si attivi se l'elaborazione sull'oggetto è già in corso, ma non vogliamo semplicemente desinstalarla e dimenticarla. Qui è dove le funzioni sono un po 'più difficili da gestire, perché se metti in coda un centinaio di oggetti per lo stesso oggetto, non gli importa, e sparerà qualsiasi numero di istanze che può elaborare per la coda. Fondamentalmente, abbiamo bisogno di serializzare per entità. Se CustomerID 123 viene elaborato, non vogliamo che venga rielaborato fino a quando non viene eseguito il lavoro già in esecuzione su 123. È qui che sembra che ci sia una sovrapposizione, dal momento che stiamo già pensando a una sorta di borsa di stato per i problemi di interfaccia utente di cui sopra.

Qualche suggerimento per questo set di strumenti? Vogliamo elaborare il più possibile in parallelo, ma in serie per entità simili.

    
posta Jeff Putz 21.12.2017 - 01:22
fonte

1 risposta

0

Ugh, odio rispondere alle mie stesse domande, ma passi abbastanza tempo a pensare a queste cose e alla fine qualcosa ha un senso.

L' Attività durevole delle funzioni di Azure la biblioteca, a quanto pare, fa quello che stiamo cercando distruggendo alcune sfide statali per noi. Possiamo implementare un modello singleton per entità controllando se un'istanza denominata (come "Customer_123") è attualmente in esecuzione e, in tal caso, attendere fino a quando non viene eseguita prima di dare il comando a un'altra. E 'stato abbastanza facile.

Per quanto riguarda la visualizzazione dello stato, invece di creare uno stato di One Framework For All, è sufficiente memorizzare lo stato corrente sul record dell'entità stessa e, insieme all'aggiornamento, chiamare un endpoint API che notifica qualsiasi evento di ascolto tramite SignalR per aggiornare la visualizzazione di quello stato.

    
risposta data 24.12.2017 - 00:53
fonte

Leggi altre domande sui tag