Flusso dati
Il flusso dati caratterizza le modalità di interscambio, manipolazione e strutturazione del dato fra una sorgente e una destinazione.
A livello di configurazioni contiene anche la definizione della sorgente del dato al suo interno, oltre alla possibilità di sovrascrivere parametri relativi alla destinazione.
Messaggi ed elaborazione
Il messaggio è l'elemento minimo di operatività del flusso. Il messaggio contiene informazioni che lo rendono processabile individualmente.
Ad esempio un singolo prodotto, un ordine con le sue righe e i totali etc...
I messaggi ricevuti vengono gestiti attraverso una coda, raccolti in gruppi di invio (se necessario) e inviati alla destinazione. Ogni ordine ha il suo stato di elaborazione e può essere gestito singolarmente.
Correlazione fra messaggi
Flowlyze è un sistema che può gestire il flusso di dati in modo agnostico, di dati sono elaborati in multithread
Abbiamo introdotto il concetto di CorrelationId per permettere, a livello di interfaccia, di identificare rapidamente i messaggi e poterli ricercare. Il correlationId è quindi un campo del messaggio che caratterizza univocamente il dato contenuto
Esempio: l'SKU di un prodotto, l'ID di un magazzino, l'OrderNumber di un ordine
Con la configurazione del correlationId
- i messaggi saranno ricercabili per quel campo
- Flowlyze provvederà che messaggi con lo stesso correlationId vengano inviati sequenzialmente
- Nel caso in cui più messaggi con lo stesso correlationId siano nella coda, solo il più recente verrà elaborato (migliorando le performance ed evitando comunicazioni ridondanti)
Campo | Valore | Note |
---|---|---|
Correlation Json Path | string | path all'interno del json dove trovare il campo di correlazione (Es: orderNumber oppure customer.customerId) |
Correlation Priority Path | string | path all'interno del json dove trovare il campo che indica la priorità di esecuzione del messaggio |
Politiche di retry e gestione buffer
Il flusso gestisce tramite variabili le politiche di retry, in caso di errore, e la gestione dell'invio aggregato del dato.
Campo | Valore | Note |
---|---|---|
Buffer Max Items | numerico | numero massimo di messaggi che può essere inviato in una sola chiamata alla destinazione |
Buffer Debounce Millis | numerico | millisecondi di attesa dopo i quali i messaggi vengono inviati all'adapter, calcolati dall'arrivo del primo messaggio |
Retry Max Attempts | numerico | numero massimo di retry in caso di errore |
Retry Strategy | dropdown | tipo di strategia di retry |
Retry Millis | numerico | millisecondi minimi di attesa prima di rimettere un messaggio in errore nella coda di esecuzione |
Pipeline e operatività sui messaggi
La trasformazione del dato durante il flusso è possibile con gli strumenti di mappatura e lowcode, strumenti che è possibile aggiungere nella sezione Pipeline. Come da nome la pipeline esegue in ordine le azioni configurate.
Nella sezione Actions è possibile configurare azioni generali che poi possono essere applicate ad uno o più flussi.
Mappatura del dato
Nel caso sia necessario rimappare il dato tramite questa funzionalità è possibile configurare il json di input e quello di output per poi procedere ad una mappatura tramite tendina per generare il dato obiettivo.
LowCode
Nel caso in cui una semplice mappatura non sia sufficiente, è possibile utilizzare la piattaforma di lowcoding per scrivere codice custom (CSharp) a cui delegare trasformazioni, aggregazioni ed elaborazioni di vario genere.
E' possibile testare input e output dell'elaborazione direttamente sulla piattaforma lowcode.
un esempio di codice di manipolazione del dato
var before=DateTime.Now;
var str = Http.GetStringAsync("https://api.mockaroo.com/api/652004e0?count=1000&key=8345cee0").Result;
var after=DateTime.Now;
Logger.Log("Called in"+(after.Subtract(before).TotalMilliseconds));
///dsfdfs
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Newtonsoft.Json.Linq.JObject>>(str);
//var childData = new Newtonsoft.Json.Linq.JObject();
var childData = new JObject();
var id=Data["id"];
Logger.Log("looking for user"+id);
foreach (var item in data)
{
if (item["id"].ToString() == id.ToString())
{
Logger.Log("got related info for "+id);
childData = item;
}
}
return new {
username=Data["username"],
dato2=2132+34,
user=childData
};