开发者

Is there a way to spoof the return address on a message using NServiceBus?

I'm building a web site that sends commands to other endpoints in order to effect changes in the domain. In the event that a command fails for a business reason, I'd like to be able to use Bus.Reply() and send a command failure message to an endpoint at the ReturnAddress specified in the TransportMessage.

In attempting to accomplish this, I've set up the MsmqTransportConfig in my web.config to have the appropriate InputQueue value; the Bus.Reply() call then works correctly. However, when the reply is received in the specified queue, the web site proceeds to consume it, which is not what I want to happen; I have another endpoi开发者_JAVA技巧nt listening to the same queue to consume these events.

Is there a way to have NServiceBus use the ReturnAddress header on the sent message, or a way to instruct a process not to pay attention to the iput queue specified in MsmqTransportConfig, or a way to set the ReturnAddress value programatically on the TransportMessage?


It turns out it is possible to do this. Here is the configuration block I ended up using:

var config = Configure.WithWeb().StructureMapBuilder(ObjectFactory.GetInstance<IContainer>()).XmlSerializer();
config.UnicastBus().MsmqTransport();
config.Configurer
    .ConfigureComponent<MsmqTransport>(ComponentCallModelEnum.Singleton)
    .ConfigureProperty(t => t.InputQueue, "MyReturnQueue");
config.CreateBus().Start();

I haven't looked through the code yet to figure out exactly what is happening, but it appears that if there is not an MsmqTransportConfig entry in the web.config file, the transport will not listen on its input queue. So by setting the InputQueue property programatically before the bus is created, the ReturnAddress of the TransportMessage gets populated, but the bus does not consume messages at that address.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