Pregunta

He leído muchos ejemplos/tutoriales (incluido Alexandria de Ayende en MSDN).

Pero solo obtener ensamblajes algo actualizados han demostrado ser un obstáculo en sí mismo. Después de obtener la versión correcta de Castle.Windsor, no puede encontrar la sección correcta en el archivo App.config. La sintaxis tanto en Rhino Service Bus y CastleBootstrapper también ha cambiado, y ahora estoy totalmente confundido. La 'documentación' sobre la hibernación de rinocerontes realmente no me ayuda a comenzar.

¿Podría alguien ayudarme una muestra de trabajo con el autobús de servicio de rinocerontes con Castle Windsor v. 3.0 (beta) o 2.5.3, señalarme algo ya en línea o simplemente darme un consejo paso a paso sobre lo que necesito obtener? ¿en funcionamiento?

¿Fue útil?

Solución

Después de descargar los últimos bits de Rhino-DESB de GitHub (https://github.com/hibernating-rhinos/rhino-esb) y construirlo, es bastante sencillo comenzar.

Tengo una aplicación ASP.NET MVC que se comunica con un backend a través de Rhino-SB.

En el lado ASP.NET MVC:

En 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));
}

Tenga en cuenta que YourCustomInstaller debe implementar IWindsorInstaller y registra sus controladores con el contenedor en el Installmétodo:

public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{
    container.Register(Component
       .For<HomeController>().LifeStyle.PerWebRequest.ImplementedBy<HomeController>());

También tenga en cuenta que el WindsorControllerFactory Delegue internamente la creación del controlador al contenedor:

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
            return null;
        return (IController)this.container.Resolve(controllerType);
    }

Por último, pero no menos importante, proporcione la configuración en su 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>

Esta configuración supone que el backend ejecuta una cola en Localhost: 31315 y el cliente ejecuta su cola en Localhost: 31316.

En el lado del backend: suponiendo que lo estemos ejecutando como una aplicación de consola,

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();

Darse cuenta de YourBootstrapperimplementos de clase CastleBootstrapper

public class YourBootstrapper: Rhino.ServiceBus.Castle.CastleBootStrapper
    {
        protected override void ConfigureContainer()
        {
            Container.Register(Component.For<OneOfYourMessages>());
        }
    }

en el que estamos registrando un consumidor para OneOfYourMessages

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top