繁体   English   中英

ActiveMQ不接收来自生产者的消息

[英]ActiveMQ Not Receiving messages from Producer

我有一个JMS生产者和一个消费者,代理是ActiveMQ,请参见下面的代码:

发件人代码

package activemq;

import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class PlatformNotifier {

public static void main(String[] args) throws Exception{

    ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://localhost:61616");

    QueueConnection connection=(QueueConnection)connectionFactory.createConnection();
    connection.start();

    Session session=connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

    Queue queue=session.createQueue("QUEUE.NOTIFICATION");

    MessageProducer producer=session.createProducer(queue);

    String message="from producer";
    TextMessage textMessage=session.createTextMessage(message);

    producer.send(textMessage);

    session.close();
    connection.stop();
    connection.close();

}//main closing

}//class closing

接收方代码

package activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;

public class ServiceNotifier {

public static void main(String[] args) throws Exception{

    System.out.println("Service Notifier");

    ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://localhost:61616");

    Connection connection=connectionFactory.createConnection();
    connection.start();

    Session session=connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

    Destination queue=session.createQueue("QUEUE.NOTIFICATION");

    MessageConsumer consumer=session.createConsumer(queue);

    Message message=consumer.receive(60*1000);

    System.out.println("Message = "+message);

    session.close();
    connection.stop();
    connection.close();

}//main closing

}//class closing

问题是ActiveMQ队列没有收到来自发件人的消息(请参阅屏幕截图):

在此处输入图片说明

当我从Web控制台发送消息时,该消息在队列中被接收,但是从生产者那里没有消息落在该队列上。

另一个有趣的行为是(从队列接收器代码中看到,接收器在收到第一条消息后退出),再次是当我启动接收器时,它接收到相同的消息并一直执行直到我关闭服务器并重新启动。

我正在Windows 8.1上运行,这是我第一次遇到此问题。 我将不胜感激。

ActiveMQ-> 5.11.1

Session session=connection.createSession(true, Session.AUTO_ACKNOWLEDGE); 即使您使用了AUTO_ACK模式,这也会创建一个事务处理会话。 因此,您正在创建事务处理会话,但不处理JMS事务。 发送/接收消息后,请使用session.commit()

在打开的JMS事务上调用session.close()回滚该JMS事务。 http://docs.oracle.com/javaee/7/api/javax/jms/Session.html#close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM