public void deliver_by_mechanics()
        {
            var settings = new MessagingSettings();
            var envelope = new Envelope
            {
                Message = new MySpecialMessage()
            };

            settings.ApplyMessageTypeSpecificRules(envelope);

            envelope.DeliverBy.Value.ShouldBeGreaterThan(DateTimeOffset.UtcNow);
        }
        public void apply_message_type_rules_from_attributes()
        {
            var settings = new MessagingSettings();
            var envelope = new Envelope
            {
                Message = new MySpecialMessage()
            };

            settings.ApplyMessageTypeSpecificRules(envelope);

            envelope.Headers["special"].ShouldBe("true");
        }
Exemple #3
0
        public async Task <Guid> SendEnvelope(Envelope envelope)
        {
            if (envelope.Message == null)
            {
                throw new ArgumentNullException(nameof(envelope.Message));
            }

            var outgoing = await _router.Route(envelope);

            foreach (var env in outgoing)
            {
                _settings.ApplyMessageTypeSpecificRules(env);
            }

            trackEnvelopeCorrelation(outgoing);


            if (envelope.RequiresLocalReply)
            {
                if (outgoing.Length > 1)
                {
                    throw new InvalidOperationException("Cannot find a unique handler for this request");
                }

                // this is important for the request/reply mechanics
                outgoing[0].Id = envelope.Id;
            }

            if (!outgoing.Any())
            {
                _logger.NoRoutesFor(envelope);

                throw new NoRoutesException(envelope);
            }

            if (envelope.RequiresLocalReply)
            {
                foreach (var outgoingEnvelope in outgoing)
                {
                    await outgoingEnvelope.Send();
                }

                return(envelope.Id);
            }

            await persistOrSend(outgoing);

            return(envelope.Id);
        }
        public void apply_message_rules()
        {
            var rule1 = new MessageTypeRule(t => t == typeof(MySpecialMessage), e => e.Headers.Add("rule1", "true"));
            var rule2 = new MessageTypeRule(t => t.IsInNamespace(typeof(MySpecialMessage).Namespace), e => e.Headers.Add("rule2", "true"));

            var settings = new MessagingSettings();

            settings.MessageTypeRules.Add(rule1);
            settings.MessageTypeRules.Add(rule2);

            var envelope = new Envelope
            {
                Message = new MySpecialMessage()
            };

            settings.ApplyMessageTypeSpecificRules(envelope);

            envelope.Headers["rule1"].ShouldBe("true");
            envelope.Headers["rule2"].ShouldBe("true");
        }