Наследование: IDisposable
Пример #1
0
        public SubscriptionCache(ChannelGraph graph, IEnumerable<ITransport> transports)
        {
            if (!transports.Any())
            {
                throw new Exception(
                    "No transports are registered.  FubuMVC's ServiceBus cannot function without at least one ITransport");
            }

            _graph = graph;
            _transports = transports;

            _volatileNodes = new Cache<Uri, ChannelNode>(uri =>
            {
                var transport = _transports.FirstOrDefault(x => x.Protocol == uri.Scheme);
                if (transport == null)
                {
                    throw new UnknownChannelException(uri);
                }

                var node = new ChannelNode { Uri = uri, Key = uri.ToString() };
                node.Channel = transport.BuildDestinationChannel(node.Uri);

                return node;
            });
        }
Пример #2
0
 public void setting_address_has_to_be_a_Uri()
 {
     var node = new ChannelNode();
     Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => {
         node.SettingAddress = ReflectionHelper.GetAccessor<FakeThing>(x => x.Name);
     });
 }
Пример #3
0
 public Receiver(IHandlerPipeline pipeline, ChannelGraph graph, ChannelNode node)
 {
     _pipeline = pipeline;
     _graph = graph;
     _node = node;
     _address = node.Channel.Address;
 }
Пример #4
0
        public EnvelopeSent(EnvelopeToken envelope, ChannelNode node)
        {
            Envelope = envelope;

            Uri = node.Uri;
            Key = node.Key;
        }
Пример #5
0
        public void setting_default_content_type_will_clear_the_serializer()
        {
            var node = new ChannelNode();
            node.DefaultSerializer = new BinarySerializer();

            node.DefaultContentType = "application/xml";

            node.DefaultContentType.ShouldBe("application/xml");
            node.DefaultSerializer.ShouldBeNull();
        }
Пример #6
0
        public void publishes_is_false_if_no_rules_pass()
        {
            var node = new ChannelNode();
            for (int i = 0; i < 5; i++)
            {
                node.Rules.Add(MockRepository.GenerateMock<IRoutingRule>());
            }

            node.Publishes(typeof(NewUser)).ShouldBeFalse();
        }
Пример #7
0
        /*
         * Changes
         * 1.) Do serialization within sendToChannel
         * 2.) do the cloning *outside* of sendToChannel
         * 3.) Make envelopeserializer smart enough not to replace the contents if it needs to
         */
        private void sendToChannel(Envelope envelope, ChannelNode node)
        {
            var replyUri = _router.ReplyUriFor(node);

            var headers = node.Send(envelope, _serializer, replyUri: replyUri);
            _logger.InfoMessage(() => new EnvelopeSent(new EnvelopeToken
            {
                Headers = headers,
                Message = envelope.Message
            }, node));
        }
Пример #8
0
        private void addRow(TableRowTag row, ChannelNode channel)
        {
            addDescriptionCell(row, channel);

            addSchedulers(row, channel);

            addRoutingRules(row, channel);

            addSerialization(row, channel);

            addModifiers(row, channel);
        }
Пример #9
0
 private void addModifiers(TableRowTag row, ChannelNode channel)
 {
     var cell = row.Cell().AddClass("modifiers");
     if (channel.Modifiers.Any())
     {
         cell.Add("ul", ul => { channel.Modifiers.Each(x => ul.Add("li").Text(x.ToString())); });
     }
     else
     {
         cell.Text("None");
     }
 }
Пример #10
0
        public void publishes_is_true_if_any_rule_passes()
        {
            var node = new ChannelNode();
            for (int i = 0; i < 5; i++)
            {
                node.Rules.Add(MockRepository.GenerateMock<IRoutingRule>());
            }

            node.Rules[2].Stub(x => x.Matches(typeof (NewUser))).Return(true);

            node.Publishes(typeof(NewUser)).ShouldBeTrue();
        }
