NServiceBus 위에 레이어를 작성하여 다른 개발자가보다 쉽게 사용할 수 있도록하려고합니다. 나는 또한 NServiceBus 가입자를 가지고 있으며이 가능 개발자의 수에 가입 할 수 있도록 할NServiceBus에서 가입 된 메시지 유형을 수동으로 처리하려면 어떻게해야합니까?
public class NServiceBusPublisher
{
private IBus _Bus { get; set; }
public void NServiceBusPublisher(string argInputQueue, string argErrorQueue)
{
Configure configure = NServiceBus.Configure.With().DefaultBuilder();
var transport = configure.Configurer.ConfigureComponent<MsmqTransport>(ComponentCallModelEnum.Singleton);
transport.ConfigureProperty(t => t.InputQueue, argInputQueue);
transport.ConfigureProperty(t => t.ErrorQueue, argErrorQueue);
transport.ConfigureProperty(t => t.NumberOfWorkerThreads, 1);
transport.ConfigureProperty(t => t.MaxRetries, 5);
_Bus =
configure
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.PurgeOnStartup(false)
.MsmqSubscriptionStorage()
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start();
}
public void Publish(NServiceBus.IMessage argMessage)
{
_Bus.Publish(argMessage);
}
}
을 : 나는 설정 파일없이하려고 노력하고있어
작동하는 게시자를 얻을 수 있었다 한 메시지가 NServiceBus.IMessage에서 상속으로 메시지 유형 :
public class NServiceBusSubscriber
{
private IBus _Bus { get; set; }
public void NServiceBusSubscriber(string argInputQueue, string argOutputQueue, string argErrorQueue, string messagesAssembly)
{
Configure configure = NServiceBus.Configure.With().DefaultBuilder();
var transport = configure.Configurer.ConfigureComponent<MsmqTransport>(ComponentCallModelEnum.Singleton);
transport.ConfigureProperty(t => t.InputQueue, argInputQueue);
transport.ConfigureProperty(t => t.ErrorQueue, argErrorQueue);
transport.ConfigureProperty(t => t.NumberOfWorkerThreads, 1);
transport.ConfigureProperty(t => t.MaxRetries, 5);
var ucb = configure.Configurer.ConfigureComponent<NServiceBus.Unicast.UnicastBus>(ComponentCallModelEnum.Singleton);
ucb.ConfigureProperty(u => u.MessageOwners, new Dictionary<string,string>()
{
{messagesAssembly, argOutputQueue}
});
_Bus =
configure
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.PurgeOnStartup(false)
.MsmqSubscriptionStorage()
.UnicastBus()
.ImpersonateSender(false)
.DoNotAutoSubscribe()
.CreateBus()
.Start();
}
public void Subscribe<T>() where T : NServiceBus.IMessage
{
_Bus.Subscribe<T>();
}
}
문제는 내가 특정 메시지 유형에 이벤트 핸들러를 첨부 할 수있는 방법을 찾을 수 있다는 것입니다.
제발 알아낼 수 있을까요?
대단히 감사합니다.
IHandleMessages 클래스를 구현하지 않고 Bus.Subscribe()를 사용하지만 NServiceBus에 메시지가 수신 될 때마다 NSB가 호출 할 수있는 일종의 메서드 이름을 제공하려고합니다. 아담 감사합니다. – bahith
이것은 NSB가 작동하는 방식에 반대하며, 가능하더라도이 방법을 권장하지는 않습니다. 소비자가 인터페이스를 구현하기에 충분히 간단해야하며, 사용자를 대신하여 유선 방식 인 "Handle"메소드가 포함되어 있습니다. –
나는 Adam에 동의한다 - NServiceBus는 "독단적 인 틀"이다. 그러한 의견을 거스러 뜨리면 매우 어려워집니다. –