public async Task persist_and_load_subscriptions()
        {
            var subscriptions = new Subscription[]
            {
                new Subscription(typeof(GreenMessage), theDestination)
                {
                    Accept = new string[] { "application/json" },
                },
                new Subscription(typeof(BlueMessage), theDestination),
                new Subscription(typeof(RedMessage), theDestination),
                new Subscription(typeof(OrangeMessage), theDestination),
            };

            var capabilities = new ServiceCapabilities
            {
                Subscriptions = subscriptions,
                Published     = new PublishedMessage[0]
            };

            subscriptions.Each(x => x.ServiceName = "ConsulSampleApp");

            await theRepository.PersistCapabilities(capabilities);

            var publishes = await theRepository.GetSubscribersFor(typeof(GreenMessage));

            publishes.Count().ShouldBe(1);

            publishes.Single().Accept.ShouldHaveTheSameElementsAs("application/json");

            publishes.Any(x => x.MessageType == typeof(GreenMessage).ToMessageAlias()).ShouldBeTrue();
        }
        public async Task persist_and_load_subscriptions()
        {
            var subscriptions = new Subscription[]
            {
                new Subscription(typeof(GreenMessage), theDestination),
                new Subscription(typeof(BlueMessage), theDestination),
                new Subscription(typeof(RedMessage), theDestination),
                new Subscription(typeof(OrangeMessage), theDestination),
            };

            subscriptions.Each(x => x.ServiceName = "MartenSampleApp");

            await theRepository.PersistSubscriptions(subscriptions);

            var publishes = await theRepository.GetSubscribersFor(typeof(GreenMessage));

            publishes.Count().ShouldBe(1);

            publishes.Any(x => x.MessageType == typeof(GreenMessage).ToMessageAlias()).ShouldBeTrue();
        }
Exemple #3
0
        private async Task <List <MessageRoute> > compileRoutes(Type messageType)
        {
            var list = new List <MessageRoute>();

            var modelWriter = _serializers.WriterFor(messageType);
            var supported   = modelWriter.ContentTypes;

            foreach (var channel in _channels.AllKnownChannels().Where(x => x.ShouldSendMessage(messageType)))
            {
                var contentType = supported.FirstOrDefault(x => x != "application/json") ?? "application/json";

                if (contentType.IsNotEmpty())
                {
                    list.Add(new MessageRoute(messageType, modelWriter, channel, contentType)
                    {
                    });
                }
            }

            var subscriptions = await _subscriptions.GetSubscribersFor(messageType);

            if (subscriptions.Any())
            {
                var published = new PublishedMessage(messageType, modelWriter, _channels);


                foreach (var subscription in subscriptions)
                {
                    if (MessageRoute.TryToRoute(published, subscription, out MessageRoute route,
                                                out PublisherSubscriberMismatch mismatch))
                    {
                        route.Writer  = modelWriter[route.ContentType];
                        route.Channel = _channels.GetOrBuildChannel(route.Destination);
                        list.Add(route);
                    }
                    else
                    {
                        _logger.SubscriptionMismatch(mismatch);
                    }
                }
Exemple #4
0
        private async Task applyDynamicSubscriptions(Type messageType, ModelWriter modelWriter, List <MessageRoute> list)
        {
            var subscriptions = await _subscriptions.GetSubscribersFor(messageType);

            if (subscriptions.Any())
            {
                var published = new PublishedMessage(messageType, modelWriter, _channels);


                foreach (var subscription in subscriptions)
                {
                    if (MessageRoute.TryToRoute(published, subscription, out MessageRoute route,
                                                out PublisherSubscriberMismatch mismatch))
                    {
                        route.Writer  = modelWriter[route.ContentType];
                        route.Channel = _channels.GetOrBuildChannel(route.Destination);
                        list.Add(route);
                    }
                    else
                    {
                        _logger.SubscriptionMismatch(mismatch);
                    }
                }