Возможно ли надежно отправить сообщение JMS адресату? Надежно я имею в виду обеспечение того, что, если, например, MessageProducer.send()
вызов по какой-то причине невозможен, он будет повторно выполнен автоматически. Я понимаю, что сеанс транзакции может использовать .recover()
в качестве последнего средства, но как насчет повторной попытки? Например. У меня прерывистый сетевой сбой между сеансами был установлен и попытался отправить сообщение. Как будет recover()
помощь в этом случае?Как можно надежно отправить сообщение JMS? (сбой при ошибках MessageProducer.send())
ответ
Насколько я знаю, JMS не поддерживает такое поведение. Вы можете искать среди определенных расширений поставщиков, но, IMHO, маловероятно, что вы найдете что-то подходящее для ваших нужд.
Я вижу только два решения вашей проблемы:
Реализовать его. Вы можете управлять сеансом JMS вручную, улавливать любое исключение и, если необходимо, использовать функцию «только откат» диспетчера транзакций, чтобы аннулировать транзакцию.
Используйте локальную очередь для хранения сообщений и используйте фоновый сервис, чтобы переместить их в целевую удаленную очередь. Обратите внимание, что многие администраторы очереди поддерживают это, например. Store and forward Queues of ActiveMQ. Очевидно, что в этом случае граница транзакции не будет включать удаленную очередь.
Я знаю, что 2-е решения не являются полным ответом на вашу проблему, но много раз это достаточно.
В JMS не указано поведение, которое вы ищите. На самом деле JMS специально решает проблемы из-за сбоя сети, отмечая, что вы можете получить одно и то же сообщение дважды и называет это «функционально дублирующимся» сообщением, поскольку с точки зрения брокера JMS он был доставлен только один раз.
Поскольку это не является частью JMS, ваш ответ лежит на разных вариантах реализации поставщика. Например, WebSphere MQ имеет функцию «Диспетчер очередей нескольких экземпляров» с версии 7.0.1. Клиентское приложение v7.0.1 автоматически повторит соединение и даже выполнит QMgr от первичного до вторичного узла в случае сбоя. Приложение блокирует, пока это происходит, и не знает об откате.
Однако, даже при таком поведении ваше приложение по-прежнему нуждается в коде для отказа. Например, если вы используете автоматическое повторное подключение WMQ (или переадресацию какого-либо другого провайдера), вы, вероятно, захотите настроить время, в течение которого приложение может заблокировать ожидание восстановления соединения, чтобы пользователь не испытывал неопределенное зависание. Когда вызов разблокируется, транзакция откатывается, и в коде должна повторяться любая повторная попытка. Это необходимо, поскольку транзакция связана с соединением, которое больше не действует.
- 1. JMS - Отправить сообщение sychronously из сообщений компонента
- 2. Ошибка при попытке отправить сообщение JMS
- 3. отправить сообщение удаленному провайдеру JMS
- 4. Как отправить сообщение jms через html-форму в приемник jms ??
- 5. Как отправить сообщение JMS из JBOSS Fuse в Weblogic JMS
- 6. Как отправить JMS-сообщение при изменении контента в Alfresco?
- 7. (Как) можно ли отправить сообщение одному клиенту?
- 8. можно отправить массив байтов в сообщении JMS
- 9. Не удалось отправить сообщение Solace JMS Queue
- 10. JMS Websphere сообщение потерял на отправить
- 11. JMS - сообщение redlivery при неудаче
- 12. Apache Camel отправить сообщение JMS Потребитель получает сообщение
- 13. JMS-сообщение удаленному серверу
- 14. JMS Селектор сообщение подстановочные
- 15. Как отправить сообщение в очередь JMS с помощью javascript?
- 16. как сделать сообщение об ошибке и отправить его поставщику JMS
- 17. Как отправить сообщение JMS в очередь TIBCO с помощью Jmeter?
- 18. Как отправить сообщение XML JMS на FTP в интеграцию Spring
- 19. Как отправить электронное письмо в PHP надежно?
- 20. Как отправить сообщение об ошибках ASP.NET по электронной почте
- 21. Не удалось получить сообщение с помощью JmsTemplate.receive(), созданного с помощью MessageProducer.send()
- 22. MQRC_UNKNOWN_ALIAS_BASE_Q при использовании пружины JmsTemplate отправить сообщение
- 23. Как отправить SOAPMessage в JMS
- 24. JMS доставляет сообщение позднее
- 25. Как «скопировать» сообщение JMS в 2 адресата?
- 26. JMS предыдущее сообщение подтверждения
- 27. Сообщение об ошибке блокируется при ошибках разбора
- 28. Повторно отправить сообщение JMS, если ответ не получен
- 29. Как отправить SMS программно профессионально и надежно?
- 30. Отправить сообщение JMS queue с помощью java Swing
Да, JMS может быть полностью транзакционным. Тем не менее, хаусы и все сложности сложны, и ваш вопрос слишком расплывчато для разработки. – skaffman
Спасибо за ответ! Какие детали я должен предоставить, чтобы получить более подробные ответы? Я был googling для сообщения jms send message надежно, и это не дало значимых результатов. Не могли бы вы дать некоторые подсказки о том, как добиться надежной отправки (от производителя к месту назначения)? Благодаря! –
Какой менеджер очереди вы используете? Какая абстракция менеджера транзакций (например, jee, spring)? Являются ли мобильность и независимость от внедрения сильными требованиями? – andcoz