Servicebus python sdk постоянно выдает "Сообщение заблокировано" - PullRequest
0 голосов
/ 18 февраля 2020

У меня проблема с сервисом Bus. У меня есть много сообщений, которые публикуются в служебной шине, которая обрабатывается потребителями за пределами шкалы. Что я видел, так это то, что мой процесс через какое-то время просто зависает с последним сообщением в журналах, которое я вижу t):

 File "/home/ubuntu/tvsm-eventhub-consumer/consumers/serviceBusConsumer.py", line 96, in process_msg
    msg.complete()
  File "/home/ubuntu/.local/lib/python3.6/site-packages/azure/servicebus/common/message.py", line 325, in complete
    self._is_live('complete')
  File "/home/ubuntu/.local/lib/python3.6/site-packages/azure/servicebus/common/message.py", line 97, in _is_live
    raise MessageLockExpired(inner_exception=self.auto_renew_error)
azure.servicebus.common.errors.MessageLockExpired: Message lock expired

Я использую однопроцессорную машину на 2 ГБ за масштабом, установленным в Azure , Когда я смотрю на процесс, он занимает 100% загрузки процессора, но находится в режиме заморозки.

Мои python версии пакетов

azure-servicebus==0.50.2
uamqp==1.2.5

Это код, который я использую

with self.queue_client.get_receiver() as queue_receiver:
 lock_time = 300
 lock_renewal = AutoLockRenew(max_workers=4)
 message = queue_receiver.fetch_next()

 msg = message[0]
 lock_renewal.register(msg, timeout=lock_time)

 proccess msg

 msg.complete()

5 минут - это то, что установлено в качестве периода блокировки в сервисной шине. Иногда обработка моего сообщения занимает больше времени. В чем может быть проблема.

Еще одно наблюдение, которое я вижу, - это ошибка

"2020-02-18 04:32:29,245 - ThreadPoolExecutor-0_2 -connection - work - uamqp.c_uamqp - INFO - CBS error occured on connection b'SBReceiver-e2a26b20-7d9b-47b9-bb70-da836bbcc74a'.
2020-02-18 04:32:29,246 - ThreadPoolExecutor-0_2 -receiver - _detach_received - uamqp.receiver - INFO - Received Link detach event: b'amqp:connection:forced'
Link: b'receiver-link-05cabf7d-fd64-4f65-86c0-d5ce4c67b733'
Description: b"The connection was inactive for more than the allowed 240000 milliseconds and is closed by container '2a83654461174e5492f21ff69047ec8d_G15'."
Details: None
Retryable: True
Connection: b'SBReceiver-e2a26b20-7d9b-47b9-bb70-da836bbcc74a'
2020-02-18 04:32:29,246 - ThreadPoolExecutor-0_2 -receiver - on_state_changed - uamqp.receiver - INFO - Message receiver b'receiver-link-05cabf7d-fd64-4f65-86c0-d5ce4c67b733' state changed from <MessageReceiverState.Open: 2> to <MessageReceiverState.Error: 4> on connection: b'SBReceiver-e2a26b20-7d9b-47b9-bb70-da836bbcc74a'
2020-02-18 04:32:29,246 - ThreadPoolExecutor-0_2 -connection - _state_changed - uamqp.connection - INFO - Connection b'SBReceiver-e2a26b20-7d9b-47b9-bb70-da836bbcc74a' state changed from <ConnectionState.OPENED: 9> to <ConnectionState.CLOSE_RCVD: 10>
2020-02-18 04:32:29,264 - ThreadPoolExecutor-0_2 -connection - _state_changed - uamqp.connection - INFO - Connection b'SBReceiver-e2a26b20-7d9b-47b9-bb70-da836bbcc74a' state changed from <ConnectionState.CLOSE_RCVD: 10> to <ConnectionState.END: 13>
2020-02-18 04:32:29,265 - ThreadPoolExecutor-0_2 -connection - _close_received - uamqp.connection - INFO - Received Connection close event: b'amqp:connection:forced'
Connection: b'SBReceiver-e2a26b20-7d9b-47b9-bb70-da836bbcc74a'
Description: b"The connection was inactive for more than the allowed 240000 milliseconds and is closed by container '2a83654461174e5492f21ff69047ec8d_G15'."

После этой ошибки максимальная загрузка процессора.

1 Ответ

0 голосов
/ 03 марта 2020

Учитывая, что вы используете 100% ЦП одним ядром, вполне вероятно, что поток обновления обновления не получает времени до истечения срока блокировки.

Возможно, вам следует попытаться увеличить количество ядер в ваша виртуальная машина в зависимости от того, насколько интенсивна обработка, а также запускайте процесс, требующий большого количества вычислений, на отдельном ядре, используя пакет multiprocessing .

Вот блог , который подробно описывает многоядерную обработку в python.

Кроме того, поскольку вы, похоже, пытаетесь работать с минимальными затратами, Azure Функции - это то, что вы можете использовать , Если вам требуется более 10 минут (максимум для уровня потребления) на выполнение, вы можете рассмотреть возможность использования Премиум-функции .

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