wildfly 14: javax.jms.JMSException: AMQ119030: большое сообщение не инициализировано на сервере - PullRequest
0 голосов
/ 18 февраля 2019

Я настроил подсистему activemq в wildfly, как показано ниже.

<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
         <server name="default" persistence-enabled="true">
                <cluster password="${jboss.messaging.cluster.password:CHANGE ME!!}"/>
                <journal type="NIO" min-files="2"/>
                <bindings-directory path="/opt/shared/messaging/live/bindings"/>
                <journal-directory path="/opt/shared/messaging/live/journal"/>
                <large-messages-directory path="/opt/shared/messaging/live/largemessages"/>
                <paging-directory path="/opt/messaging/live/paging"/>
                <security-setting name="#">
                    <role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
                </security-setting>
                <address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" redelivery-delay="60000" max-delivery-attempts="5" max-size-bytes="50485760" page-size-bytes="10485760" address-full-policy="PAGE" redistribution-delay="1000"/>
                <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
                <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
                    <param name="batch-delay" value="50"/>
                </http-connector>
                <in-vm-connector name="in-vm" server-id="0">
                    <param name="buffer-pooling" value="false"/>
                </in-vm-connector>
                <http-acceptor name="http-acceptor" http-listener="default"/>
                <http-acceptor name="http-acceptor-throughput" http-listener="default">
                    <param name="batch-delay" value="50"/>
                    <param name="direct-deliver" value="false"/>
                </http-acceptor>
                <in-vm-acceptor name="in-vm" server-id="0">
                    <param name="buffer-pooling" value="false"/>
                </in-vm-acceptor>
                <broadcast-group name="bg-group1" jgroups-cluster="activemq-cluster" connectors="http-connector"/>
                <discovery-group name="dg-group1" jgroups-cluster="activemq-cluster"/>
                <cluster-connection name="my-cluster" address="jms" connector-name="http-connector" discovery-group="dg-group1"/>
                <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
                <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
                <jms-queue name="TestQueue" entries="java:/jms/TestQueue java:jboss/exported/jms/TestQueue"/>
                <connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>
                <connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector" ha="true" block-on-acknowledge="true" reconnect-attempts="-1"/>
                <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>
            </server>
    </subsystem>

Я ищу 'TestQueue', используя java: / ConnectionFactory.Первоначально он работает нормально, но через некоторое время выдает следующее исключение:

1) Предупреждающее сообщение:

AMQ212051: Invalid concurrent session usage. Sessions are not supposed to be used by more than one thread concurrently.: java.lang.Exception: trace
    at org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.startCall(ClientSessionImpl.java:1457)
    at org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.doSend(ClientProducerImpl.java:229)
    at org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.send(ClientProducerImpl.java:129)
    at org.apache.activemq.artemis.jms.client.ActiveMQMessageProducer.doSendx(ActiveMQMessageProducer.java:517)
    at org.apache.activemq.artemis.jms.client.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:201)
    at com.demo.Test.executeQuery(Test.java:296)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

2) Предупреждающее сообщение:

AMQ212054: Destination address=jms.queue.TestQueue is blocked. If the system is configured to block make sure you consume messages on this configuration.

3): настроен общий каталог в подсистеме Messaging-ActiveMQ, но после обработки нескольких записей все еще появляется следующая ошибка.

javax.jms.JMSException: AMQ119030: large-message not initialized on server
    at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQSessionContext.sendSessionSendContinuationMessage(ActiveMQSessionContext.java:924)
    at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQSessionContext.sendLargeMessageChunk(ActiveMQSessionContext.java:502)
    at org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.largeMessageSendStreamed(ClientProducerImpl.java:503)
    at org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.largeMessageSendBuffered(ClientProducerImpl.java:413)
    at org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.largeMessageSend(ClientProducerImpl.java:344)
    at org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.doSend(ClientProducerImpl.java:274)

1 Ответ

0 голосов
/ 18 февраля 2019

На шаге 1 указана большая проблема:

AMQ212051: недопустимое использование одновременного сеанса.Сеансы не должны использоваться более чем одним потоком одновременно.

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

Брокер также блокирует:

AMQ212054: Адрес назначения = jms.queue.SearchRequestsQueue isзаблокирован.Если система настроена на блокировку, убедитесь, что вы используете сообщения в этой конфигурации.

Существует несколько причин, по которым брокер может блокировать отправку сообщений на адрес:

  1. Если <address-full-policy> равно BLOCK и адрес достиг настроенного значения <max-size-bytes>.
  2. Если <address-full-policy> равно BLOCK и <global-max-size> для всех адресов
  3. Если достигнут <max-disk-usage>.

Мне не ясно, что является причиной этой проблемы, поскольку вы настроили PAGE.global-max-size по умолчанию -1 и max-disk-usage по умолчанию 100.Возможно, ваш диск сообщает об использовании на 100%?

...