为什么nservicebus忽略我的订阅消息?
本文关键字:消息 我的 nservicebus 为什么 | 更新日期: 2023-09-27 18:12:55
我有两个简单的控制台应用程序来集成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>
我想这只是最初的"我想订阅你发布的类型为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>
忽略订阅的可能原因是发给发布者的传入消息与订阅中定义的类型不匹配。
因此,当发布者收到消息时,它将根据其中持有的订阅对其进行评估,并且将找不到匹配项,因此不会向您的订阅者发送消息。
这可能是因为NServiceBus中的消息类型不仅由程序集/类型名称定义,还由程序集版本和公钥令牌定义。
检查发布者和订阅者持有的消息集的版本/PK令牌,并确保它们完全匹配。
OK,听起来好像你的输入队列的权限在某种程度上阻止了你的发布者服务帐户读取消息。请尝试赋予服务帐户完全控制权。
另外,您是否检查了日志中错误的默认日志记录位置?(C: '用户(用户名)当地' AppData ' ' Temp)