3

我已经阅读了很多示例/教程(包括 MSDN 上的 Ayende 的 Alexandria)。

但事实证明,仅仅获得一些更新的程序集本身就是一个障碍。获得正确版本的 Castle.Windsor 后 - 它无法在 app.config 文件中找到正确的部分。Rhino Service Bus 和 CastleBootstrapper 的语法也发生了变化——我现在完全糊涂了。Hibernating Rhinos 上的“文档”真的没有帮助我入门。

任何人都可以帮助我使用带有 Castle Windsor v. 3.0 (beta) 或 2.5.3 的 Rhino Service Bus 的工作示例,给我指点已经在线的东西,或者只是给我一个关于我需要得到什么的分步指示启动并运行?

4

1 回答 1

8

从 github (https://github.com/hibernating-rhinos/rhino-esb) 下载最新的 Rhino-ESB 位并构建它之后,上手非常简单。

我有一个通过 Rhino-ESB 与后端通信的 asp.net MVC 应用程序。

在 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>

此配置假定后端在 localhost:31315 中运行队列,客户端在 localhost: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();

注意YourBootstrapper类实现CastleBootstrapper

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

我们在其中注册消费者OneOfYourMessages

于 2011-10-14T14:42:21.470 回答