1

为了从主题中获取消息计数,我调用了 WSO2 MB 3.1.0 AdminService api 调用。它适用于队列,但不适用于主题。使用主题调用时,它没有给出正确的计数(它总是给出 0)
(为了在 WSO2 MB 管理控制台中显示主题中的消息计数,我在 WSO2 ESB 中创建了一个具有挂起状态的入站端点并创建了一个持久订阅到主题)

  1. 从队列中获取消息计数。
    网址:https://localhost:9447/services/AndesAdminService.AndesAdminServiceHttpsSoap12Endpoint

请求正文:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://wso2.org/carbon/andes/admin/xsd">
   <soap:Header/>
   <soap:Body>
      <xsd:getMessageCount>
         <!--Optional:-->
         <xsd:destinationName>test-queue</xsd:destinationName>
         <!--Optional:-->
         <xsd:msgPattern>**queue**</xsd:msgPattern>
      </xsd:getMessageCount>
   </soap:Body>
</soap:Envelope>
  1. 从主题获取消息计数。

网址:https://localhost:9447/services/AndesAdminService.AndesAdminServiceHttpsSoap12Endpoint

请求正文:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://wso2.org/carbon/andes/admin/xsd">
        <soap:Header/>
        <soap:Body>
            <xsd:getMessageCount>
                <!--Optional:-->
                <xsd:destinationName>mytopic</xsd:destinationName>
                <!--Optional:-->
                <xsd:msgPattern>**topic**</xsd:msgPattern>
            </xsd:getMessageCount>
        </soap:Body>
</soap:Envelope>

我将 messagePattern 设置为“主题”以获取主题中的消息计数。这不正确吗?如果是这样,那么使用管理服务获取主题中的消息计数的正确方法是什么。

参考: https ://docs.wso2.com/display/MB310/Calling+Admin+Services+from+Apps

4

1 回答 1

0

无法获取主题的消息数。主题应该是实时的,并且“主题”中的消息计数没有意义。

但是,如果您正在寻找“持久主题”中剩余的消息计数,则可以传递以下信息并获取消息计数。

queuename = carbon:{subscription ID} , msgPattern = queue

相关代码

   public long getMessageCount(String queueName, String msgPattern) throws MBeanException {

        if (log.isDebugEnabled()) {
            log.debug("Counting at queue : " + queueName);
        }

        long messageCount = 0;
        try {
            if (!DLCQueueUtils.isDeadLetterQueue(queueName)) {
                if ("queue".equals(msgPattern)) {
                    messageCount = Andes.getInstance().getMessageCountOfQueue(queueName);
                }
            } else {
                messageCount = Andes.getInstance().getMessageCountInDLC(queueName);
            }

        } catch (AndesException e) {
            log.error(MESSAGE_COUNT_RETRIEVE_ERROR + queueName, e);
            throw new MBeanException(e, MESSAGE_COUNT_RETRIEVE_ERROR + queueName);
        }

        return messageCount;
    }
于 2019-04-17T07:51:40.783 回答