Функция Azure Service Bus Message.SessionId отличается от MessageSession.SessionId - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь обработать сообщения с поддержкой сеанса в функции 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.

enter image description here

Причина, по которой я использую объект 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}");
}

enter image description here

1 Ответ

0 голосов
/ 23 сентября 2019

Из этого комментария я получил решение, может быть, вы могли бы попробовать.Я установил MaxConcurrentSessions и MessageWaitTimeout с последующим host.json.

"extensions": {
"serviceBus": {
  "SessionHandlerOptions": {
    "AutoComplete": true,
    "MaxConcurrentSessions": 1,
    "MessageWaitTimeout": "00:00:05"
  }
  }
}

И тогда результат будет похож на рисунок ниже.

enter image description here

При этой настройке идентификатор будет таким же, однако он будет обрабатывать сообщение одно за другим.Надеюсь, это поможет вам, если у вас все еще есть проблемы, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...