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); }
//------------------------------------------------------ //--Plugin Execution //------------------------------------------------------ protected override Task OnStartModuleAsync(IServiceProvider services) { _serialization = services.GetRequiredService <ISerializationManager>(); _subscriptionSettings = services.GetRequiredService <ISubscriptionSettings>(); _subscribers = GetHostSubscribers(DispatchModule); return(LinkHandlersToHostItems(_subscriptionSettings)); }
// 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); }
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); }
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); } }
public SubscriptionAdministrator(ISubscriptionSettings settings) { _subscriptionClient = new SubscriptionClient(settings.ConnectionString, settings.Topic, settings.Subscription, settings.ReceiveMode); }
public MessageReceiver(ISubscriptionSettings settings) { _subscriptionClient = new SubscriptionClient(settings.ConnectionString, settings.Topic, settings.Subscription, settings.ReceiveMode); }