Beispiel #1
0
        public void handle_envelope_sent_then_message_failed_tracking_for_the_same_message_to_multiple_nodes()
        {
            MessageHistory.ClearHistory();

            var envelope1 = new EnvelopeToken();
            var node1     = new StubChannelNode();
            var node2     = new StubChannelNode();



            MessageHistory.Record(new EnvelopeSent(envelope1, node1));
            MessageHistory.Record(new EnvelopeSent(envelope1, node2));

            MessageHistory.Outstanding().Count().ShouldBe(2);

            envelope1.Destination = node1.Uri;
            MessageHistory.Record(new MessageFailed
            {
                Envelope = envelope1
            });

            MessageHistory.Outstanding().Count().ShouldBe(1);

            envelope1.Destination = node2.Uri;
            MessageHistory.Record(new MessageFailed
            {
                Envelope = envelope1
            });

            MessageHistory.Outstanding().Any().ShouldBeFalse();
        }
Beispiel #2
0
        public void handle_envelope_sent_then_message_successful_for_multiple_messages_to_the_same_node()
        {
            MessageHistory.ClearHistory();

            var envelope1 = new EnvelopeToken();
            var envelope2 = new EnvelopeToken();
            var node1     = new StubChannelNode();


            MessageHistory.Record(new EnvelopeSent(envelope1, node1).ToMessageTrack());
            MessageHistory.Record(new EnvelopeSent(envelope2, node1).ToMessageTrack());

            MessageHistory.Outstanding().Count().ShouldBe(2);

            envelope1.Destination = node1.Uri;

            MessageHistory.Record(new MessageSuccessful
            {
                Envelope = envelope1
            }.ToMessageTrack());


            MessageHistory.Outstanding().Count().ShouldBe(1);

            envelope2.Destination = node1.Uri;

            MessageHistory.Record(new MessageSuccessful
            {
                Envelope = envelope2
            }.ToMessageTrack());

            MessageHistory.Outstanding().Any().ShouldBeFalse();
        }
Beispiel #3
0
        public EnvelopeSent(EnvelopeToken envelope, ChannelNode node)
        {
            Envelope = envelope;

            Uri = node.Uri;
            Key = node.Key;
        }
Beispiel #4
0
        public void handle_envelope_sent_then_message_successful_tracking_for_the_same_message_to_multiple_nodes()
        {
            MessageHistory.StartListening();

            var envelope1 = new EnvelopeToken();
            var node1     = new StubChannelNode();
            var node2     = new StubChannelNode();

            var messageWatcher = new MessageWatcher();

            messageWatcher.Handle(new EnvelopeSent(envelope1, node1));
            messageWatcher.Handle(new EnvelopeSent(envelope1, node2));

            MessageHistory.Outstanding().Count().ShouldEqual(2);

            envelope1.Destination = node1.Uri;
            messageWatcher.Handle(new MessageSuccessful
            {
                Envelope = envelope1
            });

            MessageHistory.Outstanding().Count().ShouldEqual(1);

            envelope1.Destination = node2.Uri;
            messageWatcher.Handle(new MessageSuccessful
            {
                Envelope = envelope1
            });

            MessageHistory.Outstanding().Any().ShouldBeFalse();
        }
Beispiel #5
0
        public void SetUp()
        {
            theToken              = ObjectMother.EnvelopeWithMessage().ToToken();
            theToken.ParentId     = Guid.NewGuid().ToString();
            theToken.Headers["A"] = "1";
            theToken.Headers["B"] = "2";

            theRecord = new MessageRecord(theToken);
        }
Beispiel #6
0
        public void Send(byte[] data, IHeaders headers)
        {
            var envelope = new EnvelopeToken
            {
                Data    = data,
                Headers = headers
            };

            _queue.Enqueue(envelope);
        }
Beispiel #7
0
        public void Enqueue(EnvelopeToken envelope)
        {
            using (var stream = new MemoryStream())
            {
                _formatter.Serialize(stream, envelope);

                stream.Position = 0;
                var bytes = stream.ReadAllBytes();

                _queue.Add(bytes);
            }
        }
Beispiel #8
0
        public MessageRecord(EnvelopeToken envelope)
        {
            Id       = envelope.CorrelationId;
            ParentId = envelope.ParentId;
            if (envelope.Message != null)
            {
                _messageType = envelope.Message.GetType();
                Type         = _messageType.FullName;
            }

            Headers = envelope.Headers.Keys().Select(x => "{0}={1}".ToFormat(x, envelope.Headers[x])).Join(";");
        }
Beispiel #9
0
        private void SendResponseMessage(object message, EnvelopeToken request)
        {
            var sender   = Runtime.Get <IEnvelopeSender>();
            var response = new Envelope
            {
                Message     = message,
                Destination = request.ReplyUri,
                OriginalId  = request.OriginalId ?? request.CorrelationId,
                ParentId    = request.CorrelationId,
                ResponseId  = request.CorrelationId
            };

            sender.Send(response);
        }
