Начало работы с автобусом Service Rhino
-
27-10-2019 - |
Вопрос
Я прочитал много примеров/учебных пособий (в том числе Александрия Айенде на MSDN).
Но просто получить несколько обновленных собраний оказалось препятствием само по себе. После получения правильной версии Castle.windsor - он не может найти правильный раздел в файле app.config. Синтаксис в автобусе Rhino Service и CastlebootStrapper также изменился - и теперь я полностью запутался. «Документация» о спящих носорогах на самом деле не помогает мне начать работу.
Может ли кто-нибудь, пожалуйста, помочь мне в рабочем образе с автобусом Rhino Service с либо Castle Windsor v. 3.0 (бета), либо 2.5.3, укажите мне на что-то уже в Интернете или просто дал мне пошаговые указатели о том, что мне нужно, в беге?
Решение
После загрузки новейших битов 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>
Эта конфигурация предполагает, что бэкэнд выполняет очередь в 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