Начало работы со служебной шиной Rhino

Я прочитал много примеров/учебников (включая Александрию Айенде в MSDN).

Но получение несколько обновленных сборок само по себе оказалось препятствием. После получения правильной версии Castle.Windsor не может найти нужный раздел в файле app.config. Синтаксис как в служебной шине Rhino, так и в CastleBootstrapper также был изменен, и теперь я полностью запутался. «Документация» по Hibernating Rhinos действительно не помогает мне начать работу.

Может ли кто-нибудь помочь мне с рабочим образцом Rhino Service Bus с Castle Windsor v. 3.0 (бета) или 2.5.3, указать мне на что-то уже онлайн или просто дать мне пошаговые указатели на то, что мне нужно получить и работает?


person Goblin    schedule 08.09.2011    source источник


Ответы (1)


после загрузки последних версий Rhino-ESB с github (https://github.com/hibernating-rhinos/rhino-esb) и их сборки начать работу довольно просто.

У меня есть приложение asp.net MVC, которое взаимодействует с серверной частью через Rhino-ESB.

На стороне asp.net MVC:

На 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));
}

Обратите внимание, что YourCustomInstaller должен реализовать IWindsorInstaller, и вы регистрируете свои контроллеры в контейнере в методе Install:

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

Также обратите внимание, что WindsorControllerFactory внутренне делегирует создание контроллера контейнеру:

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

И последнее, но не менее важное: укажите конфигурацию в файле 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>

Эта конфигурация предполагает, что бэкэнд запускает очередь на локальном хосте: 31315, а клиент запускает свою очередь на локальном хосте: 31316.

На стороне сервера: если мы запускаем его как консольное приложение,

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

Обратите внимание, что YourBootstrapperclass реализует CastleBootstrapper

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

в котором мы регистрируем потребителя для OneOfYourMessages

person juanagui    schedule 14.10.2011
comment
Спасибо! Надо будет попробовать :-). - person Goblin; 13.11.2011
comment
У меня это работает! Большое спасибо, чувак - кажется, в последнее время в проекте произошли некоторые изменения. Просто получить его на NuGet было огромной помощью. Плюс помогли последние статьи Айенде. - person Goblin; 19.12.2011
comment
Я думаю, вы имеете в виду эта статья - person Marijn; 26.10.2012