Приложение JMS не может употреблять из Oracle Sharded QueueedJAVA

Программисты JAVA общаются здесь
Anonymous
Приложение JMS не может употреблять из Oracle Sharded Queueed

Сообщение Anonymous »

У нас есть система, которая успешно отправляет сообщения по обычной, без пособия Oracle Advanced Queue (AQ), но когда мы переодеваемся в очередь, приложение Java не может употреблять сообщения. Сообщения размещены из PL/SQL.
Рабочая настройка
Создание очередей

Код: Выделить всё

begin
dbms_aqadm.create_queue_table(
queue_table => 'poc_queue_source.nps_transactions_qt',
queue_payload_type => 'SYS.AQ$_JMS_TEXT_MESSAGE',
multiple_consumers => FALSE
);
dbms_aqadm.create_queue(
queue_name => 'poc_queue_source.nps_transactions_queue',
queue_table => 'poc_queue_source.nps_transactions_qt'
);
dbms_aqadm.start_queue(
queue_name => 'poc_queue_source.nps_transactions_queue'
);
end;
/
публикация в PL/SQL (в триггере):

Код: Выделить всё

declare
row_json            varchar2(4000);
enqueue_options     dbms_aq.enqueue_options_t;
message_properties  dbms_aq.message_properties_t;
message_handle      RAW(16);
message             SYS.AQ$_JMS_TEXT_MESSAGE := SYS.AQ$_JMS_TEXT_MESSAGE.construct;
begin
row_json := json_object(
'transactionId'  value  :NEW.transactionid,
'srcaccountid'  value  :NEW.srcaccountid,
'dstaccountid'  value  :NEW.dstaccountid
-- More stuff here
null on null
);
message.set_text(row_json);
dbms_aq.enqueue(
queue_name => 'poc_queue_source.nps_transactions_queue',
enqueue_options => enqueue_options,
message_properties => message_properties,
payload => message,
msgid => message_handle
);
end;
< /code>
Приемная часть представляет собой приложение Spring Boot с использованием Spring JMS. Последняя часть в классе JMSConfiguration: < /p>
@Bean
public DefaultMessageListenerContainer jmsListenerContainer(
DefaultJmsListenerContainerFactory jmsListenerContainerFactory,
JmsMessageListenerImpl messageListener,
@Value("${application.jms.listener.queue-name}") String queueName,
@Value("${application.jms.listener.idle-receives-per-task-limit}") Integer idleReceivesLimit
) {
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setMessageListener(messageListener);
endpoint.setDestination(queueName);

DefaultMessageListenerContainer container = jmsListenerContainerFactory.createListenerContainer(endpoint);
// Setting idleReceivesPerTaskLimit makes the Listener scale down concurrency when the queue is idle.
container.setIdleReceivesPerTaskLimit(idleReceivesLimit);
return container;
}
Здесь jmsmessagelistenerimpl - наш собственный компонент, который реализует интерфейс JMS Messagelistener.

Код: Выделить всё

com.oracle.database.messaging
aqapi-jakarta
23.2.1.0

< /code>
Эта настройка работает. База данных публикует сообщения в очередь, и MessageListener получает их. Очередная очередь, она больше не получает их.begin
dbms_aqadm.create_sharded_queue(
queue_name => 'poc_queue_source.nps_transactions_shdqueue',
multiple_consumers => FALSE,
queue_payload_type => DBMS_AQADM.JMS_TYPE
);
dbms_aqadm.start_queue(
queue_name => 'poc_queue_source.nps_transactions_shdqueue'
);
end;
/
pl/sql точно то же самое, за исключением того, что имя очереди изменяется:

Код: Выделить всё

declare
row_json            varchar2(4000);
enqueue_options     dbms_aq.enqueue_options_t;
message_properties  dbms_aq.message_properties_t;
message_handle      RAW(16);
message             SYS.AQ$_JMS_TEXT_MESSAGE := SYS.AQ$_JMS_TEXT_MESSAGE.construct;
begin
row_json := json_object(
'transactionId'  value  :NEW.transactionid,
'srcaccountid'  value  :NEW.srcaccountid,
'dstaccountid'  value  :NEW.dstaccountid
-- More stuff here
null on null
);
message.set_text(row_json);
dbms_aq.enqueue(
queue_name => 'poc_queue_source.nps_transactions_queue_shdqueue',
enqueue_options => enqueue_options,
message_properties => message_properties,
payload => message,
msgid => message_handle
);
end;
< /code>
и в приложении JMS обновляется имя очереди назначения. MessageConsumer.receive 
вызов в org.springframework.jms.support.destination.jmsdestinationaccessor#ceatefromconsumer нет сообщений. < /p>
Что -то не так с моей конфигурацией и настройкой? Я вижу структуру таблицы очередей между неограниченными и осколками, отличаются.

Подробнее здесь: https://stackoverflow.com/questions/793 ... rded-queue

Вернуться в «JAVA»