在ActiveMQ中获取最后插入的消息- Java

klr1opcd  于 2023-04-28  发布在  Java
关注(0)|答案(2)|浏览(104)

我正在寻找一种最佳的方式来浏览/检查插入特定队列的最后一条消息。目前,我正在考虑ActiveMQQueueBrowser。代码如下:

ActiveMQQueueBrowser browser = (ActiveMQQueueBrowser) session.createBrowser(queue);
Enumeration e = browser.getEnumeration();
TextMessage message = null;
while (e.hasMoreElements()) {
    message = (TextMessage) e.nextElement();
}

但是这段代码需要遍历队列中的所有消息,直到给出最后一条消息。
请建议是否有任何其他方法这样做。

nlejzf6q

nlejzf6q1#

JMX是否可行??请参阅下面的示例,您可以在将消息加载到列表中后按需对消息进行排序。

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

import org.apache.activemq.broker.jmx.BrokerViewMBean;
import org.apache.activemq.broker.jmx.QueueViewMBean;

public class JMXGetDestinationInfos {

    public static void main(String[] args) throws Exception {
        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://host:1099/jmxrmi");
        Map<String, String[]> env = new HashMap<>();
        String[] creds = { "admin", "admin" };
        env.put(JMXConnector.CREDENTIALS, creds);
        JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
        MBeanServerConnection conn = jmxc.getMBeanServerConnection();

        ObjectName activeMq = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost");

        BrokerViewMBean mbean = MBeanServerInvocationHandler.newProxyInstance(conn, activeMq, BrokerViewMBean.class,
                true);
        for (ObjectName name : mbean.getQueues()) {
            if (("TEST".equals(name.getKeyProperty("destinationName")))) {
                QueueViewMBean queueMbean = MBeanServerInvocationHandler.newProxyInstance(conn, name,
                        QueueViewMBean.class, true);
                List<?> messages = queueMbean.browseMessages();
                System.out.println(messages.get(messages.size() -1));

                System.out.println(queueMbean.browseAsTable());
                System.out.println(queueMbean.browseMessages());
            }
        }
    }
}

如果您的计数器始终可用且已连接,则另一种选择是使用http://activemq.apache.org/advisory-message.html
ActiveMQ.Advisory.消息已送达。队列传递给代理的消息。
ActiveMQ.Advisory.消息已送达。传递给代理的消息。

zlwx9yxi

zlwx9yxi2#

如果不使用浏览器(或类似浏览器的东西)遍历所有其他消息,就无法获取队列中的最后一条消息。
请记住,队列不像数据库表。你不能只挑出你想要的信息。

相关问题