【问题标题】:1000s of Management Queues in Artemis Web ConsoleArtemis Web 控制台中的 1000 个管理队列
【发布时间】:2021-07-20 00:57:35
【问题描述】:

我正在使用 ActiveMQ Artemis 2.17.0 的管理 API 来使用以下代码获取 1 个队列的计数;

    val message = session!!.createMessage(false)
    ManagementHelper.putAttribute(message, "queue.$queueName", "messageCount")
    val requestor = ClientRequestor(session, "activemq.management")
    val reply = requestor.request(message)
    val count = (ManagementHelper.getResult(reply) as Long).toInt()

但是,此代码每 30 秒运行一次,因此大约一个小时后,它会导致创建 1000 个新的临时队列,这反过来又污染并减慢了管理控制台。无论如何要删除这些队列(或者在检索消息计数时最好不要创建它们)? (注意:服务重启后队列会被移除)

【问题讨论】:

  • @JustinBertram - 2.17.0,你的建议奏效了。谢谢..

标签: activemq-artemis


【解决方案1】:

我认为您需要在requestor 上调用close(),以便删除用于实现请求-回复模式的底层临时队列。

我在 ActiveMQ Artemis 测试套件中创建了一个测试,我让它失败的唯一方法是requestor 上调用close()

package org.apache.activemq.artemis.tests.integration;

import org.apache.activemq.artemis.api.core.*;
import org.apache.activemq.artemis.api.core.client.*;
import org.apache.activemq.artemis.api.core.management.ManagementHelper;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
import org.junit.Before;
import org.junit.Test;

public class SimpleTest extends ActiveMQTestBase {

   protected ActiveMQServer server;
   protected ClientSession session;
   protected ClientSessionFactory sf;
   protected ServerLocator locator;

   @Override
   @Before
   public void setUp() throws Exception {
      super.setUp();
      server = createServer(false, createDefaultInVMConfig());
      server.start();
   }

   @Test
   public void simpleTest() throws Exception {
      locator = ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(INVM_CONNECTOR_FACTORY));
      sf = locator.createSessionFactory();
      session = sf.createSession(false, true, true);
      session.start();
      server.createQueue(new QueueConfiguration("myQueue"));

      long start = server.getPostOffice().getAllBindings().count();
      for (int i = 0; i < 100; i++) {
         ClientMessage message = session.createMessage(false);
         ManagementHelper.putAttribute(message, "queue.myQueue", "messageCount");
         ClientRequestor requestor = new ClientRequestor(session, "activemq.management");
         requestor.request(message);
         requestor.close(); // if I remove this line the test fails
      }
      assertEquals(0, server.getPostOffice().getAllBindings().count() - start);
   }
}

【讨论】:

    猜你喜欢
    • 2021-03-12
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2018-07-10
    相关资源
    最近更新 更多