All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.microsoft.azure.servicebus.SessionBrowser Maven / Gradle / Ivy

Go to download

Java library for Azure Service Bus. Please note, a newer package com.azure:azure-messaging-servicebus for Azure Service Bus is available as of December 2020. While this package will continue to receive critical bug fixes, we strongly encourage you to upgrade. Read the migration guide at https://aka.ms/azsdk/java/migrate/sb for more details.

There is a newer version: 3.6.7
Show newest version
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

package com.microsoft.azure.servicebus;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.concurrent.CompletableFuture;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.microsoft.azure.servicebus.primitives.MessagingEntityType;
import com.microsoft.azure.servicebus.primitives.MessagingFactory;
import com.microsoft.azure.servicebus.primitives.MiscRequestResponseOperationHandler;

final class SessionBrowser {
    private static final Logger TRACE_LOGGER = LoggerFactory.getLogger(SessionBrowser.class);
    private static final int PAGESIZE = 100;
    // .net DateTime.MaxValue need to be passed
    private static final Date MAXDATE = new Date(253402300800000l);

    private final MessagingFactory messagingFactory;
    private final String entityPath;
    private final MessagingEntityType entityType;
    private MiscRequestResponseOperationHandler miscRequestResponseHandler;

    SessionBrowser(MessagingFactory messagingFactory, String entityPath, MessagingEntityType entityType, MiscRequestResponseOperationHandler miscRequestResponseHandler) {
        this.messagingFactory = messagingFactory;
        this.entityPath = entityPath;
        this.entityType = entityType;
        this.miscRequestResponseHandler = miscRequestResponseHandler;
    }

    public CompletableFuture> getMessageSessionsAsync() {
        return this.getMessageSessionsAsync(MAXDATE);
    }

    public CompletableFuture> getMessageSessionsAsync(Date lastUpdatedTime) {
        return this.getMessageSessionsAsync(lastUpdatedTime, 0, null);
    }

    private CompletableFuture> getMessageSessionsAsync(Date lastUpdatedTime, int lastReceivedSkip, String lastSessionId) {
        TRACE_LOGGER.debug("Getting '{}' browsable sessions from entity '{}', lastUpdatedTime '{}', lastReceivedSkip '{}', lastSessionId '{}'", PAGESIZE, this.entityPath, lastUpdatedTime, lastReceivedSkip, lastSessionId);
        return this.miscRequestResponseHandler.getMessageSessionsAsync(lastUpdatedTime, lastReceivedSkip, PAGESIZE, lastSessionId).thenComposeAsync((p) ->
        {
            int newLastReceivedSkip = p.getSecondItem();
            String[] sessionIds = p.getFirstItem();
            ArrayList sessionsList = new ArrayList<>();
            if (sessionIds != null && sessionIds.length > 0) {
                TRACE_LOGGER.debug("Got '{}' browsable sessions from entity '{}', receivedSkip '{}'", sessionIds.length, this.entityPath, newLastReceivedSkip);
                CompletableFuture[] initFutures = new CompletableFuture[sessionIds.length];
                int initFutureIndex = 0;
                String newLastSessionId = sessionIds[sessionIds.length - 1];
                for (String sessionId : sessionIds) {
                    BrowsableMessageSession browsableSession = new BrowsableMessageSession(sessionId, this.messagingFactory, this.entityPath, this.entityType);
                    sessionsList.add(browsableSession);
                    initFutures[initFutureIndex++] = browsableSession.initializeAsync();
                }
                CompletableFuture allInitFuture = CompletableFuture.allOf(initFutures);
                return allInitFuture.thenComposeAsync((v) -> getMessageSessionsAsync(lastUpdatedTime, newLastReceivedSkip, newLastSessionId), MessagingFactory.INTERNAL_THREAD_POOL).thenApply((c) -> {
                    sessionsList.addAll(c);
                    return sessionsList;
                });
            } else {
                TRACE_LOGGER.debug("Got no browsable sessions from entity '{}'", this.entityPath);
                return CompletableFuture.completedFuture(sessionsList);
            }
        }, MessagingFactory.INTERNAL_THREAD_POOL);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy