当前位置: 首页 > 知识库问答 >
问题:

ActiveMQ未从生产者接收消息

赫连泰宁
2023-03-14

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

共有1个答案

公羊涛
2023-03-14

会话会话=连接.创建会话(真,Session.AUTO_ACKNOWLEDGE);这将创建事务处理会话,即使您已使用AUTO_ACK模式也是如此。因此,您正在创建事务处理会话,但不处理 JMS 事务。在发送/接收消息后使用会话.commit()

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

 类似资料:
  • 我很感激你在这方面的帮助。 我正在构建一个ApacheKafka消费者,以订阅另一个已经运行的Kafka。现在,我的问题是,当我的制作人将消息推送到服务器时。。。我的消费者没有收到。。我在打印的日志中得到以下信息: 我不确定我是否遗漏了任何重要的配置。。。但是,我可以使用WireShark看到一些来自我的服务器的消息,但是我的消费者没有消费这些消息。。。。 我的代码是示例消费者示例的精确副本:ht

  • 我们面临着ActiveMQ及其消费者的随机问题。我们观察到,很少有消费者不接收消息,即使他们连接到ActiveMQ队列。但在消费者重启后,它工作正常。 我们在ActiveMQ端有一个名为testQueue的队列。消费者正试图将消息从该队列中解列。为此,我们正在使用Spring的DefaultMessageListenerContainer。消息正在从ActiveMQ代理传递到使用者节点。从tcpd

  • 我的代码中有一个Spring JmsListener。它接收和消费消息2天,但突然在这2天后,它没有收到来自外部Activemq的消息。然而,它的队列中有一些挂起的消息。当我重置Activemq和消费者时,消费者会收到大量消息。当消息挂起时,连接到Activemq的消费者(代表Spring致动器日志)。日志和配置显示Activemq没有将消息推送给消费者。我有另一个像这个消费者一样的服务从其他队列

  • 我有一个使用ActiveMQ的消息队列。web请求用persistency=true将消息放入队列。现在,我有两个消费者,它们都作为单独的会话连接到这个队列。使用者1总是确认消息,但使用者2从不这样做。 JMS队列实现负载平衡器语义。一条消息将被一个使用者接收。如果在发送消息时没有可用的使用者,它将被保留,直到有可以处理消息的使用者可用为止。如果使用者接收到一条消息,但在关闭之前没有确认它,那么该

  • 我们有一个制作人 在开发过程中,我重新部署了producer应用程序,并做了一些更改。但在此之后,我的消费者没有收到任何消息。我尝试重新启动消费者,但没有成功。问题可能是什么和/或如何解决? 消费者配置: 生产者配置: 编辑2: 5分钟后,消费者应用程序死亡,但以下情况除外:

  • 我们使用activemq作为Java独立应用程序的消息队列。我的问题是,基于activemq web控制台,队列有一定数量的消息排队和出列。但是,根据我在代码中添加的sysout语句,应用程序消耗的消息数似乎少于activemq web控制台上显示的消息数。例如,在activemq控制台上,没有。排队和出列的消息约为1800条。但是,在控制台上显示的出列消息数(我每接收一条消息就增加一个计数器)只