MDB未使用Jboss 7.1中队列中的消息
我正在使用JBoss7.1,并将发送者配置为将消息发送到Hornet队列。我可以在Jboss管理控制台中看到,一旦发送方发送消息,消息计数就会增加,但MDB没有使用消息。发送方和使用者都在同一个应用程序(同一个java进程/jvm)中运行。下面是jboss Standalone-full.xml中的配置MDB未使用Jboss 7.1中队列中的消息,jboss,jms,hornetq,message-driven-bean,Jboss,Jms,Hornetq,Message Driven Bean,我正在使用JBoss7.1,并将发送者配置为将消息发送到Hornet队列。我可以在Jboss管理控制台中看到,一旦发送方发送消息,消息计数就会增加,但MDB没有使用消息。发送方和使用者都在同一个应用程序(同一个java进程/jvm)中运行。下面是jboss Standalone-full.xml中的配置 <jms-connection-factories> <connection-factory name="InVmConnection
<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>
MDB:
jboss日志中没有错误或异常。我可以看到消息进入队列,但没有被MDB使用。提前感谢。您的发件人应该发送到“/jms/queue/test”而不是“queue/MyQueue”。只有“/jms/queue/test”在外部公开。
假设它在一个单独的JVM中运行。让发送方自动确认让我感到困扰,我还没有完成HornetQ,但我似乎记得在ActiveMQ中有问题……也看到您正在使用XA,消息是否已写入,但事务尚未完成,因此无法将消息传递给MDB?否则事情看起来很正常。@ScottSosna。。谢谢你的回复。我试图删除自动确认,但MDB仍无法启动。我使用了相同的配置,创建了两个独立的应用程序,运行在Jboss上,一切正常。我实际上考虑的是发送者,而不是消费者,但我不确定。
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);
@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...");
}
}