Exemplo n.º 1
0
        public void LinkSubscriber(Session session, HostItemSubscriber subscriber,
                                   ISubscriptionSettings subscriptionSettings)
        {
            var topicAttribute = (TopicAttribute)subscriber.HostItemAttribute;

            // Determine if the host application has provided a specific subscription
            // that should be used for the name specified in code.

            string hostName = subscriber.HostAttribute.HostName;

            var mapping = new SubscriptionMapping(hostName, topicAttribute.TopicName,
                                                  topicAttribute.SubscriptionName);

            string subscriptionName = subscriptionSettings.GetMappedSubscription(mapping)
                                      ?? topicAttribute.SubscriptionName;

            var logger = LoggerFactory.CreateLogger <TopicSubscriberLinker>();

            logger.LogInformation(
                "Subscribing to topic {topicName} as subscription {subscriptionName}",
                topicAttribute.TopicName,
                subscriptionName);

            // Create a AMQP receiver link used to register handler method:
            var receiverLink = new ReceiverLink(session, Guid.NewGuid().ToString(),
                                                $"{topicAttribute.TopicName}/Subscriptions/{subscriptionName}");

            ReceiveMessages(subscriber, receiverLink);
        }
Exemplo n.º 2
0
        //------------------------------------------------------
        //--Plugin Execution
        //------------------------------------------------------

        protected override Task OnStartModuleAsync(IServiceProvider services)
        {
            _serialization = services.GetRequiredService <ISerializationManager>();

            _subscriptionSettings = services.GetRequiredService <ISubscriptionSettings>();
            _subscribers          = GetHostSubscribers(DispatchModule);

            return(LinkHandlersToHostItems(_subscriptionSettings));
        }
Exemplo n.º 3
0
        // Obtain the session on which the AMQP receiver link should be created and then delegate
        // to the ISubscriberLinker implementation associated with the host item (Queue/Topic).
        // The subscriber-linker will bind the message handler to the host item so it will be
        // invoked when a message is received.
        private void LinkSubscriber(HostItemSubscriber subscriber, ISubscriptionSettings subscriptionSettings)
        {
            Session           session = ConnectionModule.CreateReceiverSession(subscriber.HostAttribute.HostName);
            ISubscriberLinker linker  = subscriber.HostItemAttribute.Linker;

            linker.SetServices(DispatchModule, _serialization, Context.LoggerFactory);

            // Delegate to the subscriber linker implementation to handle received messages:
            linker.LinkSubscriber(session, subscriber, subscriptionSettings);
        }
Exemplo n.º 4
0
        public void LinkSubscriber(Session session, HostItemSubscriber subscriber,
                                   ISubscriptionSettings subscriptionSettings)
        {
            var queueAttribute = (QueueAttribute)subscriber.HostItemAttribute;

            // Create a AMQP receiver link used to register handler method:
            var receiverLink = new ReceiverLink(session,
                                                Guid.NewGuid().ToString(),
                                                queueAttribute.QueueName);

            var logger = LoggerFactory.CreateLogger <QueueSubscriberLinker>();

            logger.LogInformation("Subscribing to queue {named}", queueAttribute.QueueName);

            ReceiveMessages(subscriber, receiverLink);
        }
Exemplo n.º 5
0
        private async Task LinkHandlersToHostItems(ISubscriptionSettings subscriptionSettings)
        {
            if (subscriptionSettings == null)
            {
                throw new ArgumentNullException(nameof(subscriptionSettings));
            }

            // Initialize any host provided AMQP settings - i.e. creating host specific
            // subscriptions to AMQP defined topics.
            await _subscriptionSettings.ConfigureSettings();

            ConnectionModule.SetReceiverConnectionCloseHandler(ReSetReceiverLinkOnClosedConn);

            foreach (var subscriber in _subscribers)
            {
                LinkSubscriber(subscriber, subscriptionSettings);
            }
        }
Exemplo n.º 6
0
 public SubscriptionAdministrator(ISubscriptionSettings settings)
 {
     _subscriptionClient = new SubscriptionClient(settings.ConnectionString, settings.Topic, settings.Subscription, settings.ReceiveMode);
 }
Exemplo n.º 7
0
 public MessageReceiver(ISubscriptionSettings settings)
 {
     _subscriptionClient = new SubscriptionClient(settings.ConnectionString, settings.Topic, settings.Subscription, settings.ReceiveMode);
 }