Class TopicMultiplexerAmLink

  • All Implemented Interfaces:
    AmLink, AmLinkListener, AmLinkListener.ResilientAmLinkListener

    public class TopicMultiplexerAmLink
    extends Object
    implements AmLink, AmLinkListener.ResilientAmLinkListener
    Multiplex topic registration on top of a AmLink.

    As AM does not manage multiple subscriptions to the same topic from a client, this class has to do the subscription multiplexing itself. In other words, it maintains a map of subscribed TopicMultiplexerAmLink.Topics, each of which has a reference counter used to detect when an un-registration action needs to be performed.

    The first time a topic is subscribed to, this class sends a subscription message to AM and waits for the acknowledgment. Every subsequent subscription to the same topic will reuse the same "connection" without sending a subscription request. Inversely, no un-subscription request is sent to AM until the last reference is removed.

    The following issues may occur:

    • 2 (un)subscriptions at the same time: a lock prevents this.
    • A topic is subscribed, then unsubscribed before the subscription promise fulfillment: Wait for the subscription promise to complete before un-subscribing
    • A topic is subscribed, the subscription promise failed. Then the subscription is removed from the topic list
    • A topic is un-subscribed, the un-subscription promise failed. The the topic is still considered as subscribed
    • Method Detail

      • start

        public Promise<Void,​Exception> start()
        Description copied from interface: AmLink
        Start the AmLink. The AmLink is considered ready for use only when the resulting promise has successfully completed. In case of a failed promise, the instance is considered as already closed.

        Note that notifications are guaranteed to be received AT LEAST once. Duplicate notification may occur.

        Specified by:
        start in interface AmLink
        Returns:
        A promise of this AmLink's start completion.
      • onDisconnection

        public void onDisconnection()
        Description copied from interface: AmLinkListener
        The handler to call in case of a disconnection. When this handler is called, the instance is considered as closed. Can only be called after the start promise successful completion, and before every ongoing (un)subscribe promise failure.
        Specified by:
        onDisconnection in interface AmLinkListener
      • onNotification

        public void onNotification​(Notification notification)
        Description copied from interface: AmLinkListener
        The notification handler, will receive all notifications sent by AM. Duplicate notifications may occur.
        Specified by:
        onNotification in interface AmLinkListener
        Parameters:
        notification - the received notification
      • close

        public Promise<Void,​Exception> close()
        Description copied from interface: AmLink
        Close the AmLink and its associated resources. The instance can't be reused afterward.
        Specified by:
        close in interface AmLink
        Returns:
        A promise indicating the AmLink has been closed
      • subscribe

        public Promise<Void,​Exception> subscribe​(String topicName)
        Description copied from interface: AmLink
        Subscribe to an AM topic. After successful subscription, the notification consumer (supplied in will begin receiving notifications on this topic.
        Specified by:
        subscribe in interface AmLink
        Parameters:
        topicName - The AM topic to subscribe to.
        Returns:
        A promise of a successful subscription to the AM topic.
      • unsubscribe

        public Promise<Void,​Exception> unsubscribe​(String topicName)
        Description copied from interface: AmLink
        Unsubscribe from an AM topic. After successful unsubscribe request, the notification consumer will stop receiving notifications on this topic.
        Specified by:
        unsubscribe in interface AmLink
        Parameters:
        topicName - The AM topic to un-subscribe from.
        Returns:
        A promise of a successful un-subscription to the AM topic.