我想知道Service Bus Message Pump如何在引擎盖下工作。是否有人可以指出我的好文件。
当我将消息发送到队列并等待回调呼叫时,我看不到场景后面发生任何Http调用。如何进行回调,是否有任何开放的TCP会话?该通信使用了什么协议。
任何帮助都有帮助。
答案 0 :(得分:3)
Service Bus Message Pump只是现有Receive
操作的一个很好的包装器。我的理解是,在一个线程中,一个线程被用于使用标准Receive
方法从队列中请求消息。当消息泵收到消息时,它将启动一个线程并调用OnMessage委托(最多为OnMessageOptions类上的并发调用数属性)。
关于消息泵到服务总线的实际通信,这取决于connectivity mode。代理默认情况下,代理消息传递的连接模式是AutoDetect,但正如您在链接末尾看到的注释,代理消息传递不支持从TCP回退到HTTP,因此对于Brokered消息传递,它从TCP开始并保持除非您明确地将其设置为HTTP。
在HTTP连接模式下,如果您有correct ports open,则可以看到来自Receive
呼叫的请求消失,并且只要轮询发生,您就可以看到它续订请求。在TCP模式下(或默认情况下,因为AutoDetect不会回退到HTTP),它会打开TCP连接(在端口9354上)并将其用于双向通信。如果使用Process Explorer或NetStat之类的东西,你可以看到这个。
服务总线使用的专有协议实际上没有那么多好的文档。它们直接支持AMQP,一种开放的消息传递协议,它通过不同的端口。 .NET library handles this,但您可以通过连接字符串确定传输,或者通过在MessagingFactory
对象上设置TransportType
来创建MessagingFactoryOptions
。