Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何找到horneq队列长度_Java_Jms_Message Queue_Hornetq - Fatal编程技术网

Java 如何找到horneq队列长度

Java 如何找到horneq队列长度,java,jms,message-queue,hornetq,Java,Jms,Message Queue,Hornetq,我使用的是Hornetq 2.0,我不明白我怎么知道现在队列中有多少条消息 这是一个非常有用的特性,所以我可以在运行时知道我的消费者是否足够快地消费消息 我使用的不是JMS api,而是高度优化的核心api 获取队列中消息数量的正确(最快)方法是什么 我找到了两种方法,但不知道什么是正确的方法 public int size(){ ClientSession session; try { session = sf.createSession(false, f

我使用的是Hornetq 2.0,我不明白我怎么知道现在队列中有多少条消息

这是一个非常有用的特性,所以我可以在运行时知道我的消费者是否足够快地消费消息

我使用的不是JMS api,而是高度优化的核心api

获取队列中消息数量的正确(最快)方法是什么

我找到了两种方法,但不知道什么是正确的方法

public int size(){

    ClientSession session;

    try {

        session = sf.createSession(false, false, false);

        ClientRequestor requestor = new ClientRequestor(session, "hornetq.management");

        ClientMessage m = session.createMessage(false);

        ManagementHelper.putAttribute(m, "core.queue." + queueName, "messageCount");

        ClientMessage reply = requestor.request(m);

        int count = (Integer) ManagementHelper.getResult(reply);

        return count;

    } catch (Exception e) {

        e.printStackTrace();

    }

    return 0;

}


您必须使用管理界面,本文档末尾是一个检索邮件计数的示例:

我找到了这两种方法

public synchronized int size(){
    ClientSession session;
    try {
        session = sf.createSession(false, false, false);
        ClientRequestor requestor = new ClientRequestor(session, "hornetq.management");
        ClientMessage m = session.createMessage(false);
        ManagementHelper.putAttribute(m, "core.queue." + queueName, "messageCount");
        ClientMessage reply = requestor.request(m);
        int count = (Integer) ManagementHelper.getResult(reply);
        return count;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 0;
}


hornetq-2.2.14.最终发布,并提供消息计数器示例。它位于hornetq-2.2.14。Final/examples/jms/message counters

脱离上下文,但很有用, 如果您使用的是jboss,那么可以使用下面的cli命令获取队列消息计数。 /子系统=消息传递/hornetq服务器=默认/jms队列=:读取属性(名称=消息计数)

public synchronized int size(){
    ClientSession session;
    try {
        session = sf.createSession(false, false, false);
        ClientRequestor requestor = new ClientRequestor(session, "hornetq.management");
        ClientMessage m = session.createMessage(false);
        ManagementHelper.putAttribute(m, "core.queue." + queueName, "messageCount");
        ClientMessage reply = requestor.request(m);
        int count = (Integer) ManagementHelper.getResult(reply);
        return count;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 0;
}
public synchronized int size(){
    ClientSession coreSession = null;
    int count = 0;
    try {
        coreSession = sf.createSession(false, false, false);
        ClientSession.QueueQuery result;
        result = coreSession.queueQuery(new SimpleString(queueName));
        count = result.getMessageCount();
    } catch (HornetQException e) {
        e.printStackTrace();
    } finally {
        if (coreSession!= null ){
            try {
                coreSession.close();
            } catch (HornetQException e) {
                e.printStackTrace();
            }
        }
    }
    return count;
}