我正在寻找一种浏览/检查特定队列中插入的最后一条消息的最佳方法。
到目前为止,我在想ActiveMQQueueBrowser
。请参阅以下代码:
ActiveMQQueueBrowser browser = (ActiveMQQueueBrowser) session.createBrowser(queue);
Enumeration e = browser.getEnumeration();
TextMessage message = null;
while (e.hasMoreElements()) {
message = (TextMessage) e.nextElement();
}
但是这段代码需要遍历队列中的所有消息,直到它给出最后一条消息。
plz建议是否有其他方法可以这样做。
答案 0 :(得分:0)
可能是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.MessageDelivered.Queue传递给的消息 代理。
ActiveMQ.Advisory.MessageDelivered.Topic消息传递给 代理。