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

可以在远程代理上获取队列列表吗?

唐兴思
2023-03-14

我正在尝试找出如何获取远程代理上现有队列的列表。

看起来我可以通过添加一条建议消息(我还没有实现)来监听队列的创建/销毁,但是我需要在启动时获取所有现有的队列。

看起来我可以用getDestinationMap做到这一点:

http://activemq.apache.org/maven/apidocs/org/apache/activemq/broker/region/Region.html#getDestinationMap()

但这似乎只能从嵌入式和进程内代理调用。

我的意思是。。。我愿意走这条路,但似乎更有意义的是,只为activemq设置正常的初始化/守护程序,然后让一个远程进程像普通的JMS使用者一样连接到它。

本文档似乎暗示这是可能的:

http://ActiveMQ . Apache . org/how-can-I-see-what-destinations-used . html

但是这是通过使用一个区域对象来实现的,而且只有当您和activemq在同一个JVM中时,这才是可能的。

共有2个答案

江温书
2023-03-14

看到这个答案:https://stackoverflow.com/a/14021722/3735747

如果您在Java中执行此操作,有DestinationSource类可以提供帮助:http://activemq.apache.org/maven/5.7.0/activemq-core/apidocs/org/apache/activemq/advisory/DestinationSource.html

创建连接并使用活动 MQ 连接类型,而不是 JMS 连接类型。

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

// Create a Connection
ActiveMQConnection connection = (ActiveMQConnection) connectionFactory.createConnection();

连接后,可以创建DestinationSource对象并获取队列:

DestinationSource ds = connection.getDestinationSource();
Set<ActiveMQQueue> queues = ds.getQueues();

for(ActiveMQQueue queue : queues){
    try {
        System.out.println(queue.getQueueName());
    } catch (JMSException e) {
        e.printStackTrace();
    }
}
常小白
2023-03-14
    // Create a ConnectionFactory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");

// Create a Connection
ActiveMQConnection connection = (ActiveMQConnection) connectionFactory.createConnection();


//Important point that was missed in the above answer
connection.start();

DestinationSource ds = connection.getDestinationSource();
Set<ActiveMQQueue> queues = ds.getQueues();

for(ActiveMQQueue queue : queues){
    try {
        System.out.println(queue.getQueueName());
    } catch (JMSException e) {
        e.printStackTrace();
    }
}
 类似资料:
  • 如何在Anylogic中获取块队列中的代理列表?在我的模型中,目前位于队列中的每个代理A都是包含一些代理B的容器。我必须计算代理B。为此,我尝试获取队列中代理A的列表: 但是队列。contents()返回一个空列表。你能帮我吗?谢谢。

  • 我在WildFly 18服务器上部署了EJB。我想将消息发送到部署在远程WildFly 18服务器上的队列(通过ActiveMQ Artemis)。使用注入和JCA以及是否可能实现这一点? 连接工厂和队列在远程Wildfly中配置如下: 在远程服务器上,队列配置如下: 更新 下面是我的EJB试图向远程Artermis(远程wildfly内部)发送消息: 当我试图部署包含此EJB的war时,我得到一

  • 说明 获取当前所有排队号码列表 请求地址 http://api.dc78.cn/Api/wwlist 请求方式 GET 请求参数 URL参数 描述 无 POST参数 描述 无 返回 { "status": 1, "name": "凤凰广场店", "list": [ { "id": "8", "time": "2014-11-26 11:42:12", "type": "C", "num": "C0

  • 请求参数说明 参数 描述 必填 示例值 类型 最大长度 action 接口参数组 是 object └action 需要调用的接口名称 是 wwlist string 请求示例 { "action": { "action": "wwlist" } } 响应参数说明 参数 描述 必填 示例值 类型 最大长度 status 返回状态。接口成功时为1,出错为0 是 1 number name 门

  • 我试图创建java可以访问EMS队列检查挂起消息的类,但在下面是我的简单代码 “我尝试做什么”方法可以给他队列名称它是“给我挂起的消息” 错误:运行:线程“main”java中出现异常。lang.NoClassDefFoundError:com/tibco/tibjms/TibjmsQueueConnectionFactory位于com。tibco公司。tibjms。管理MessengerUtil

  • 对于一个幼稚的开发人员来说,他们似乎可以发布到集群中的任何节点,并从这些节点消费,这会给他们一种高可用性的错误感觉。 如果承载队列的节点死亡,使用者将不再能够从另一个节点到达队列。 是否有一种方法可以禁用这种行为,这样就可以很明显地看到,您要么必须有一个镜像队列,要么需要在每台服务器上创建一个不同的队列,从这两个服务器中使用,然后处理重复的队列。 谢谢