Beispiel #10
0
        public void moves_to_delayed_queue()
        {
            InMemoryQueueManager.ClearAll();

            var envelope = new EnvelopeToken();
            var callback = new InMemoryCallback(null, envelope);

            callback.MoveToDelayedUntil(DateTime.Now);

            var delayed = InMemoryQueueManager.DelayedEnvelopes().Single();

            delayed.CorrelationId.ShouldEqual(envelope.CorrelationId);
            delayed.ExecutionTime.ShouldNotBeNull();
        }
Beispiel #11
0
        private void handle(EnvelopeToken envelope, string status, Uri uri)
        {
            if (envelope.IsPollingJobRelated())
            {
                return;
            }

            var track = new MessageTrack
            {
                Type     = "OutstandingEnvelope",
                Id       = envelope.CorrelationId,
                FullName = "{0}@{1}".ToFormat(envelope.CorrelationId, uri),
                Status   = status
            };

            Bottles.Services.Messaging.EventAggregator.SendMessage(track);
        }
Beispiel #12
0
        public void SetUp()
        {
            theEvents = MockRepository.GenerateMock <IEventAggregator>();

            theListener = new ReplyListener <Message1>(theEvents, correlationId, 10.Minutes());

            theMessage = new Message1();

            var envelope = new EnvelopeToken
            {
                Message = theMessage
            };

            envelope.Headers[Envelope.ResponseIdKey] = correlationId;

            theListener.Handle(new EnvelopeReceived
            {
                Envelope = envelope
            });
        }
        public void dequeue_a_single_transport_should_log_all_the_requeued_envelopes()
        {
            var logger = new RecordingLogger();

            Services.Inject <ILogger>(logger);

            var envelopes = new EnvelopeToken[] { new EnvelopeToken(), new EnvelopeToken(), new EnvelopeToken() };

            LocalSystemTime = DateTime.Today.AddHours(5);
            var theTransport = MockFor <ITransport>();

            theTransport.Stub(x => x.ReplayDelayed(UtcSystemTime))
            .Return(envelopes);

            ClassUnderTest.DequeuFromTransport(theTransport, UtcSystemTime);

            envelopes.Each(env => {
                logger.InfoMessages.ShouldContain(new DelayedEnvelopeAddedBackToQueue {
                    Envelope = env
                });
            });
        }
Beispiel #14
0
        public void SetUp()
        {
            theEvents = MockRepository.GenerateMock <IEventAggregator>();

            theListener = new ReplyListener <Message1>(theEvents, correlationId, 10.Minutes());

            var envelope = new EnvelopeToken
            {
                Message = new FailureAcknowledgement
                {
                    CorrelationId = Guid.NewGuid().ToString(),
                    Message       = "No soup for you!"
                }
            };

            envelope.Headers[Envelope.ResponseIdKey] = correlationId;

            theListener.Handle(new EnvelopeReceived
            {
                Envelope = envelope
            });
        }
Beispiel #15
0
        public void Handle(EnvelopeReceived message)
        {
            EnvelopeToken envelope = message.Envelope;

            _receivedEnvelopes.Add(envelope);

            // Acknowledge that the message was received so it doesn't
            // get stuck as Outstanding in the MessageHistory
            // Sometimes this happens in the wrong order so we need to
            // wait for it to be in the pending list first.
            FubuMVC.Core.Services.Wait.Until(() => MessageHistory.Outstanding().Any(x => x.Id == envelope.CorrelationId),
                                             millisecondPolling: 50,
                                             timeoutInMilliseconds: 1000);
            var track = new MessageTrack
            {
                FullName = "{0}@{1}".ToFormat(envelope.CorrelationId, envelope.Destination),
                Id       = envelope.CorrelationId,
                Status   = MessageTrack.Received,
                Type     = "OutstandingEnvelope"
            };

            FubuMVC.Core.Services.Messaging.GlobalMessageTracking.SendMessage(track);
        }
        public void can_round_trip_an_envelope_through_the_queue()
        {
            var envelope = new EnvelopeToken();

            envelope.CorrelationId  = Guid.NewGuid().ToString();
            envelope.Headers["Foo"] = "Bar";
            envelope.Data           = new byte[] { 1, 2, 3, 4, 5 };

            var queue = new InMemoryQueue(new Uri("memory://foo"));

            var receiver = new RecordingReceiver();
            var task     = Task.Factory.StartNew(() => queue.Receive(receiver));

            queue.Enqueue(envelope);

            Wait.Until(() => receiver.Received.Count > 0, timeoutInMilliseconds: 2000);

            var received = receiver.Received.Single();

            received.CorrelationId.ShouldEqual(envelope.CorrelationId);
            received.ContentType.ShouldEqual(envelope.ContentType);
            received.Data.ShouldEqual(envelope.Data);
            task.SafeDispose();
        }
 public static void AddToDelayedQueue(EnvelopeToken envelope)
 {
     _delayedLock.Write(() => {
         _delayed.Add(envelope);
     });
 }
Beispiel #18
0
 public InMemoryCallback(InMemoryQueue parent, EnvelopeToken token)
 {
     _parent = parent;
     _token  = token;
 }