2013-02-18 3 views
1

Что касается следующей конфигурации для OracleAQ веснойJMS: слушатель для OracleAQ

<jms:listener-container connection-factory="connectionFactory" 
    client-id="LUKAS34" 
    message-converter="messageConverter" 
    container-class="org.springframework.data.jdbc.jms.listener.oracle.AdtMessageListenerContainer" 
    destination-type="topic"> 
    <jms:listener destination="AQ_TS_MY_TEST" 
     ref="messageDelegate" method="handleMessage" subscription="LUKAS34" /> 
</jms:listener-container> 

Проблема здесь состоит в том, что, несмотря на то, что мы не имеем подписки LUKAS34 (но у нас есть другие - Lukas) выше конфигурации причин что все сообщения из AQ_TS_MY_TEST читаются.

Я ожидаю, что если я определю subscription="LUKAS", все сообщения для этой подписки будут прочитаны, и в противном случае никто не будет прочитан.

В чем проблема с вышеуказанной конфигурацией?

Кроме того, я вижу, что это в таблице:

select * 
from ALL_QUEUE_SUBSCRIBERS; 

это много записей, как «TSUB_1_ *», который, как мне кажется, что весна конфигурации «создает» новые потребители и имя 'Лукаса в конфигурации пропускается.

Хорошо ... Я изменил (это не решение, но оно показывает, где проблема ...) некоторый весенний класс. Давайте посмотрим на закрытый метод ... org.springframework.jms.listener.DefaultMessageLis tenerContainer # initResourcesIfNecessary

private void initResourcesIfNecessary() throws JMSException { 
     if (getCacheLevel() <= CACHE_CONNECTION) { 
      updateRecoveryMarker(); 
     } 
     else { 
      if (this.session == null && getCacheLevel() >= CACHE_SESSION) { 
       updateRecoveryMarker(); 
       this.session = createSession(getSharedConnection()); 
      } 
      if (this.consumer == null && getCacheLevel() >= CACHE_CONSUMER) { 
       this.consumer = createListenerConsumer(this.session); 
       synchronized (lifecycleMonitor) { 
        registeredWithDestination++; 
       } 
      } 
     } 
    } 

, если я изменю здесь (в этом методе потребителя название от генерируется случайным образом (как я полагаю, генерируется случайным образом с помощью пружины) к моему фиксированному имени «LUKAS» все работает так, как я ожидал, - мой слушатель читает только те сообщения, которые определены в PL/SQL стороне для потребителя «LUKAS».

Итак, вопрос в том, могу ли я как-то настроить весной jms: имя пользователя для прослушивателя?

ответ

1

Попробуйте изменить

destination-type="topic" 

к:

destination-type="durableTopic" 

И видя, если это работает.

Смежные вопросы