Message Driven Bean: удаляет каждое сообщение после успешного потребления - PullRequest
0 голосов
/ 04 сентября 2018

Я не могу сделать приложение MDB для удаления из очереди каждого сообщения после успешного использования .

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

В результате информация об очереди (DEQ_TIME, DEQ_UID и т. Д.) В таблице очередей устанавливается для всех потребляемых сообщений только тогда, когда я закрываю приложение MDB. Все удаленные сообщения получают один и тот же DEQ_TIME, даже если они были использованы в разное время.

Кроме того, если выдается какое-то исключение во время выполнения, все незафиксированные, но обработанные сообщения повторно отправляются и обрабатываются повторно.

Конфигурация Weblogic 12c: XAQueueConnectionFactory для фабрики соединений.

Моя конфигурация MDB: (по умолчанию используются управляемые контейнером транзакции):

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "connectionFactoryLookup",
            propertyValue = "jms/my-service-qcf"),
    @ActivationConfigProperty(propertyName = "destinationLookup",
            propertyValue = "jms/MyQueue"),
    @ActivationConfigProperty(propertyName = "destinationType",
            propertyValue = "javax.jms.Queue"),
})
public class ReceiveController implements MessageListener, TransportListener {

@Override
public void onMessage(Message message)
{
    if (message instanceof TextMessage) {
        log.info("---------- Got text message ----------");
        sendEmail((TextMessage)message);
    } else {
        log.severe("Invalid message type (TextMessage expected)");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...