Iniziare con Rhino Service Bus
-
27-10-2019 - |
Domanda
Ho letto molti esempi/tutorial (incl. Alessandria di Ayende su MSDN).
Ma solo ottenere assemblaggi in qualche modo aggiornati si sono dimostrati un ostacolo in sé. Dopo aver ottenuto la versione corretta di Castle.windsor, non riesce a trovare la sezione corretta nel file app.config. La sintassi sia nel bus di servizio di Rhino che nel Castlebootstrapper è stata cambiata - e ora sono totalmente confuso. La "documentazione" sui rinoceronti in letargo non mi sta davvero aiutando a iniziare.
Qualcuno potrebbe aiutarmi un campione funzionante con il bus di servizio Rhino con Castle Windsor v. 3.0 (beta) o 2.5.3, indicami qualcosa di già online o semplicemente dandomi un gioco passo-passo su ciò che devo ottenere per ottenere installato e funzionante?
Soluzione
Dopo aver scaricato gli ultimi bit Rhino-ESB da GitHub (https://github.com/hibernating-rhinos/rhino-esb) e costruendolo, è piuttosto semplice iniziare.
Ho un'applicazione MVC ASP.NET che comunica con un backend tramite Rhino-ESB.
Sul lato ASP.NET MVC:
Su 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));
}
Notare che YourCustomInstaller
deve implementare IWindsorInstaller
e registri i tuoi controller con il contenitore in Install
metodo:
public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{
container.Register(Component
.For<HomeController>().LifeStyle.PerWebRequest.ImplementedBy<HomeController>());
Si noti inoltre che il WindsorControllerFactory
delega internamente la creazione del controller al contenitore:
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
return null;
return (IController)this.container.Resolve(controllerType);
}
Ultimo ma non meno importante, fornisci la configurazione sul tuo 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>
Questa configurazione presuppone che il backend esegui una coda in LocalHost: 31315 e il client esegue la sua coda su LocalHost: 31316.
Sul lato backend: supponendo che lo stiamo eseguendo come applicazione della 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();
Notare che YourBootstrapper
implementazioni di classe CastleBootstrapper
public class YourBootstrapper: Rhino.ServiceBus.Castle.CastleBootStrapper
{
protected override void ConfigureContainer()
{
Container.Register(Component.For<OneOfYourMessages>());
}
}
in cui stiamo registrando un consumatore per OneOfYourMessages