Я использую 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. Заранее спасибо.
что-то меня беспокоит о том, что отправитель AUTO_ACKNOWLEDGE, не сделал HornetQ, но я, похоже, помню, что у меня проблемы с ActiveMQ ... также вижу, что вы используете XA, возможно ли, что сообщение было написано, но транзакция не завершена и, следовательно, не может получить сообщение, переданное в MDB? В противном случае все выглядит правильно. –
@ScottSosna .. Спасибо за ответ. Я попытался удалить AUTO_ACKNOWLEDGE, но MDB не собирает. Я использовал ту же конфигурацию и создал 2 отдельных приложения, запущенных на Jboss, и все работает. – code1234
Я действительно думал о отправителе, а не о потребителе, но я не уверен. –