我有两个简单的控制台应用程序来集成nservicebus。一个是发布者,另一个是订阅者。案例中的订阅者还通过Send()
从另一个Web应用程序接收其他消息。当我在我的开发环境中本地运行它们时,没有问题,一切都按预期工作。我可以从Web应用程序发送消息并在我的“订户”上接收消息,并在我的订阅者处接收已发布的消息。
但是,在部署到Server 2008 R2时,订阅者会向发布者StatusQueue发送包含以下内容的初始消息:
<?xml version="1.0"?>
<Messages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.net/NServiceBus.Unicast.Transport">
<CompletionMessage>
<ErrorCode>0</ErrorCode>
</CompletionMessage>
</Messages>
我认为这只是最初的“我想订阅你发布的消息类型的消息。*”。此消息只是位于队列中,并且永远不会被发布者选中。
发布商的配置:
<MsmqSubscriptionStorageConfig
Queue="StatusQueueSubscriptions" />
<MsmqTransportConfig
InputQueue="StatusQueue"
ErrorQueue="StatusError"
NumberOfWorkerThreads="1"
MaxRetries="5"/>
订阅者的配置:
<MsmqTransportConfig
InputQueue="AppsInputQueue"
ErrorQueue="AppsError"
NumberOfWorkerThreads="1"
MaxRetries="5"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="Messages" Endpoint="StatusQueue"/>
</MessageEndpointMappings>
</UnicastBusConfig>
答案 0 :(得分:1)
您的订阅被忽略的可能原因是发布者的传入消息与订阅中定义的类型不匹配。
因此,当发布者收到消息时,它将根据其中保留的订阅对其进行评估,并且找不到匹配项,因此不会向您的订阅者发送任何消息。
这可能是因为NServiceBus中的消息类型不仅由程序集/类型名称定义,而且由程序集版本和公钥令牌定义。
检查发布者和订阅者所拥有的消息程序集的版本/ PK令牌,并确保它们完全匹配。
<强>更新强>
确定听起来像输入队列上的权限在某种程度上阻止了您的发布者服务帐户阅读邮件。尝试完全控制服务帐户。
另外,您是否检查了日志中错误的默认日志记录位置? (C:\用户(用户名)\应用程序数据\本地\温度)