Skip to main content

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)
CampoValoreNote
Correlation Json Pathstringpath all'interno del json dove trovare il campo di correlazione (Es: orderNumber oppure customer.customerId)
Correlation Priority Pathstringpath 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.

CampoValoreNote
Buffer Max Itemsnumericonumero massimo di messaggi che può essere inviato in una sola chiamata alla destinazione
Buffer Debounce Millisnumericomillisecondi di attesa dopo i quali i messaggi vengono inviati all'adapter, calcolati dall'arrivo del primo messaggio
Retry Max Attemptsnumericonumero massimo di retry in caso di errore
Retry Strategydropdowntipo di strategia di retry
Retry Millisnumericomillisecondi 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
};