This project is read-only.

Definition

Le but d'un EventBroker est de permettre la communication entre differents composants d'une application, un premier composant publie un événement qui vient de se passer dans l'application, un ou plusieurs autres composants étant abonnés à cet événement sont stimulés par l'eventbroker qui leur passe l'evenement.

Ce qui guide le principe général d'un eventbroker est de garantir le couplage le plus faible possible entre les composants qui veulent se transmettre un evenement, généralement le couplage se situe au niveau du message qui doit etre commun aux composants, mais il est possible via des messages de type dynamic de réduire ce couplage.

Description

EventBrokR.png

EventBrokR utilise une interface IPublisher

public interface IPublisher
{
	Task PublishAsync<TEvent>(TEvent eventMessage, int delay = 0);
	Container Container { get; }
	dynamic CreateDynamicMessage(string name);
}

C'est le point d'entrée de l'event broking, d'un coté il va y avoir la publication d'evenements via des publishers et d'un autre les consomateurs qui doivent implémenter l'interface IConsumer<TEVent>

public interface IConsumer<TEvent>
{
	void Handle(TEvent eventMessage);
}

A noter, avec EventBrokR il est possible d'utiliser des consumers dynamiques

Pour souscrire à un evenement publié il faut inscrire celui-ci via la propriété Container du publisher.

Fonctionnement

Utilisation du publisher par defaut,

var publisher = new Publisher();

A noter EventBrokR est "dependency injectable" voir EventBrokR with Unity

Dès qu'un evenement est emis via la mehtode PublishAsync<TEvent>(..) le publisher va lancer une tache asynchrone et appeler la methode interne *Publish<TEvent>(..)

Dans un premier temps il va falloir collecter toutes les subscriptions via la methode interne GetSubscription<TEvent>() ceci aura pour effet de recuperer toutes les instances des consumers, si EventBrokR est utilisé dans un environnement utilisant de l'injection de dependance, c'est l'injecteur qui sera utilisé pour recuperer les instances en tenant compte de la configuration du lifetime.

Puis publier vers les consumers l'event via la methode PublishToConsumer(...)

Dès que l'event est passé au consumer , l'instance est disposée.


Last edited Nov 26, 2013 at 4:08 PM by mchouteau, version 10