Пример #11
0
 private static void addRoutingRules(TableRowTag row, ChannelNode channel)
 {
     var cell = row.Cell().AddClass("routing-rules");
     if (channel.Rules.Any())
     {
         cell.Add("ul", ul => { channel.Rules.Each(x => ul.Add("li").Text(x.Describe())); });
     }
     else
     {
         cell.Text("None");
     }
 }
Пример #12
0
 private static void addSchedulers(TableRowTag row, ChannelNode channel)
 {
     var cell = row.Cell();
     if (channel.Incoming)
     {
         var description = Description.For(channel.Scheduler);
         cell.Append(new DescriptionBodyTag(description));
     }
     else
     {
         cell.Text("None");
     }
 }
Пример #13
0
        public void doesnt_throw_if_receive_only_fails_intermittently()
        {
            var channel = new FakeChannel { StopAfter = 20 };
            var node = new ChannelNode
            {
                Channel = channel,
                Scheduler = new FakeScheduler()
            };

            var logger = new RecordingLogger();
            var receiver = new RecordingReceiver();
            node.StartReceiving(receiver, logger);

            channel.HitCount.ShouldBe(20);
        }
        public void builds_a_schedule_by_threads()
        {
            var settings = new ThreadSettings
            {
                Count = 7
            };

            var channelNode = new ChannelNode();
            new ByThreadScheduleMaker<ThreadSettings>(x => x.Count)
                .As<ISettingsAware>()
                .ApplySettings(settings, channelNode);

            channelNode.Scheduler.ShouldBeOfType<ThreadScheduler>()
                .ThreadCount.ShouldBe(7);
        }
Пример #15
0
 private void addSerialization(TableRowTag row, ChannelNode channel)
 {
     var cell = row.Cell().AddClass("serialization");
     if (channel.DefaultContentType.IsNotEmpty())
     {
         cell.Text(channel.DefaultContentType);
     }
     else if (channel.DefaultSerializer != null)
     {
         cell.Text(channel.DefaultSerializer.ToString());
     }
     else
     {
         cell.Text("None");
     }
 }
Пример #16
0
        public void Serialize(Envelope envelope, ChannelNode node)
        {
            if (envelope.Message == null) throw new InvalidOperationException("No message on this envelope to serialize");

            var serializer = SelectSerializer(envelope, node);
            if (envelope.ContentType.IsEmpty())
            {
                envelope.ContentType = serializer.ContentType;
            }

            using (var stream = new MemoryStream())
            {
                serializer.Serialize(envelope.Message, stream);
                stream.Position = 0;

                envelope.Data = stream.ReadAllBytes();
            }
        }
Пример #17
0
        public IMessageSerializer SelectSerializer(Envelope envelope, ChannelNode node)
        {
            if (envelope.ContentType.IsNotEmpty())
            {
                return findSerializer(envelope.ContentType);
            }

            if (node.DefaultSerializer != null)
            {
                return node.DefaultSerializer;
            }

            if (node.DefaultContentType.IsNotEmpty())
            {
                return findSerializer(node.DefaultContentType);
            }

            return findSerializer(_graph.DefaultContentType);
        }
Пример #18
0
        public void continuous_receive_errors()
        {
            var logger = new RecordingLogger();
            var receiver = new RecordingReceiver();
            var channel = MockRepository.GenerateMock<IChannel>();
            channel.Expect(x => x.Receive(receiver))
                .Throw(new Exception("I failed"));

            var node = new ChannelNode
            {
                Channel = channel,
                Scheduler = new FakeScheduler()
            };

            Exception<ReceiveFailureException>.ShouldBeThrownBy(() =>
            {
                node.StartReceiving(receiver, logger);
            });
        }
Пример #19
0
 public Uri ReplyUriFor(ChannelNode destination)
 {
     return _graph.ReplyChannelFor(destination.Protocol());
 }
