【问题标题】:Value of "size" from StatisticsPlugin always 0StatisticsPlugin 中“大小”的值始终为 0
【发布时间】:2020-03-17 00:20:43
【问题描述】:

我正在使用 ActiveMQ 5.15.11,我正在尝试使用 StatisticsPlugin 插件以编程方式获取待处理消息的数量。

下面是用于创建和发送消息到ActiveMQ.Statistics.Broker的代码:

public void produceMessage(String queueName, String message, boolean replyToTempQueue) throws JMSException {

    // Create a connection factory.
    final ActiveMQConnectionFactory connectionFactory =
        new ActiveMQConnectionFactory(System.getenv("WIRE_LEVEL_ENDPOINT"));

    // Pass the username and password.
    connectionFactory.setUserName(System.getenv("ACTIVE_MQ_USERNAME"));
    connectionFactory.setPassword(System.getenv("ACTIVE_MQ_PASSWORD"));

    // Create a pooled connection factory.
    final PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory();
    pooledConnectionFactory.setConnectionFactory(connectionFactory);
    pooledConnectionFactory.setMaxConnections(10);

    // Establish a connection for the producer.
    final Connection producerConnection = pooledConnectionFactory.createConnection();
    producerConnection.start();

    // Create a session.
    final Session producerSession = producerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    // Create a queue named "MyQueue".
    final ActiveMQQueue producerDestination = (ActiveMQQueue) producerSession.createQueue(queueName);

    // Create a producer from the session to the queue.
    final MessageProducer producer = producerSession.createProducer(producerDestination);
    producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

    // Create a message.
    Message producerMessage = null;

    // Add a reply to queue if one has been provided.
    if (replyToTempQueue) {
      producerMessage = producerSession.createMapMessage();
      producerMessage.setJMSReplyTo(producerSession.createTemporaryQueue());
    } else {
      producerMessage = producerSession.createTextMessage(message);
    }

    // Send the message.
    producer.send(producerMessage);
    System.out.println("Message sent.");
    producer.close();
    producerSession.close();
    producerConnection.close();
  }

但是,它总是显示大小为 0。这是为什么呢?

ActiveMQMapMessage {commandId = 6, responseRequired = false, messageId = ID:DESKTOP-CQNTDSL-64043-1583929718154-177:1:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:DESKTOP-CQNTDSL-64043-1583929718154-177:1:1:1, destination = queue://ActiveMQ.Statistics.Broker, transactionId = null, expiration = 0, timestamp = 1583946785436, arrival = 0, brokerInTime = 1583946785552, brokerOutTime = 1583946785811, correlationId = null, replyTo = temp-queue://ID:DESKTOP-CQNTDSL-64043-1583929718154-177:1:1, persistent = false, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {} }

【问题讨论】:

  • 刚刚添加
  • 在这种情况下,是什么让您认为消息的内部大小值不会为零?
  • @JustinBertram queueName 是 ActiveMQ.Statistics.Broker,消息是一个字符串,由电子邮件的发件人、发件人、主题和正文组成。这是通过请求映射完成的
  • @TimBish 我一直在使用ActiveMQ消息代理查看队列长度
  • @JustinBertram ApacheMQ 5,我认为这是最新的

标签: jms activemq


【解决方案1】:

您正在查看的size 并不表示代理中待处理消息的数量。您需要检查enqueueCount 值而不是size。根据the docs查询ActiveMQ.Statistics.Broker时返回这个值。

您还可以通过查询ActiveMQ.Statistics.Destination 来获取特定目的地的数据。来自the docs

...要查询目的地的统计信息,只需向带有ActiveMQ.Statistics.Destination 前缀的目的地名称发送消息。例如,要检索名称为 TEST.FOO 的队列的统计信息,请向名称为 ActiveMQ.Statistics.Destination.TEST.FOO 的队列发送一条空消息...

【讨论】:

  • 如何查看 enqueueCount?而且我已经发送了一条带有该值的消息
  • 您一直在发送带有 what 值的消息?你在说ActiveMQ.Statistics.Destination吗?在上面的评论中,您说您将消息发送到ActiveMQ.Statistics.Broker
  • 您查看enqueueCount 的方式与查看size 的方式相同——通过返回的MapMessage
  • 哦,我明白你的意思了,我已经尝试了很多不同的值,包括 ActiveMQ.Statistics.Destination."QueueName"。它似乎没有返回 enqueueCount 值
  • 你能提供它实际返回的内容吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多