2016-02-10 5 views
0

Я использую jboss 7.1 и настраиваю отправителя для отправки сообщения в очередь Hornet. Я вижу в консоли администратора Jboss, что количество сообщений увеличивается, как только отправитель отправляет сообщение, но MDB не потребляет сообщение. И отправитель, и потребитель работают в одном приложении (тот же java-процесс/jvm). Ниже приведена конфигурация в jboss Standalone-full.xml.MDB не потребляет сообщение из очереди в Jboss 7.1

<jms-connection-factories> 
        <connection-factory name="InVmConnectionFactory"> 
         <connectors> 
          <connector-ref connector-name="in-vm"/> 
         </connectors> 
         <entries> 
          <entry name="java:/ConnectionFactory"/> 
         </entries> 
        </connection-factory> 
        <connection-factory name="RemoteConnectionFactory"> 
         <connectors> 
          <connector-ref connector-name="netty"/> 
         </connectors> 
         <entries> 
          <entry name="RemoteConnectionFactory"/> 
          <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> 
         </entries> 
        </connection-factory> 
        <pooled-connection-factory name="hornetq-ra"> 
         <transaction mode="xa"/> 
         <connectors> 
          <connector-ref connector-name="in-vm"/> 
         </connectors> 
         <entries> 
          <entry name="java:/JmsXA"/> 
         </entries> 
        </pooled-connection-factory> 
       </jms-connection-factories> 

       <jms-destinations> 
        <jms-queue name="testQueue"> 
         <entry name="queue/MyQueue"/> 
         <entry name="java:jboss/exported/jms/queue/test"/> 
        </jms-queue> 
       </jms-destinations> 

отправитель сообщения:

Context context = new InitialContext(); 
QueueConnectionFactory factory = (QueueConnectionFactory)context.lookup("ConnectionFactory"); 
QueueConnection connection = factory.createQueueConnection(); 
QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); 
Queue queue = (Queue)context.lookup("queue/MyQueue"); 
QueueSender sender = session.createSender(queue); 

//1. Sending TextMessage to the Queue 
TextMessage message = session.createTextMessage(); 
message.setText("Hello EJB3 MDB Queue!!!"); 
sender.send(message); 

MDB:

@MessageDriven(name="MessageDistributor", activationConfig = { 
     @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
     @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/MyQueue"), 
     @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")}) 
public class MessageReceiver implements MessageListener { 
public void onMessage(Message message) { 
     System.out.println("Message received from Queue..."); 
    } 
} 

Там нет ошибки или исключения в JBoss журналах. Я вижу, что сообщение идет в очередь, но не потребляется MDB. Заранее спасибо.

+0

что-то меня беспокоит о том, что отправитель AUTO_ACKNOWLEDGE, не сделал HornetQ, но я, похоже, помню, что у меня проблемы с ActiveMQ ... также вижу, что вы используете XA, возможно ли, что сообщение было написано, но транзакция не завершена и, следовательно, не может получить сообщение, переданное в MDB? В противном случае все выглядит правильно. –

+0

@ScottSosna .. Спасибо за ответ. Я попытался удалить AUTO_ACKNOWLEDGE, но MDB не собирает. Я использовал ту же конфигурацию и создал 2 отдельных приложения, запущенных на Jboss, и все работает. – code1234

+0

Я действительно думал о отправителе, а не о потребителе, но я не уверен. –

ответ

0

Ваш отправитель должен отправлять в «/ jms/queue/test» не «queue/MyQueue». Только «/ jms/queue/test» отображается снаружи. Предположим, что он работает в отдельной JVM.

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

  • Нет связанных вопросов^_^