Пример #20
0
        void ISettingsAware.ApplySettings(object settings, ChannelNode node)
        {
            int threadCount = (int)ReflectionHelper.GetAccessor(_expression).GetValue(settings);

            node.Scheduler = buildScheduler(threadCount);
        }
 protected override IChannel buildChannel(ChannelNode channelNode)
 {
     var uri = new LightningUri(channelNode.Uri);
     return channelNode.Mode == ChannelMode.DeliveryGuaranteed
         ? LightningQueuesChannel.BuildPersistentChannel(uri, _queues, _settings.MapSize, _settings.MaxDatabases, channelNode.Incoming)
         : LightningQueuesChannel.BuildNoPersistenceChannel(uri, _queues, channelNode.Incoming);
 }
Пример #22
0
 public void no_publishing_rules_is_always_false()
 {
     var node = new ChannelNode();
     node.Publishes(typeof(NewUser)).ShouldBeFalse();
 }
Пример #23
0
 public void Serialize(Envelope envelope, ChannelNode node)
 {
     throw new EnvelopeDeserializationException("Error");
 }
Пример #24
0
 public void default_channel_mode_is_delivery_guaranteed()
 {
     var node = new ChannelNode();
     node.Mode.ShouldBe(ChannelMode.DeliveryGuaranteed);
 }
Пример #25
0
        public void SetUp()
        {
            theEnvelope = new Envelope()
            {
                Data = new byte[]{1,2,3,4},
                
            };

            theSerializer = MockRepository.GenerateMock<IEnvelopeSerializer>();

            theEnvelope.Headers["A"] = "1";
            theEnvelope.Headers["B"] = "2";
            theEnvelope.Headers["C"] = "3";
            theEnvelope.CorrelationId = Guid.NewGuid().ToString();

            theChannel = new RecordingChannel();

            theNode = new ChannelNode
            {
                Channel = theChannel,
                Key = "Foo",
                Uri = "foo://bar".ToUri()
            };

            theNode.Modifiers.Add(new HeaderSetter("D", "4"));
            theNode.Modifiers.Add(new HeaderSetter("E", "5"));

            theNode.Send(theEnvelope, theSerializer);
        }
Пример #26
0
        public void ReceiveFailed_error_handling()
        {
            var node = new ChannelNode
            {
                Key = "TestKey",
                Channel = new FakeChannel { StopAfter = 2 },
                Scheduler = new FakeScheduler()
            };

            var logger = new RecordingLogger();
            node.StartReceiving(new RecordingReceiver(), logger);

            logger.ErrorMessages.ShouldHaveCount(1);
            logger.InfoMessages.ShouldHaveCount(1);
            var message = logger.InfoMessages.Cast<ReceiveFailed>().Single();
            message.ChannelKey.ShouldBe(node.Key);
            message.Exception.ShouldNotBeNull();
        }
Пример #27
0
 private static void addDescriptionCell(TableRowTag row, ChannelNode channel)
 {
     var cell = row.Cell();
     cell.Add("h5").Text(channel.Key);
     cell.Add("div/i").Text(channel.Uri.ToString());
     if (channel.DefaultContentType != null)
         cell.Add("div").Text("Default Content Type: " + channel.DefaultContentType);
 }
 protected override IChannel buildChannel(ChannelNode channelNode)
 {
     return LightningQueuesChannel.Build(new LightningUri(channelNode.Uri), _queues, _delayedMessages, channelNode.Incoming);
 }
Пример #29
0
 protected abstract IChannel buildChannel(ChannelNode channelNode);
        private void SetupTransport(string uri)
        {
            graph = new ChannelGraph();
            node = graph.ChannelFor<ChannelSettings>(x => x.Upstream);
            node.Uri = new Uri(uri);
            node.Incoming = true;

            var delayedCache = new DelayedMessageCache<MessageId>();
            queues = new PersistentQueues(new RecordingLogger(), delayedCache, new LightningQueueSettings());
            queues.ClearAll();
            transport = new LightningQueuesTransport(queues, new LightningQueueSettings(), delayedCache);

            transport.OpenChannels(graph);
        }