【问题标题】:ActiveMQ Not Receiving messages from ProducerActiveMQ 没有收到来自生产者的消息
【发布时间】:2015-06-19 22:07:12
【问题描述】:

我有一个 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

【问题讨论】:

    标签: java jms activemq


    【解决方案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()

    【讨论】:

    • 是的,它现在正在工作,感谢您的观察,将接受答案+1
    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 2019-07-30
    • 2017-07-05
    • 2018-08-22
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    相关资源
    最近更新 更多