Что касается следующей конфигурации для 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: имя пользователя для прослушивателя?