我们有 pub/sub 应用程序,其中涉及通过 Azure 服务总线主题订阅 Web 角色发布者的外部客户端。我们当前的计费周期表明我们已发送/接收 >25K 消息,而我们的仪表板表明我们已发送 <100 条消息。我们正在调查我们的实施并检查我们的假设以了解差异。
作为我们调查的一部分,我们收集了客户端机器上客户端<=>服务总线流量的wireshark捕获。我们注意到一种我们没有看到记录的常规通信模式,并且希望更好地理解。当总线上没有其他活动时,每 50 秒发生一次以下交换:
- 客户端将 ~200B 推送到服务总线。
- 10 秒后,服务总线将 ~800B 推送到客户端。客户端注册一个空消息的接收(通过断点确定。)
- 客户端立即响应,将 ~1000B 推送到服务总线。
一些相关信息:
- 当我们的 Web 角色没有主动将数据推送到服务总线时,就会发生这种情况。
- 在收到来自 Web 角色的合法消息后,上述模式将不会再次出现,直到整整 50 秒过去。
- 客户端和服务器都通过 TCP 连接到 sb://命名空间.servicebus.windows.net。
- 我们的应用程序消息 <64 KB
问题
- 我们看到的常规 3 包消息交换是由什么原因造成的?它是某种保活吗?
- 3 个数据包中的每一个都算作单独计费消息吗?
- 此行为是否可配置或以其他方式记录?
编辑:
这是接收消息的代码:
private void Listen()
{
_subscriptionClient.ReceiveAsync().ContinueWith(MessageReceived);
}
private void MessageReceived(Task<BrokeredMessage> task)
{
if (task.Status != TaskStatus.Faulted && task.Result != null)
{
task.Result.CompleteAsync();
// Do some things...
}
Listen();
}