如何将消息从 queue/subscription 发送到接收者?

How a message is send to receiver from queue/subscription?

我的问题是服务总线中的接收器如何侦听新消息?它是否在一段时间后向服务总线发送查询请求以获取任何新消息,或者服务总线将任何新消息推送到连接的接收器?

我正在使用 .NET 客户端库,它默认使用 SBMP 协议。

我的回答是指在 AMQP 上运行的 Azure 服务总线 SDK (Link -> https://github.com/Azure/azure-service-bus-java)。

MessageReceiver 对象用于在需要时从队列接收消息。

这个class有一个接收函数,它将服务器等待时间作为参数(默认为30秒)。

这意味着如果队列中没有消息,它不会立即return,而是等待 30 秒或您为新消息指定的任何时间。

如果之前有新消息,那么它将 return 到那时。

这基本上称为长轮询。

它避免了客户端不断轮询队列。

当您进行手动接收(或批量接收)时,这并不重要,因为服务器会为您提供您请求的任何内容(如果少于请求的内容,则服务器会提供当时的内容)。如果您将 OnMessage API 与回调一起使用,无论传输方式如何,您都会在每条消息上获得回调调用,无论它是推送还是拉取。对于 SBMP,消息由客户端从代理轮询。使用 AMQP,它们由代理推送到客户端。