Azure functions Azure服务总线函数Message.SessionId不同于MessageSession.SessionId

Azure functions Azure服务总线函数Message.SessionId不同于MessageSession.SessionId,azure-functions,azureservicebus,Azure Functions,Azureservicebus,我正在尝试在Azure版本2函数中处理启用会话的消息。下面是run方法 public async Task Run([ServiceBusTrigger("order", "ordereventhandler", Connection = "xxx", IsSessionsEnabled = true)]Message message, IMessageSession messageSession) { _logger.LogDebug($"Received message: Sessi

我正在尝试在Azure版本2函数中处理启用会话的消息。下面是run方法

public async Task Run([ServiceBusTrigger("order", "ordereventhandler", Connection = "xxx", IsSessionsEnabled = true)]Message message, IMessageSession messageSession)
{
    _logger.LogDebug($"Received message: Session: {message.SessionId}, SequenceNumber: {message.SystemProperties.SequenceNumber}, Label: {message.Label}, Body: {Encoding.UTF8.GetString(message.Body)}");
    _logger.LogDebug($"Message.SessionId: {message.SessionId}, MessageSession.SessionId: {messageSession.SessionId}");
}
输出显示消息的SessionId属性并不总是与IMessageSession的SessionId属性匹配

我使用MessageSession对象的原因是为同一会话读取队列中的任何其他消息。我需要这样做,这样我就可以一次处理整批消息。显然,当第一条消息用于会话12,而消息会话用于会话14时,这是不正确的

我做错了什么?有没有其他方法来完成同样的事情

编辑

我将ExecutionContext.InvocationId添加到日志消息中。它显示结果来自两个不同的线程

public async Task Run([ServiceBusTrigger("order", "ordereventhandler", Connection = "xxx", IsSessionsEnabled = true)]Message message, IMessageSession messageSession, ExecutionContext context)
{
    _logger.LogDebug($"Received message: Session: {message.SessionId}, SequenceNumber: {message.SystemProperties.SequenceNumber}, Label: {message.Label}, Body: {Encoding.UTF8.GetString(message.Body)}");
    _logger.LogDebug($"Message.SessionId: {message.SessionId}, MessageSession.SessionId: {messageSession.SessionId}, Context.InvocationId: {context.InvocationId}");
}

从中,我得到了一个解决方案,也许你可以试一试。我使用follow host.json设置
MaxConcurrentSessions
MessageWaitTimeout

"extensions": {
"serviceBus": {
  "SessionHandlerOptions": {
    "AutoComplete": true,
    "MaxConcurrentSessions": 1,
    "MessageWaitTimeout": "00:00:05"
  }
  }
}
然后结果将如下图所示


通过此设置,id将是相同的,但它将逐个处理消息。希望这能帮助您,如果您仍然有问题,请随时告诉我。

您能记录函数执行上下文以查看这两个不同的函数实例是否正确吗?谢谢,但这似乎没有任何区别。