/// <summary> /// Setups the service bus. /// </summary> private void SetupServiceBus() { //Setup the service subscription channel var config = CloudApplicationConfiguration.Current.GetSection <ServiceBusConfigurationSection>(ServiceBusConfigurationSection.SectionName); pubSubChannel = new ServiceBusPublishSubscribeChannel(config.Endpoints.Get(config.DefaultEndpoint)); CreateSubscriptionForService(pubSubChannel, "RoutingService"); }
/// <summary> /// Setups the service bus. /// </summary> public void SendMessageToRouter() { //Setup the service subscription channel var config = CloudApplicationConfiguration.Current.GetSection <ServiceBusConfigurationSection>(ServiceBusConfigurationSection.SectionName); var routerServiceCtx = new RoutingMessageContext { To = "ServiceRouter" }; using (var pubSubChannel = new ServiceBusPublishSubscribeChannel(config.Endpoints.Get(config.DefaultEndpoint))) { pubSubChannel.Settings.MessageTimeToLive = TimeSpan.FromSeconds(120); //publish the message pubSubChannel.Publish(this.model, routerServiceCtx); } }
/// <summary> /// Creates the subscription for service. /// </summary> /// <param name="pubSubChannel">The pub sub channel.</param> /// <param name="p">The p.</param> private void CreateSubscriptionForService(ServiceBusPublishSubscribeChannel pubSubChannel, string serviceName) { //Define a filter to receive only messages that have a specific "To" property var filter = FilterExpressions.GroupOr( FilterExpressions.MatchTo(serviceName), FilterExpressions.MatchTo("ServiceRouter")); //Now we need to create an observer, that will check for new incoming messages modelObserver = Observer.Create <RouteMeModel>(msg => { var exists = CheckIfRoutingEntryExists(msg); if (!exists) { AddNewServiceEntry(msg); } }); pubSubChannel.Subscribe(serviceName, modelObserver, filter); }