2016-11-30 6 views
1

Я успешно настроен сервер Wildfly с ActiveMQ как потокWildfly 10 с JMS (ActiveMQ)

<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0"> 
     <server name="default"> 
      <security enabled="false"/> 
      <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/> 
      <http-acceptor name="http-acceptor" http-listener="default"/> 
      <jms-queue name="UpdateQueue" entries="java:/jms/UpdateQueue java:jboss/exported/jms/UpdateQueue"/> 
      <connection-factory name="ConnectionFactory" entries="java:jboss/exported/jms/ConnectionFactory" connectors="http-connector"/> 
     </server> 
    </subsystem> 

Сообщения отправки/успешно получить из очереди, используя по умолчанию реализацию нативные javax.jms.

Я использую следующую конфигурацию для доступа к очереди JMS для отправки/получения.

String EX_JNDI_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory"; 
    String SERVER_URL = "http-remoting://127.0.0.1:8080"; 
    String JMS_FACTORY = "jms/ConnectionFactory"; 
    String QUEUE_NAME = "jms/UpdateQueue"; 

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

+0

'Hello Karim. Можете ли вы поделиться своими кодами + configs для создания MDB в wildfly? Я новичок в JBoss/wildfly, и мне очень тяжело пытаться запустить пример. Это то, что у меня было до сих пор: https://gist.github.com/twimnox/0efea3bbfea53e6f8a49a2b82ed00537 Заранее спасибо! – Twimnox

ответ

0

I класс получает несколько раз, не закрывая приемник, сеанс и соединение. Я добавил следующий код после qreceiver.receive (0), и все работает нормально.

try{ 
     if (qreceiver != null){ 
      qreceiver.close(); 
      qreceiver = null; 
     } 

     qsession.close(); 
     qcon.close(); 
    }catch (JMSException e) { 
     e.printStackTrace(); 
    } 
+1

Еще одна важная вещь, которую следует помнить при работе с JMS API в контейнере Java EE, состоит в том, что контейнер управляет множеством деталей реализации для вас. Обязательно загрузите копию [Контракт и требования к основным требованиям EJB] [http://download.oracle.com/otndocs/jcp/ejb-3_2-fr-spec/index.html] [JSR 345: Enterprise JavaBeansTM, Версии 3.2 )) и прочитать §16.3.5 «Требования к API JMS». Существует много вызовов API JMS, которые вы не должны делать в контейнере Java EE, и это пугает многих людей. –