Rebus lean service Bus implementation for .Net

Rebus lean service Bus implementation for .Net

Rebus .Net

Sempre per la serie “Don’t Accept the Defaults” ormai mio mantra di vita, cercavo una libreria semplice, veloce, ed affidabile per gestire al meglio le code di RabbitMQ. Rebus segue la filosofia “Message buses without smarts” (Bus di messaggi senza intelligenza) e permette con poche righe di codice di implementare microservizi che si agganciano alle code RabbitMQ in maniera veloce ed efficace.

Il repository git dove trovare Rebus : https://github.com/rebus-org

Funzionalità

Il repository è bello fornito Rebus può essere utilzzato non solo con RabbitMQ ma anche con altro.

Alcuni esempi interessanti di integrazione:

  • Rebus.MongoDb permette di gestire la persistenza attraverso mongoDB
  • Rebus.AutoScaling permette di scalare i worker process in automatico.

Qui l’elenco completo: https://github.com/orgs/rebus-org/repositories?type=all

Esempio di utilizzo.

Immaginiamo una webApi che faccia da producer, invia delle informazioni ad esempio i dati per inviare un email ad una coda RabbitMQ. Di quali packages abbiamo bisogno:

Referenziati i packages implementiamo il services di Rebus con le configurazioni:

Definiamo il tipo di Transport nel caso di un producer di tipo OneWayClient (invia dati) e l’url di connessione a RabbitMQ con le credenziali.

Il numero di workers e il numero di messaggi da gestire in parallelo trmiate i metodi:

  • .SetMaxParallelism
  • .SetNumberOfWorkers

A questo punto non ci resta che andare a definire il nostro metodo send email:

Iniettiamo il Bus Rebus tramite l’interfaccia IBUS e tramite il metodo Publish inviamo i messaggi alla coda RabbitMQ. Nel esempio su vengono creati dei dati fakse per simulare dei dati.

Scriviamo il consumer che potrebbe essere un workerprocess o un’altra webapi che riceve le informazioni per l’invio email. Il nostro consumer avrà bisogno di un handler che si innesca quando la coda rabbit viene popolata di messaggi, il Transport in questo caso è di tipo RabbitMQ per consumare i messaggi.

Definiamo la nostra classe Handler dove risiederà la logica di gestione dei messaggi letti dalla coda:

DEMO

Conclusioni

Rebus offre sicuramente in maniera veloce l’integrazione con RabbitMQ all’interno dei nostri applicativi e/o microservizi. Il concetto di BUS system presente da anni nel mondo dello sviluppo ma ancora poco sfruttato e conosciuto dai più.

Don’t Accept the Defaults - Abel Wang

comments powered by Disqus

Related Posts

TIPS #1 DotNet View Transitive Packages in .NET Solution

TIPS #1 DotNet View Transitive Packages in .NET Solution

Comando La cli dotnet ci mette a disposizione una comoda funzione per avere la lista di tutti i packages referenziati in un progetto:

Read More
Backstage Spotify - building developer portals

Backstage Spotify - building developer portals

Mi è capitato nella mia lunga carriera (30 anni) di lavorare per diverse aziende, ma trovarne una che aveva un’adeguata documentazione sugli standard per sviluppare è stato pura utopia.

Read More
TIPS #3 Unit Test Fake Data with Bogus

TIPS #3 Unit Test Fake Data with Bogus

Unit Test Uno dei problemi quando si scrive una UT è quello di lavorare con dei dati fake, simulare accessi ai database etc.

Read More