Un viaggio attraverso CQRS, Domain Driven Design e Event Sourcing, per comprendere, partendo dalle basi, come Axon Framework possa rappresentare l'alleato ideale nell'implementazione di applicazioni a microservizi con un approccio evolutivo.
DevOps@Work 2017 - Azure Mobile EngagementRoberto Albano
Session about Microsoft Azure Mobile Engagement at "DevOps@Work 2017" event, managed by DomusDotNet community and hosted in Microsoft Rome's headquarter on February 10th, 2017.
The session is related to the product's presentation, configuration and integration using the available SDK.
DevOps@Work 2017 - Application insights more control, more powerRoberto Albano
Session about Microsoft Application Insights at "DevOps@Work 2017" event, managed by DomusDotNet community and hosted in Microsoft Rome's headquarter on February 10th, 2017.
The session is related to the product's presentation, configuration and integration using the available SDK.
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAmazon Web Services
Una migrazione al cloud si compone di tre pilastri: persone, processi e tecnologia. Troppo spesso, le organizzazioni si concentrano sul miglioramento dei processi e sull’implementazione tecnologica, ma ignorano l’aspetto umano. Molti leader ammettono che i primi due sono semplici da modificare, mentre influenzare la cultura è più complicato. Questa sessione affronta i metodi migliori per aiutare ai clienti come affrontare questa sfida. Scopri i ruoli e le responsabilità pertinenti alla fase di transizione e di post-adozione del cloud. Valuta i gap della tua organizzazione tra le capacità e le competenze richieste. Crea modelli di addestramento efficienti che portano ad un’efficace cultura DevOps.
Speaker: Danilo Poccia, Senior Evangelist, Serverless, AWS
Loosely Coupled Complexity - Unleash the power of your domain modelFrancesca1980
Common software architectures are full of well-established assumptions. But some of them are flawed, no longer valid or relevant. Changing the rules of the game using DDD, CQRS and Event Sourcing can lead to systems which are more scalable, maintainable and performing. And which are fun to code as well.
This set of design patterns are related to Enterprise Patterns. In it you can find, J2EE, Presentation, Business & Integration Patterns (such as: ApplicaCon Controller, Data Transfer Object (DTO), Business Object (BO) & Data Access Object (DAO) among others ...)
DevOps@Work 2017 - Azure Mobile EngagementRoberto Albano
Session about Microsoft Azure Mobile Engagement at "DevOps@Work 2017" event, managed by DomusDotNet community and hosted in Microsoft Rome's headquarter on February 10th, 2017.
The session is related to the product's presentation, configuration and integration using the available SDK.
DevOps@Work 2017 - Application insights more control, more powerRoberto Albano
Session about Microsoft Application Insights at "DevOps@Work 2017" event, managed by DomusDotNet community and hosted in Microsoft Rome's headquarter on February 10th, 2017.
The session is related to the product's presentation, configuration and integration using the available SDK.
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAmazon Web Services
Una migrazione al cloud si compone di tre pilastri: persone, processi e tecnologia. Troppo spesso, le organizzazioni si concentrano sul miglioramento dei processi e sull’implementazione tecnologica, ma ignorano l’aspetto umano. Molti leader ammettono che i primi due sono semplici da modificare, mentre influenzare la cultura è più complicato. Questa sessione affronta i metodi migliori per aiutare ai clienti come affrontare questa sfida. Scopri i ruoli e le responsabilità pertinenti alla fase di transizione e di post-adozione del cloud. Valuta i gap della tua organizzazione tra le capacità e le competenze richieste. Crea modelli di addestramento efficienti che portano ad un’efficace cultura DevOps.
Speaker: Danilo Poccia, Senior Evangelist, Serverless, AWS
Loosely Coupled Complexity - Unleash the power of your domain modelFrancesca1980
Common software architectures are full of well-established assumptions. But some of them are flawed, no longer valid or relevant. Changing the rules of the game using DDD, CQRS and Event Sourcing can lead to systems which are more scalable, maintainable and performing. And which are fun to code as well.
This set of design patterns are related to Enterprise Patterns. In it you can find, J2EE, Presentation, Business & Integration Patterns (such as: ApplicaCon Controller, Data Transfer Object (DTO), Business Object (BO) & Data Access Object (DAO) among others ...)
CCI2017 - Protect and manage your digital transformation - Giuseppe D'Osualdo...walk2talk srl
Lavorare in un mondo cloud-first / mobile-first richiede un nuovo approccio: i dati devono essere accessibili, utilizzati e condivisi sia on-prem che nel cloud, cancellando i confini tradizionali di sicurezza; c'è bisogno di una tecnologia che protegga dalle minacce in evoluzione.
La tecnologia Microsoft assicura la trasformazione digitale con una piattaforma completa e un'intelligenza unica: con Microsoft Enterprise Mobility + Security, le aziende possono gestire in modo completo l’identità dei propri dipendenti, e collaboratori, oltre che mettere in sicurezza i dispositivi ed i dati aziendali, il tutto in modo centralizzato e connesso.
In questa sessione vedremo come la vostra organizzazione possa raggiungere l'equilibrio della sicurezza e dell'implementazione degli utenti finali, con controlli di sicurezza efficaci per identità, periferiche, dati, applicazioni e infrastrutture.
Scopriremo come proteggere i dati dell'organizzazione dall'accesso non autorizzato, individuare attacchi e violazioni e aiutarti a rispondere e attivare le correzioni per impedire che accada di nuovo.
Vedremo quindi come funzionano alcuni degli strumenti della suite, come Azure Active Directory, Intune e Azure Information Protection.
Per richiedere accesso al canale contenente le registrazioni audio/video delle sessioni tecniche di Cloud Conference Italia 2017 compila il seguente form:
https://goo.gl/Fq6DQE
Power BI Streaming Data Flow e Azure IoT CentralMarco Parenzan
Dal 2015 gli utilizzatori di Power BI hanno potuto analizzare dati in real-time grazie all'integrazione con altri prodotti e servizi Microsoft. Con streaming dataflow, si porterà l'analisi in tempo reale completamente all'interno di Power BI, rimuovendo la maggior parte delle restrizioni che avevamo, integrando al contempo funzionalità di analisi chiave come la preparazione dei dati in streaming e nessuna creazione di codice. Per vederlo in funzione, studieremo un caso specifico di streaming come l'IoT con Azure IoT Central.
Manuel Toniato e Simone Caretta: Migliorare le performance di ricerca con Ela...Meet Magento Italy
Per un utente di un sito eCommerce la “buca” di ricerca è lo strumento preferenziale per l’inizio dell’esperienza di acquisto. Allo stesso tempo per il venditore può diventare un canale privilegiato per veicolare messaggi mirati. In questo talk Manuel e Simone analizzeranno la possibilità di integrare Magento con il motore di ricerca open source Elasticsearch (utilizzato fra gli altri da github, stackoverflow e mozilla). Ci mostreranno quali sono le peculiarità della soluzione rispetto a quelle offerte “out of the box” da Magento CE, parleranno brevemente dell’ecosistema di Elasticsearch, delle integrazioni disponibili e delle peculiarità rispetto ad altri full text search engine come Solr. Esamineranno, in particolare, una soluzione che utilizza Elasticsearch come engine per le collection Magento evidenziandone vantaggi e criticità.
PASS Virtual Chapter - SQL Server Continuous IntegrationAlessandro Alpi
Build automatizzate, esecuzione di unit test, creazione di un pacchetto nuget, ecco cosa serve per essere pronti con SQL Server e la continuous integration
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
In questa serie di slide vedremo come creare i build step su Visual Studio Team Services sfruttando gli add-on forniti da Red Gate, come DLM Automation 2: Build.
Introduzione al Domain Driven Design (DDD)DotNetMarche
In questa sessione si approfondirà il concetto di Domain Driven Design, un principio di progettazione che può essere visto come una “forma-mentis” per aiutare a concepire e modellare applicazioni enterprise che fanno un forte uso del Domain Model. Questa metodologia, introdotta da Eric Evans, mette in risalto il dominio applicativo di un progetto, costituendo quindi il collante tra il modello analitico e il modello implementativo e trovando la sua naturale applicazione in ambienti di sviluppo agili come Extreme Programming. Come completamento della sessione verranno esaminate alcune tecniche di Layering e pattern architetturali che ben si sposano con questa tecnica.
Data Virtualization per una Multi-Cloud Data Integration senza barriere né co...Denodo
Watch full webinar here: https://bit.ly/3vYHaNQ
In questo contesto la virtualizzazione dei dati riveste un ruolo strategico nelle architetture multicloud, garantendo agli utenti aziendali un accesso controllato a tutti i dati, indipendentemente dalla loro localizzazione, in modo semplice e veloce. Al contempo aggiunge la semantica e la governance, necessaria nei moderni ambienti di dati e garantendo il controllo locale ai "proprietari dei dati"e il rispetto delle normative locali sulla privacy e la protezione dei dati.
Unisciti a noi per capire come la tua azienda può affrontare e superare le sfide insite nell’adozione di un modello Cloud/Multi-Cloud e conoscere le Best Practice per una corretta gestione dei dati e dei costi in un tale modello.
In questa sessione approfondiremo:
- Le sfide che le organizzazioni devono affrontare quando adottano strategie di dati multi-cloud
- Come la Piattaforma di virtualizzazione dei dati di Denodo fornisce un livello di accesso ai dati controllato per tutta l'organizzazione
- Le diverse architetture multi-location che possono massimizzare il controllo locale sui dati, rendendoli comunque facilmente disponibili
- Come le organizzazioni hanno beneficiato dell'utilizzo della piattaforma Denodo nelle architetture multi-cloud
Grazie a Team Foundation Build è possibile adottare pratiche di integrazione continua nel proprio progetto. In questa presentazione viene introdotta la struttura di tfs build assieme alle tecniche base per effettuare una customizzazione della build.
CQRS, ovvero: 2 stack, uno per "leggere" e l'altro per "scrivere". Se per "scrivere" abbiamo l'imbarazzo della scelta (Domain Model, Command, Event Sourcing, ...) per leggere, invece, apparentemente c'è poco da dire. "Apparentemente", appunto. Parliamone :-)
More Related Content
Similar to Axon Framework - Dal monolite ai microservizi con un approccio evolutivo
CCI2017 - Protect and manage your digital transformation - Giuseppe D'Osualdo...walk2talk srl
Lavorare in un mondo cloud-first / mobile-first richiede un nuovo approccio: i dati devono essere accessibili, utilizzati e condivisi sia on-prem che nel cloud, cancellando i confini tradizionali di sicurezza; c'è bisogno di una tecnologia che protegga dalle minacce in evoluzione.
La tecnologia Microsoft assicura la trasformazione digitale con una piattaforma completa e un'intelligenza unica: con Microsoft Enterprise Mobility + Security, le aziende possono gestire in modo completo l’identità dei propri dipendenti, e collaboratori, oltre che mettere in sicurezza i dispositivi ed i dati aziendali, il tutto in modo centralizzato e connesso.
In questa sessione vedremo come la vostra organizzazione possa raggiungere l'equilibrio della sicurezza e dell'implementazione degli utenti finali, con controlli di sicurezza efficaci per identità, periferiche, dati, applicazioni e infrastrutture.
Scopriremo come proteggere i dati dell'organizzazione dall'accesso non autorizzato, individuare attacchi e violazioni e aiutarti a rispondere e attivare le correzioni per impedire che accada di nuovo.
Vedremo quindi come funzionano alcuni degli strumenti della suite, come Azure Active Directory, Intune e Azure Information Protection.
Per richiedere accesso al canale contenente le registrazioni audio/video delle sessioni tecniche di Cloud Conference Italia 2017 compila il seguente form:
https://goo.gl/Fq6DQE
Power BI Streaming Data Flow e Azure IoT CentralMarco Parenzan
Dal 2015 gli utilizzatori di Power BI hanno potuto analizzare dati in real-time grazie all'integrazione con altri prodotti e servizi Microsoft. Con streaming dataflow, si porterà l'analisi in tempo reale completamente all'interno di Power BI, rimuovendo la maggior parte delle restrizioni che avevamo, integrando al contempo funzionalità di analisi chiave come la preparazione dei dati in streaming e nessuna creazione di codice. Per vederlo in funzione, studieremo un caso specifico di streaming come l'IoT con Azure IoT Central.
Manuel Toniato e Simone Caretta: Migliorare le performance di ricerca con Ela...Meet Magento Italy
Per un utente di un sito eCommerce la “buca” di ricerca è lo strumento preferenziale per l’inizio dell’esperienza di acquisto. Allo stesso tempo per il venditore può diventare un canale privilegiato per veicolare messaggi mirati. In questo talk Manuel e Simone analizzeranno la possibilità di integrare Magento con il motore di ricerca open source Elasticsearch (utilizzato fra gli altri da github, stackoverflow e mozilla). Ci mostreranno quali sono le peculiarità della soluzione rispetto a quelle offerte “out of the box” da Magento CE, parleranno brevemente dell’ecosistema di Elasticsearch, delle integrazioni disponibili e delle peculiarità rispetto ad altri full text search engine come Solr. Esamineranno, in particolare, una soluzione che utilizza Elasticsearch come engine per le collection Magento evidenziandone vantaggi e criticità.
PASS Virtual Chapter - SQL Server Continuous IntegrationAlessandro Alpi
Build automatizzate, esecuzione di unit test, creazione di un pacchetto nuget, ecco cosa serve per essere pronti con SQL Server e la continuous integration
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
In questa serie di slide vedremo come creare i build step su Visual Studio Team Services sfruttando gli add-on forniti da Red Gate, come DLM Automation 2: Build.
Introduzione al Domain Driven Design (DDD)DotNetMarche
In questa sessione si approfondirà il concetto di Domain Driven Design, un principio di progettazione che può essere visto come una “forma-mentis” per aiutare a concepire e modellare applicazioni enterprise che fanno un forte uso del Domain Model. Questa metodologia, introdotta da Eric Evans, mette in risalto il dominio applicativo di un progetto, costituendo quindi il collante tra il modello analitico e il modello implementativo e trovando la sua naturale applicazione in ambienti di sviluppo agili come Extreme Programming. Come completamento della sessione verranno esaminate alcune tecniche di Layering e pattern architetturali che ben si sposano con questa tecnica.
Data Virtualization per una Multi-Cloud Data Integration senza barriere né co...Denodo
Watch full webinar here: https://bit.ly/3vYHaNQ
In questo contesto la virtualizzazione dei dati riveste un ruolo strategico nelle architetture multicloud, garantendo agli utenti aziendali un accesso controllato a tutti i dati, indipendentemente dalla loro localizzazione, in modo semplice e veloce. Al contempo aggiunge la semantica e la governance, necessaria nei moderni ambienti di dati e garantendo il controllo locale ai "proprietari dei dati"e il rispetto delle normative locali sulla privacy e la protezione dei dati.
Unisciti a noi per capire come la tua azienda può affrontare e superare le sfide insite nell’adozione di un modello Cloud/Multi-Cloud e conoscere le Best Practice per una corretta gestione dei dati e dei costi in un tale modello.
In questa sessione approfondiremo:
- Le sfide che le organizzazioni devono affrontare quando adottano strategie di dati multi-cloud
- Come la Piattaforma di virtualizzazione dei dati di Denodo fornisce un livello di accesso ai dati controllato per tutta l'organizzazione
- Le diverse architetture multi-location che possono massimizzare il controllo locale sui dati, rendendoli comunque facilmente disponibili
- Come le organizzazioni hanno beneficiato dell'utilizzo della piattaforma Denodo nelle architetture multi-cloud
Grazie a Team Foundation Build è possibile adottare pratiche di integrazione continua nel proprio progetto. In questa presentazione viene introdotta la struttura di tfs build assieme alle tecniche base per effettuare una customizzazione della build.
CQRS, ovvero: 2 stack, uno per "leggere" e l'altro per "scrivere". Se per "scrivere" abbiamo l'imbarazzo della scelta (Domain Model, Command, Event Sourcing, ...) per leggere, invece, apparentemente c'è poco da dire. "Apparentemente", appunto. Parliamone :-)
Similar to Axon Framework - Dal monolite ai microservizi con un approccio evolutivo (20)
2. Sara Pellegrini
Software Engineer AxonIQ
Chi sono
sara@axoniq.io
@_sara_p_
sarapellegrini
https://www.linkedin.com/in/
sara-pellegrini-55a37913/
3. Di cosa parleremo
• Monolite vs Big Ball of Mud
• Monolite vs Microservizi
• CQRS
• Command Model
• Projections
• Axon Framework
• Event Sourcing
• AxonDB
• Location Transparency
• AxonHub
8. “
”
[…] the microservice architectural style is
an approach to developing a single
application as a suite of small services, each
running in its own process and
communicating with lightweight
mechanisms […]
I microservizi
Martin Fowler
9. Il percorso verso i microservizi
Microservices system
Almost all the cases where I've heard of a
system that was built as a microservice system
from scratch, it has ended up in serious trouble.
Monoliths
Almost all the successful microservice stories
have started with a monolith that got too big
and was broken up
Martin Fowler
Source: http://martinfowler.com/bliki/MonolithFirst.html
17. Architecture a layer
Interfaccia grafica
Layer dei servizi
Layer di accesso ai dati
Modellodeldominio
Method invocation
Cache Worker
pools
Web
Cache
Session
replication
Distributed 2nd level
cache
Query
Cache
18.
19.
20. Gli aggregati rappresentano i
limiti della consistenza.
Se necessario, possono esistere
dei riferimenti tramite ID tra gli
aggreati, ma senza alcuna
garanzia di integrità
referenziale.
I clients non possono agire
arbitrariamente su tutti gli
oggetti. Possono farlo solo
attraverso l’aggregate root.
Il modello di scrittura
21. Il modello di lettura
Projections
E’ un modello ottimizzato per le
specifiche esigenze progettuali di
lettura dei dati.
Tipicamente vengono create molte
projections separate invece di un
unico grande modello.
24. Location transparency
A Component should not be aware, nor make any
assumptions, of the location of Components it
interacts with
Un componente non deve né essere a conoscenza né fare alcuna
assunzione rispetto a dove si trovano i componenti coi quali interagisce.
La location transparency parte da un corretto design delle API
27. Comandi
public class ConfermaOrdine {
@TargetAggregateIdentifier
private UUID ordineId;
public ConfermaOrdine(UUID ordineId) {
this.ordineId = ordineId;
}
public UUID ordineId() {
return this.ordineId;
}
}
Un comando è la richiesta di
effettuare un’operazione.
28. Inviare comandi
@RestController
public class OrdineController {
@Autowired
private CommandGateway commandGateway;
@PostMapping("ordine/{id}/conferma")
public void confermaOrdine(@PathVariable("id")UUID id) {
commandGateway.send(new ConfermaOrdine(id));
}
}
31. Evento
Un evento è la notifica di qualcosa
di rilevante accaduto nel dominio.
public class OrdineConfermato {
private UUID ordineId;
public ConfermaOrdine(UUID ordineId) {
this.ordineId = ordineId;
}
public UUID ordineId() {
return this.ordineId;
}
}
32.
33. Event handler
@Component
public class OrdiniOverviewProjection {
@Autowired
private EntityManager entityManager;
@EventHandler
void handle(OrdineConfermato evento) {
/* Recupera l’entità JPA e aggiorna lo stato. */
}
}
34.
35. Query handler@Component
public class OrdiniQueries {
@Autowired
EntityManager entityManager;
@QueryHandler
public List<Ordine> find(OrdiniConfermati query) {
Query jpaQuery =
entityManager.createQuery("select e from Ordine e where e.confermato = true",
Ordine.class);
jpaQuery.setFirstResult(query.getOffset());
jpaQuery.setMaxResults(query.getLimit());
return jpaQuery.getResultList();
}
}
38. Persistenza tradizionale (Non event sourced)
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
L’utente inizia un nuovo
ordine
Ordine 93771261272
39. L’utente aggiunge un paio di
occhiali da sole all’ordine
Ordine 93771261272
1 occhiali da sole
Persistenza tradizionale (Non event sourced)
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
40. L’utente aggiunge un paio di
scarpe da ginnastica all’ordine
Ordine 93771261272
1 scarpe da ginnastica
1 occhiali da sole
Persistenza tradizionale (Non event sourced)
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
41. L’utente aggiunge una T-shirt
all’ordine
Ordine 93771261272
1 scarpe da ginnastica
1 occhiali da sole
1 T-shirt
Persistenza tradizionale (Non event sourced)
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
42. L’utente decide che non vuole
comprare le scarpe da
ginnastica e le rimuove
dall’ordine
Ordine 93771261272
1 scarpe da ginnastica
1 occhiali da sole
Persistenza tradizionale (Non event sourced)
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
1 T-shirt
43. L’utente inserisce l’indirizzo e
le informazioni per il
pagamento e conferma
l’ordine Ordine 93771261272
1 T-shirt
1 occhiali da sole
Cliente: Jane
Persistenza tradizionale (Non event sourced)
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
Stato: confermato
45. L’utente inizia un nuovo
ordine
OrdineCreato (93771261272)
Persistenza event sourced
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
46. OrdineCreato (93771261272)
ProdottoAggiunto(occhiali da sole)
Persistenza event sourced
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
L’utente aggiunge un paio di
occhiali da sole all’ordine
47. 1 sunglasses
OrdineCreato (93771261272)
ProdottoAggiunto(occhiali da sole)
ProdottoAggiunto(scarpe da ginnastica)
Persistenza event sourced
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
L’utente aggiunge un paio di
scarpe da ginnastica all’ordine
48. 1 sunglasses
OrdineCreato (93771261272)
ProdottoAggiunto(occhiali da sole)
ProdottoAggiunto(scarpe da ginnastica)
ProdottoAggiunto(T-shirt)
Persistenza event sourced
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
L’utente aggiunge una T-shirt
all’ordine
49. 1 sunglasses
OrdineCreato (93771261272)
ProdottoAggiunto(occhiali da sole)
ProdottoAggiunto(scarpe da ginnastica)
ProdottoAggiunto(T-shirt)
ProdottoRimosso(scarpe da ginnastica)
Persistenza event sourced
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
L’utente decide che non vuole
comprare le scarpe da
ginnastica e le rimuove
dall’ordine
50. 1 sunglasses
OrdineCreato (93771261272)
ProdottoAggiunto(occhiali da sole)
ProdottoAggiunto(scarpe da ginnastica)
ProdottoAggiunto(T-shirt)
ProdottoRimosso(scarpe da ginnastica)
OrdineConfermato (Jane)
Persistenza event sourced
Esempio di implementazione di un sistema di e-commerce
Cosa accade nel databaseCosa accade nell’applicazione
L’utente inserisce l’indirizzo e
le informazioni per il
pagamento e conferma
l’ordine
51. • Auditing
• Data mining, analytics
Ragioni tecniche
Ragioni di business
Svantaggi
Perchè usare l’event sourcing
• E’ necessario mantenere il supporto
di tutti gli eventi del passato
• l’Event Store cresce sempre
• Gli eventi rappresentato un’unica fonte di verità
• Semplifica la riproduzione di un
malfunzionamento
• Replay degli eventi per la creazione di nuove
projection o la rigenerazione di quelle esistenti
• Rende esplicito l’intento dell’utente
52. @Aggregate
public class Ordine {
@AggregateIdentifier UUID ordineId;
private Boolean confermato;
@CommandHandler
void handle(ConfermaOrdine comando) {
if(confermato) {
throw new IllegalStateException("L’ordine è già stato confermato.");
}
apply(new OrdineConfermato(comando.ordineId()));
}
@EventSourcingHandler
void handle(OrdineConfermato evento) {
confermato = true;
}
}
53. Leggere Eventi Scrivere Eventi
Tutti gli eventi di un determinato
aggregato (event sourced repository)
Tutti gli eventi da un determinato
momento (replay per i read models)
Lettura degli eventi in ordine temporale
Aggiungere nuovi eventi
Inserire eventi in un punto random
Aggiornare gli eventi
Cancellare gli eventi
Queries ad-hoc (per ragioni di
debug, monitoring, supporto)
Event store
54. AxonDB
• Event Store prodotto da AxonIQ
• Scritto in Java da zero
• Pensato appositamente per l’event sourcing
• Gestisce i file direttamente - non si appoggia a un database
• Fornisce interfaccie aperte basate su HTTP+JSON e gRPC
• Nativamente integrato con Axon Framework
57. Iniziare a utilizzare AxonDB
• Pagina di prodotto: https://axoniq.io/products/axondb.html
• La Developer Edition è gratuita, può essere scaricata insieme
al manuale di utilizzo.
58. Vantaggi
• Sistemi in tempo reale
• Polling -> Push
• System integration
• Test funzionali Given-When-Then
• Supporta lo sviluppo di un
monolite strutturato
che possa essere all’occorrenza
facilmente suddiviso in microservizi.
DDD
CQRS
ES
Axon Framework
63. Complessità addizionale per la
distribuzione in microservizi di
un sistema ben progettato
Agilità Scalabilità
64. Location transparency in Axon
@CommandHandler
Componente applicativo
<<interface>>
CommandBus
Si registra a
<<class>>
SimpleCommandBus
implementa
CommandBus – QueryBus e EventBus si comportano analogamente
<<class>>
AsyncCommandBus
implementa
<<class>>
DistributedCommandBus
Client
Invia a
Invia a
implementa
65.
66. Solo l’intelligenza che serve
dumb smart
Message Broker
Invia Messaggi. L’unico
vantaggio che offre è
l’affidabilità
Enterprise Service Bus
Comprende il contenuto dei
messaggi. È difficile da
configurare e da manutenere
AxonHub
Capisce la differenza fra Eventi, Comandi e
Queries e determina il corretto paradigma di
routing. Non si interessa del contenuto dei
messaggi.
67.
68. Come iniziare con AxonHub
• Pagina di prodotto: https://axoniq.io/product-
overview/axonhub
• La Developer Edition è gratuita, può essere scaricata insieme
al manuale di utilizzo.
69. Domande?
Conferenza: 21 settembre - Amsterdam - promo code: Axon.Friend
Event-Driven Microservices Conference by AxonIQ
axoniq.io/conference
Training: 19-20 settembre - Amsterdam
Introduction and advanced features of Axon Framework
axoniq.io/events
Webinar: 7 giugno - online
Microservices with Axon platform - live coding webinar
axoniq.io/webinars