Я пытаюсь обработать сообщения с поддержкой сеанса в функции Azure версии 2.Вот метод запуска
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 сообщения не всегда совпадает со свойством SessionId IMessageSession.
Причина, по которой я использую объект MessageSession, заключается в чтении любых других сообщений в очереди для того же сеанса.Мне нужно сделать это, чтобы я мог обрабатывать всю партию сообщений одновременно.Очевидно, что это не работает правильно, когда первое сообщение предназначено для 12-го сеанса, но оно предназначено для 14-го сеанса.
Что я делаю не так?Есть ли другой способ сделать то же самое?
EDIT
Я добавил 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}");
}