Как получить количество сообщений в теме в WSO2 MB, используя AdminServices - PullRequest
0 голосов
/ 25 октября 2018

Чтобы получить количество сообщений из темы, я вызвал API-вызовы WSO2 MB 3.1.0 AdminService.Это работало для очереди, но не для темы.При вызове с темой он не дает правильного количества (он всегда дает 0)
(Чтобы показать количество сообщений в теме в консоли управления WSO2 MB, я создал входящую конечную точку с suspend укажите в ESB WSO2 и создайте длительную подписку на тему)

  1. Получить количество сообщений из очереди.
    url: 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>
Получить количество сообщений из темы.

url: 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 как "topic" дляполучить количество сообщений в теме.Это не правильно?Если да, то как правильно подсчитать количество сообщений в теме, используя службы администратора.

Ссылка: https://docs.wso2.com/display/MB310/Calling+Admin+Services+from+Apps

1 Ответ

0 голосов
/ 17 апреля 2019

Нет способа получить количество сообщений по темам.Предполагается, что темы выполняются в режиме реального времени, а подсчет сообщений в «теме» не имеет смысла.

Однако, если вы ищете количество сообщений, оставшихся в «прочной теме», вы можете передать ниже информацию и получить количество сообщений.

имя очереди = углерод: {идентификатор подписки}, msgPattern = очередь

Соответствующий код

   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;
    }
...