Camel JMS, обеспечивающая упорядочение при неизменности канала мертвой буквы

Я использую верблюд для интеграции с ActiveMQ JMS. Я получаю цены на продукты в этой очереди. Я использую JMSXGroupID на productId, чтобы обеспечить упорядочение через productId. Теперь, если я не смогу обработать это сообщение, переместите его в DeadLetterQueue. Это может быть из-за ошибки подключения на зависимой службе или из-за ошибки с самим сообщением. В случае с первым мне пришлось бы вручную удалить его из DLQ и вернуть его в очередь JMS. Теперь проблема в том, что я не знаю, было ли получено или обработано какое-либо другое сообщение в этой группе. И, следовательно, исключение из DLQ нарушит порядок. С другой стороны, если я не уверен, что он и никакое другое сообщение не получено, идентификатор продукта не получит правильную цену. 1, которое я имею в виду, заключается в использовании быстрого хранилища ключей (Redis) для хранения последнего сообщения II или JMSTimestamp в отношении productId (группы сообщений). Это обновляется каждый раз, когда я удаляю сообщение. Любое другое решение для этого?

1 ответ

Опираясь на порядок сообщений в JMS - это рискованный бизнес - в лучшем случае. Лучше всего сделать так, чтобы получатель обрабатывал сообщения вне очереди как особый случай (но может иметь преимущественный порядок сообщений во время нормальной работы).

Вы также можете различать две ошибки: сообщения posion и временные проблемы с подключением, возможно, даже использовать для них две очереди ошибок. В случае сообщения с позицией (недопустимая полезная нагрузка и т.д.), Вы ничего не можете с этим поделать, кроме как начать проверку ошибок. В таких случаях вы, возможно, можете отправить "что-то еще", например, фиктивное сообщение, чтобы не мешать порядку.

Для проблем, связанных с подключением, у вас может быть другая стратегия - ActiveMQ Redelivery Policies. Если есть проблемы с сетью, обычно нет смысла пытаться обработать второе сообщение до тех пор, пока не будет обработано первое. Политика Redelivery гарантирует, что (если у вас есть один потребитель, то есть). В qaru.site/questions/3602459/... есть еще один вопрос, где плакат действительно имеет решение вашей проблемы и хочет его избежать. Прочтите. :)

licensed under cc by-sa 3.0 with attribution.