Mise en route avec le bus de service rhino
-
27-10-2019 - |
Question
J'ai lu beaucoup d'exemples / tutoriels (y compris. Alexandria de Ayende sur MSDN).
Mais se assemblées un peu mises à jour se sont révélés être un obstacle en soi. Après avoir obtenu la version correcte de Castle.Windsor - il ne peut pas trouver la bonne section dans le fichier app.config. La syntaxe dans les deux services Rhino Bus et CastleBootstrapper a aussi été modifié - et je suis maintenant totalement confus. La « documentation » sur Hibernation Rhinos est vraiment pas me aider à commencer.
Quelqu'un pourrait-il vous plaît me aider un échantillon de travail avec Rhino Service d'autobus soit avec le château de Windsor v. 3.0 (bêta) ou 2.5.3, le point moi à quelque chose déjà en ligne ou tout simplement me donner un pointeur étape par étape sur ce que je besoin de se lever et courir?
La solution
après avoir téléchargé les derniers morceaux Rhino-ESB de GitHub (https://github.com/hibernating-rhinos/rhino-esb) et la construction, il est assez simple pour commencer.
J'ai une application asp.net MVC qui communique avec un back-end par Rhino-ESB.
Du côté asp.net MVC:
Sur Global.asax.cs:
private IWindsorContainer _container;
protected void Application_Start()
{
_container = new WindsorContainer();
new RhinoServiceBusConfiguration().UseCastleWindsor(_container).Configure();
_container.Install(new YourCustomInstaller());
//Don't forget to start the bus
_container.Resolve<IStartableServiceBus>().Start();
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(_container));
}
Notez que YourCustomInstaller
doit mettre en œuvre IWindsorInstaller
et vous enregistrer vos contrôleurs avec le conteneur dans le Install
method:
public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{
container.Register(Component
.For<HomeController>().LifeStyle.PerWebRequest.ImplementedBy<HomeController>());
Notez également que le WindsorControllerFactory
interne délégués de la création du contrôleur au conteneur:
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
return null;
return (IController)this.container.Resolve(controllerType);
}
Last but not least, fournir la configuration de votre web.config
<configSections>
<section name="rhino.esb" type="Rhino.ServiceBus.Config.BusConfigurationSection, Rhino.ServiceBus"/>
</configSections>
<rhino.esb>
<bus threadCount="1"
numberOfRetries="5"
endpoint="rhino.queues://localhost:31316/Client"
queueIsolationLevel="ReadCommitted"
name="Client"/>
<messages>
<add name="YourMessagesNamespace"endpoint="rhino.queues://localhost:31315/Backend"/>
</messages>
</rhino.esb>
Cette configuration suppose que le back-end exécute une file d'attente dans localhost: 31315 et le client exécute sa file d'attente sur localhost: 31316.
Du côté de l'arrière-plan: à supposer que nous sommes en cours d'exécution, il comme une application de la console,
static void Main(string[] args)
{
IWindsorContainer container;
container = new WindsorContainer();
new RhinoServiceBusConfiguration()
.UseCastleWindsor(container)
.Configure();
var host = new RemoteAppDomainHost(typeof(YourBootstrapper));
host.Start();
Console.WriteLine("Starting to process messages");
Console.ReadLine();
Notez que YourBootstrapper
class outils CastleBootstrapper
public class YourBootstrapper: Rhino.ServiceBus.Castle.CastleBootStrapper
{
protected override void ConfigureContainer()
{
Container.Register(Component.For<OneOfYourMessages>());
}
}
dans lequel nous l'enregistrement d'un consommateur pour OneOfYourMessages