Joe*_*erg 6 c# azureservicebus azure-servicebus-queues azure-servicebus-topics asp.net-core
ServiceBusReceiver.ReceiveMessageAsync()只是出于好奇:当我们调用并等待或时,幕后到底发生了什么ServiceBusReceiver.ReceiveMessageAsync(TimeSpan.FromMinutes(10))?
做
a.) ServiceBusReceiver(长)轮询 Azure 服务总线或
b.) Azure 服务总线以某种方式发送推送通知到ServiceBusReceiver?
我尝试查看源代码,但没有走得太远,因为InnerReceiver使用了一些我在代码库中找不到的类。
最终编辑
在ServiceBus Sdk层面,它是一种拉式通信模型,只是为了更好地处理传入消息的确认。
但在幕后,Azure 服务总线 sdk 使用高级消息队列协议 1.0,该协议不进行长轮询,它使用AmqpLink同一协议上的 sAmqpConnection将数据从发送方发送到接收方,接收方将传入消息保存到内存缓冲区中收到它们后。
您可以在此处阅读有关它的更多信息 ,或者观看 Microsoft 提供的有关AMQP 1.0 协议的视频系列。
因此,“幕后到底发生了什么”的答案似乎既不是 A 也不是 B,消息被推送到ReceivingAmqpLink(内存缓冲区),然后从中ServiceBusReceiver拉出。
我希望这个答案能够结束这次讨论,每个人都会高兴:)
源代码:
ServiceBusReceiver包裹着AmqpReceiver
包裹ReceiveMessagesAsync的AmqpReceiver
ReceivingAmqpLink在 the 的构造函数中创建AmqpReceiver
ReceivingAmqpLink如果可能的话在同一连接上打开
调用“公共异步函数”AmqpReceiver.ReceiveMessagesAsync
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |