Я работаю над многопоточным JMS-приемником и кодом издателя. XML-сообщение получено из очереди, вызывается хранимые процедуры (выполняется 70 секунд для выполнения) и ответ отправляется в тему в течение 90 секунд. Мне нужно обработать условие, когда брокер не работает. т. Е. Условие, в котором сообщения принимаются из очереди и обрабатываются в java, в то же время обе очереди и тема будут недоступны. Затем, как обрабатывать те сообщения, которые не находятся в очереди, а не отправлять в тему, но находятся в java-памяти? Возможны различные варианты:Многопоточное приложение JMS
1.Чтобы использовать CLIENT_ACKNOWLEDGE 2.Выберите отдельный код издателя из кода получателя. 3.To есть утилита ошибка, которая будет принимать сообщения из журнала и обработать их и отправить в тему (не менее предпочтительно)
Пожалуйста, предложите мне правильный вариант
Я считаю, что если сеанс был транслирован, режим подтверждения (например, CLIENT_ACKNOWLEDGE) игнорируется :) –
Да, я думаю с моей шляпой WMQ. Обычно мы устанавливаем CLIENT_ACKNOWLEDGE в управляемом объекте, потому что он должен быть установлен на * something *, и это указывает на то, что кто-либо читает его, что код должен явно передать. Однако с точки зрения JMS это ничего не делает. Я отредактировал это из моего ответа. +1 за хороший улов. –
Спасибо большое! если вместо connection.createSession (false, javax.jms.Session.CLIENT_ACKNOWLEDGE), я буду использовать connection.createSession (true, javax.jms.Session.CLIENT_ACKNOWLEDGE); то сеанс транслируется, а режим подтверждения игнорируется. После отправки ответа на тему я передам() сеанс. Мой вопрос заключается в том, что если сеанс откатывается в случае какого-либо исключения (например, брокера вниз и ответ не может быть отправлен в тему), тогда это сообщение все еще существует в очереди. Если брокер возвращается через 10 минут, то это сообщение все еще находится в очереди? – Jyoti