コード例 #1
0
        void ConfigureMessageRegistry(List <Type> knownMessages)
        {
            var messageRegistry = new MessageMetadataRegistry
            {
                DefaultToNonPersistentMessages = !SettingsHolder.Get <bool>("Endpoint.DurableMessages")
            };

            knownMessages.ForEach(messageRegistry.RegisterMessageType);

            Configure.Instance.Configurer.RegisterSingleton <MessageMetadataRegistry>(messageRegistry);
            Configure.Instance.Configurer.ConfigureComponent <LogicalMessageFactory>(DependencyLifecycle.SingleInstance);

            if (!Logger.IsInfoEnabled)
            {
                return;
            }

            var messageDefinitions = messageRegistry.GetAllMessages().ToList();

            Logger.InfoFormat("Number of messages found: {0}", messageDefinitions.Count());

            if (!Logger.IsDebugEnabled)
            {
                return;
            }

            Logger.DebugFormat("Message definitions: \n {0}",
                               string.Concat(messageDefinitions.Select(md => md.ToString() + "\n")));
        }
コード例 #2
0
            public void Should_throw_an_exception_for_a_unmapped_type()
            {
                var defaultMessageRegistry = new MessageMetadataRegistry();
                var exception = Assert.Throws <Exception>(() => defaultMessageRegistry.GetMessageDefinition(typeof(int)));

                Assert.AreEqual("Could not find Metadata for 'System.Int32'. Messages need to implement either 'IMessage', 'IEvent' or 'ICommand'. Alternatively, if you don't want to implement an interface, you can configure 'Unobtrusive Mode Messages' and use convention to configure how messages are mapped.", exception.Message);
            }
コード例 #3
0
        void ConfigureMessageRegistry(FeatureConfigurationContext context, IEnumerable <Type> knownMessages)
        {
            var messageRegistry = new MessageMetadataRegistry(!DurableMessagesConfig.GetDurableMessagesEnabled(context.Settings), context.Settings.Get <Conventions>());

            foreach (var msg in knownMessages)
            {
                messageRegistry.RegisterMessageType(msg);
            }

            context.Container.RegisterSingleton(messageRegistry);
            context.Container.ConfigureComponent <LogicalMessageFactory>(DependencyLifecycle.SingleInstance);

            if (!Logger.IsInfoEnabled)
            {
                return;
            }

            var messageDefinitions = messageRegistry.GetAllMessages().ToList();

            Logger.InfoFormat("Number of messages found: {0}", messageDefinitions.Count());

            if (!Logger.IsDebugEnabled)
            {
                return;
            }

            Logger.DebugFormat("Message definitions: \n {0}",
                               string.Concat(messageDefinitions.Select(md => md.ToString() + "\n")));
        }
コード例 #4
0
        void ConfigureMessageRegistry(List<Type> knownMessages)
        {
            var messageRegistry = new MessageMetadataRegistry
            {
                DefaultToNonPersistentMessages = !SettingsHolder.Get<bool>("Endpoint.DurableMessages")
            };

            knownMessages.ForEach(messageRegistry.RegisterMessageType);

            Configure.Instance.Configurer.RegisterSingleton<MessageMetadataRegistry>(messageRegistry);
            Configure.Instance.Configurer.ConfigureComponent<LogicalMessageFactory>(DependencyLifecycle.SingleInstance);

            if (!Logger.IsInfoEnabled)
            {
                return;
            }

            var messageDefinitions = messageRegistry.GetAllMessages().ToList();

            Logger.InfoFormat("Number of messages found: {0}", messageDefinitions.Count());

            if (!Logger.IsDebugEnabled)
            {
                return;
            }

            Logger.DebugFormat("Message definitions: \n {0}",
                string.Concat(messageDefinitions.Select(md => md.ToString() + "\n")));
        }
コード例 #5
0
        /// <summary>
        /// Creates the configuration object.
        /// </summary>
        internal InitializableEndpoint Build()
        {
            if (scannedTypes == null)
            {
                var directoryToScan = AppDomain.CurrentDomain.BaseDirectory;
                if (HttpRuntime.AppDomainAppId != null)
                {
                    directoryToScan = HttpRuntime.BinDirectory;
                }

                scannedTypes = GetAllowedTypes(directoryToScan);
            }
            else
            {
                scannedTypes = scannedTypes.Union(GetAllowedCoreTypes()).ToList();
            }

            Settings.SetDefault("TypesToScan", scannedTypes);
            ActivateAndInvoke <INeedInitialization>(scannedTypes, t => t.Customize(this));

            UseTransportExtensions.EnsureTransportConfigured(this);
            var container = customBuilder ?? new AutofacObjectBuilder();

            var conventions = conventionsBuilder.Conventions;

            Settings.SetDefault <Conventions>(conventions);
            var messageMetadataRegistry = new MessageMetadataRegistry(conventions);

            messageMetadataRegistry.RegisterMessageTypesFoundIn(Settings.GetAvailableTypes());

            Settings.SetDefault <MessageMetadataRegistry>(messageMetadataRegistry);

            return(new InitializableEndpoint(Settings, container, registrations, Pipeline, pipelineCollection));
        }
コード例 #6
0
 public void Should_return_metadata_for_a_mapped_type()
 {
     var defaultMessageRegistry = new MessageMetadataRegistry();
     defaultMessageRegistry.RegisterMessageType(typeof(int));
     var messageMetadata = defaultMessageRegistry.GetMessageDefinition(typeof (int));
     Assert.AreEqual(typeof(int),messageMetadata.MessageType);
 }
コード例 #7
0
 public SerializeConnector(
     SerializationMapper serializationMapper,
     MessageMetadataRegistry messageMetadataRegistry)
 {
     this.serializationMapper     = serializationMapper;
     this.messageMetadataRegistry = messageMetadataRegistry;
 }
コード例 #8
0
        public MultiDeserializer(Configure config, Conventions conventions, IMessageSerializer defaultSerializer,
                                 IMessageMapper mapper,
                                 LogicalMessageFactory logicalMessageFactory, MessageMetadataRegistry metadataRegistry)
        {
            _defaultSerializer     = defaultSerializer;
            _logicalMessageFactory = logicalMessageFactory;
            _metadataRegistry      = metadataRegistry;

            var json = new JsonMessageSerializer(mapper);

            serializers.Add(json.ContentType, json);

            var bson = new BsonMessageSerializer(mapper);

            serializers.Add(bson.ContentType, bson);

            var binary = new BinaryMessageSerializer();

            serializers.Add(binary.ContentType, binary);

            var         xml          = new XmlMessageSerializer(mapper, conventions);
            List <Type> messageTypes = config.TypesToScan.Where(conventions.IsMessageType).ToList();

            xml.Initialize(messageTypes);
            serializers.Add(xml.ContentType, xml);

            if (!serializers.ContainsKey(_defaultSerializer.ContentType))
            {
                serializers.Add(_defaultSerializer.ContentType, _defaultSerializer);
            }
        }
コード例 #9
0
 public void Should_return_metadata_for_a_mapped_type()
 {
     var defaultMessageRegistry = new MessageMetadataRegistry(false, new Conventions());
     defaultMessageRegistry.RegisterMessageType(typeof(int));
     var messageMetadata = defaultMessageRegistry.GetMessageMetadata(typeof(int));
     Assert.AreEqual(typeof(int), messageMetadata.MessageType);
     Assert.AreEqual(1, messageMetadata.MessageHierarchy.Count());
 }
コード例 #10
0
 public TopicCache(IAmazonSimpleNotificationService snsClient, MessageMetadataRegistry messageMetadataRegistry, TransportConfiguration configuration)
 {
     this.configuration           = configuration;
     this.messageMetadataRegistry = messageMetadataRegistry;
     this.snsClient = snsClient;
     CustomEventToTopicsMappings = configuration.CustomEventToTopicsMappings ?? new EventToTopicsMappings();
     CustomEventToEventsMappings = configuration.CustomEventToEventsMappings ?? new EventToEventsMappings();
 }
コード例 #11
0
            public void Should_return_metadata_for_a_mapped_type()
            {
                var defaultMessageRegistry = new MessageMetadataRegistry();

                defaultMessageRegistry.RegisterMessageType(typeof(int));
                var messageMetadata = defaultMessageRegistry.GetMessageDefinition(typeof(int));

                Assert.AreEqual(typeof(int), messageMetadata.MessageType);
            }
コード例 #12
0
 public void Setup()
 {
     metadataRegistry    = new MessageMetadataRegistry(new Conventions());
     endpointInstances   = new EndpointInstances();
     subscriptionStorage = new FakeSubscriptionStorage();
     router = new UnicastPublishRouter(
         metadataRegistry,
         subscriptionStorage);
 }
コード例 #13
0
 public DeserializeConnector(
     SerializationMapper serializationMapper,
     MessageMetadataRegistry messageMetadataRegistry,
     LogicalMessageFactory logicalMessageFactory)
 {
     this.serializationMapper     = serializationMapper;
     this.messageMetadataRegistry = messageMetadataRegistry;
     this.logicalMessageFactory   = logicalMessageFactory;
 }
コード例 #14
0
            public void Should_return_metadata_for_a_mapped_type()
            {
                var defaultMessageRegistry = new MessageMetadataRegistry(false, new Conventions());

                defaultMessageRegistry.RegisterMessageType(typeof(int));
                var messageMetadata = defaultMessageRegistry.GetMessageMetadata(typeof(int));

                Assert.AreEqual(typeof(int), messageMetadata.MessageType);
                Assert.AreEqual(1, messageMetadata.MessageHierarchy.Count());
            }
コード例 #15
0
 public void Setup()
 {
     metadataRegistry    = new MessageMetadataRegistry(_ => true);
     endpointInstances   = new EndpointInstances();
     subscriptionStorage = new FakeSubscriptionStorage();
     router = new UnicastPublishRouter(
         metadataRegistry,
         i => string.Empty,
         subscriptionStorage);
 }
コード例 #16
0
 public MigrationSubscribeTerminator(ISubscriptionManager subscriptionManager,
                                     MessageMetadataRegistry messageMetadataRegistry, SubscriptionRouter subscriptionRouter,
                                     IMessageDispatcher dispatcher, string subscriberAddress, string subscriberEndpoint)
 {
     this.subscriptionManager     = subscriptionManager;
     this.messageMetadataRegistry = messageMetadataRegistry;
     this.subscriptionRouter      = subscriptionRouter;
     this.dispatcher         = dispatcher;
     this.subscriberAddress  = subscriberAddress;
     this.subscriberEndpoint = subscriberEndpoint;
 }
コード例 #17
0
            public void Should_match_types_from_a_different_assembly(string typeName)
            {
                var defaultMessageRegistry = new MessageMetadataRegistry(new Conventions().IsMessageType);

                defaultMessageRegistry.RegisterMessageTypesFoundIn(new List <Type> {
                    typeof(MyEvent)
                });

                var messageMetadata = defaultMessageRegistry.GetMessageMetadata(typeName);

                Assert.AreEqual(typeof(MyEvent), messageMetadata.MessageHierarchy.ToList()[0]);
            }
コード例 #18
0
        static SendConnector InitializeBehavior(FakeRouter router = null)
        {
            var metadataRegistry = new MessageMetadataRegistry(new Conventions().IsMessageType);

            metadataRegistry.RegisterMessageTypesFoundIn(new List <Type>
            {
                typeof(MyMessage),
                typeof(MessageWithoutRouting)
            });

            return(new SendConnector(router ?? new FakeRouter()));
        }
コード例 #19
0
            public void Should_return_metadata_for_a_mapped_type()
            {
                var conventions = new Conventions();
                conventions.IsMessageTypeAction = type => type == typeof(int);

                var defaultMessageRegistry = new MessageMetadataRegistry(conventions);
                defaultMessageRegistry.RegisterMessageTypesFoundIn(new List<Type> { typeof(int) });

                var messageMetadata = defaultMessageRegistry.GetMessageMetadata(typeof(int));

                Assert.AreEqual(typeof(int), messageMetadata.MessageType);
                Assert.AreEqual(1, messageMetadata.MessageHierarchy.Count());
            }
コード例 #20
0
        static UnicastSendRouterConnector InitializeBehavior(
            string sharedQueue           = null,
            string instanceSpecificQueue = null,
            FakeSendRouter router        = null)
        {
            var metadataRegistry = new MessageMetadataRegistry(new Conventions());

            metadataRegistry.RegisterMessageTypesFoundIn(new List <Type> {
                typeof(MyMessage), typeof(MessageWithoutRouting)
            });

            return(new UnicastSendRouterConnector(sharedQueue, instanceSpecificQueue, router ?? new FakeSendRouter(), new DistributionPolicy(), e => e.ToString()));
        }
コード例 #21
0
            public void Should_return_metadata_for_a_mapped_type()
            {
                var defaultMessageRegistry = new MessageMetadataRegistry(type => type == typeof(int));

                defaultMessageRegistry.RegisterMessageTypesFoundIn(new List <Type> {
                    typeof(int)
                });

                var messageMetadata = defaultMessageRegistry.GetMessageMetadata(typeof(int));

                Assert.AreEqual(typeof(int), messageMetadata.MessageType);
                Assert.AreEqual(1, messageMetadata.MessageHierarchy.Count());
            }
コード例 #22
0
        static string SerializeEnclosedMessageTypes(MessageMetadataRegistry messageMeta, Type messageType)
        {
            var metadata = messageMeta.GetMessageMetadata(messageType);

            var assemblyQualifiedNames = new HashSet <string>();

            foreach (var type in metadata.MessageHierarchy)
            {
                assemblyQualifiedNames.Add(type.AssemblyQualifiedName);
            }

            return(string.Join(";", assemblyQualifiedNames));
        }
コード例 #23
0
 public EventSubscriber(MessageHandlerRegistry registry, IMessageMapper mapper,
                        MessageMetadataRegistry messageMeta, IEventStoreConnection[] connections, int concurrency)
 {
     _registry    = registry;
     _clients     = connections;
     _messageMeta = messageMeta;
     _concurrency = concurrency;
     _settings    = new JsonSerializerSettings
     {
         TypeNameHandling    = TypeNameHandling.Auto,
         SerializationBinder = new EventSerializationBinder(mapper),
         ContractResolver    = new EventContractResolver(mapper)
     };
 }
コード例 #24
0
        object[] Extract(TransportMessage m)
        {
            if (m.Body == null || m.Body.Length == 0)
            {
                return(new object[0]);
            }

            var messageMetadata = MessageMetadataRegistry.GetMessageTypes(m);

            using (var stream = new MemoryStream(m.Body))
            {
                return(MessageSerializer.Deserialize(stream, messageMetadata.Select(metadata => metadata.MessageType).ToList()));
            }
        }
コード例 #25
0
            public void Should_return_the_correct_parent_hierarchy()
            {
                var defaultMessageRegistry = new MessageMetadataRegistry();

                defaultMessageRegistry.RegisterMessageType(typeof(MyEvent));
                var messageMetadata = defaultMessageRegistry.GetMessageDefinition(typeof(MyEvent));

                Assert.AreEqual(5, messageMetadata.MessageHierarchy.Count());

                Assert.AreEqual(typeof(MyEvent), messageMetadata.MessageHierarchy.ToList()[0]);
                Assert.AreEqual(typeof(InterfaceParent1), messageMetadata.MessageHierarchy.ToList()[1]);
                Assert.AreEqual(typeof(ConcreteParent1), messageMetadata.MessageHierarchy.ToList()[2]);
                Assert.AreEqual(typeof(InterfaceParent1Base), messageMetadata.MessageHierarchy.ToList()[3]);
                Assert.AreEqual(typeof(ConcreteParentBase), messageMetadata.MessageHierarchy.ToList()[4]);
            }
コード例 #26
0
 public void SetUp()
 {
     consumer = new Consumer();
     registry = new MessageMetadataRegistry();
     headers  = new Dictionary <string, string> [120];
     for (var i = 0; i < 120; i++)
     {
         headers[i] = new Dictionary <string, string>
         {
             {
                 Headers.EnclosedMessageTypes,
                 $"Shipping.OrderAccepted{i}, Shared{i}, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XYZ;Shipping.IOrderAccepted{i}, Shared{i}, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XYZ;Shipping.IOrderStatusChanged{i}, Shared{i}, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XYZ"
             }
         };
     }
 }
コード例 #27
0
    Type[] BuildTypesPublishedWithInheritance(Type[] messageTypesPublished, MessageMetadataRegistry registry)
    {
        if (!messageTypesPublished.Any())
        {
            return(messageTypesPublished);
        }

        var publishedMessageTypes = new HashSet <Type>(messageTypesPublished);

        foreach (var t in messageTypesPublished)
        {
            publishedMessageTypes.UnionWith(registry.GetMessageMetadata(t).MessageHierarchy);
        }

        return(publishedMessageTypes.ToArray());
    }
コード例 #28
0
            public void Should_return_the_correct_parent_hierarchy()
            {
                var defaultMessageRegistry = new MessageMetadataRegistry(new Conventions());

                defaultMessageRegistry.RegisterMessageTypesFoundIn(new List<Type> { typeof(MyEvent) });
                var messageMetadata = defaultMessageRegistry.GetMessageMetadata(typeof(MyEvent));

                Assert.AreEqual(5, messageMetadata.MessageHierarchy.Count());

                Assert.AreEqual(typeof(MyEvent), messageMetadata.MessageHierarchy.ToList()[0]);
                Assert.AreEqual(typeof(InterfaceParent1), messageMetadata.MessageHierarchy.ToList()[1]);
                Assert.AreEqual(typeof(ConcreteParent1), messageMetadata.MessageHierarchy.ToList()[2]);
                Assert.AreEqual(typeof(InterfaceParent1Base), messageMetadata.MessageHierarchy.ToList()[3]);
                Assert.AreEqual(typeof(ConcreteParentBase), messageMetadata.MessageHierarchy.ToList()[4]);

            }
コード例 #29
0
        static void ConfigureMessageTypes(Conventions conventions, SettingsHolder settings)
        {
            var messageMetadataRegistry = new MessageMetadataRegistry(conventions.IsMessageType);

            messageMetadataRegistry.RegisterMessageTypesFoundIn(settings.GetAvailableTypes());

            settings.Set(messageMetadataRegistry);

            var foundMessages = messageMetadataRegistry.GetAllMessages().ToList();

            settings.AddStartupDiagnosticsSection("Messages", new
            {
                CustomConventionUsed           = conventions.CustomMessageTypeConventionUsed,
                NumberOfMessagesFoundAtStartup = foundMessages.Count,
                Messages = foundMessages.Select(m => m.MessageType.FullName)
            });
        }
コード例 #30
0
        public void Invoke(OutgoingContext context, Action next)
        {
            var deliveryOptions = context.DeliveryOptions;

            var toSend = new TransportMessage {
                MessageIntent = MessageIntentEnum.Publish
            };

            var sendOptions = deliveryOptions as SendOptions;


            if (sendOptions != null)
            {
                toSend.MessageIntent = sendOptions is ReplyOptions ? MessageIntentEnum.Reply : MessageIntentEnum.Send;

                if (sendOptions.CorrelationId != null)
                {
                    toSend.CorrelationId = sendOptions.CorrelationId;
                }
            }

            //apply static headers
            foreach (var kvp in UnicastBus.OutgoingHeaders)
            {
                toSend.Headers[kvp.Key] = kvp.Value;
            }

            //apply individual headers
            foreach (var kvp in context.OutgoingLogicalMessage.Headers)
            {
                toSend.Headers[kvp.Key] = kvp.Value;
            }

            if (context.OutgoingLogicalMessage.MessageType != null)
            {
                var messageDefinitions = MessageMetadataRegistry.GetMessageMetadata(context.OutgoingLogicalMessage.MessageType);

                toSend.TimeToBeReceived = messageDefinitions.TimeToBeReceived;
                toSend.Recoverable      = messageDefinitions.Recoverable;
            }

            context.Set(toSend);

            next();
        }
コード例 #31
0
        public async Task Should_set_content_type_header()
        {
            var registry = new MessageMetadataRegistry(new Conventions());

            registry.RegisterMessageTypesFoundIn(new List<Type>
            {
                typeof(MyMessage)
            });

            var context = new TestableOutgoingLogicalMessageContext();
            context.Message = new OutgoingLogicalMessage(typeof(MyMessage), new MyMessage());

            var behavior = new SerializeMessageConnector(new FakeSerializer("myContentType"), registry);

            await behavior.Invoke(context, c => TaskEx.CompletedTask);

            Assert.AreEqual("myContentType", context.Headers[Headers.ContentType]);
        }
コード例 #32
0
        public async Task Should_set_content_type_header()
        {
            var registry = new MessageMetadataRegistry(new Conventions().IsMessageType);

            registry.RegisterMessageTypesFoundIn(new List <Type>
            {
                typeof(MyMessage)
            });

            var context = new TestableOutgoingLogicalMessageContext();

            context.Message = new OutgoingLogicalMessage(typeof(MyMessage), new MyMessage());

            var behavior = new SerializeMessageConnector(new FakeSerializer("myContentType"), registry);

            await behavior.Invoke(context, c => Task.CompletedTask);

            Assert.AreEqual("myContentType", context.Headers[Headers.ContentType]);
        }
コード例 #33
0
        public EventSubscriber(MessageHandlerRegistry registry,
                               IEventStoreConnection connection, IMessageMapper mapper, MessageMetadataRegistry messageMeta)
        {
            _registry    = registry;
            _connection  = connection;
            _messageMeta = messageMeta;
            _settings    = new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.Auto,
                Binder           = new EventSerializationBinder(mapper),
                ContractResolver = new EventContractResolver(mapper)
            };

            _toBeAcknowledged = new ConcurrentBag <ResolvedEvent>();
            _acknowledger     = new Timer(_ =>
            {
                if (_toBeAcknowledged.IsEmpty)
                {
                    return;
                }

                var willAcknowledge = _toBeAcknowledged.ToList();
                var newBag          = new ConcurrentBag <ResolvedEvent>();
                Interlocked.Exchange <ConcurrentBag <ResolvedEvent> >(ref _toBeAcknowledged, newBag);

                if (!ProcessingLive)
                {
                    return;
                }

                Acknowledging.Update(willAcknowledge.Count);
                Logger.Write(LogLevel.Info, () => $"Acknowledging {willAcknowledge.Count} events");

                var page = 0;
                while (page < willAcknowledge.Count)
                {
                    var working = willAcknowledge.Skip(page).Take(1000);
                    _subscription.Acknowledge(working);
                    page += 1000;
                }
            }, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5));
        }
コード例 #34
0
        public void Invoke(SendLogicalMessagesContext context, Action next)
        {
            var sendOptions = context.SendOptions;

            var toSend = new TransportMessage
            {
                MessageIntent  = sendOptions.Intent,
                ReplyToAddress = sendOptions.ReplyToAddress
            };

            if (sendOptions.CorrelationId != null)
            {
                toSend.CorrelationId = sendOptions.CorrelationId;
            }

            //apply static headers
            foreach (var kvp in UnicastBus.OutgoingHeaders)
            {
                toSend.Headers[kvp.Key] = kvp.Value;
            }

            //apply individual headers
            foreach (var kvp in context.LogicalMessages.SelectMany(m => m.Headers))
            {
                toSend.Headers[kvp.Key] = kvp.Value;
            }

            var messageDefinitions = context.LogicalMessages.Select(m => MessageMetadataRegistry.GetMessageDefinition(m.MessageType)).ToList();

            toSend.TimeToBeReceived = messageDefinitions.Min(md => md.TimeToBeReceived);
            toSend.Recoverable      = messageDefinitions.Any(md => md.Recoverable);

            context.Set(toSend);

            PipelineExecutor.InvokeSendPipeline(sendOptions, toSend);

            next();
        }
コード例 #35
0
        // Moved event to error queue
        private static async Task PoisonEvent(MessageMetadataRegistry messageMeta, JsonSerializerSettings settings, RecordedEvent e)
        {
            var transportTransaction = new TransportTransaction();

            var descriptor = e.Metadata.Deserialize(settings);

            var messageId = Guid.NewGuid().ToString();
            var headers   = new Dictionary <string, string>(descriptor.Headers)
            {
                [Headers.MessageIntent]        = MessageIntentEnum.Send.ToString(),
                [Headers.EnclosedMessageTypes] = SerializeEnclosedMessageTypes(messageMeta, Type.GetType(e.EventType)),
                [Headers.MessageId]            = messageId,
                ["EventId"]       = e.EventId.ToString(),
                ["EventStreamId"] = e.EventStreamId,
                ["EventNumber"]   = e.EventNumber.ToString()
            };
            var ex           = new InvalidOperationException("Poisoned Event");
            var errorContext = new ErrorContext(ex, headers,
                                                messageId,
                                                e.Data ?? new byte[0], transportTransaction,
                                                int.MaxValue);
            await Bus.OnError(errorContext).ConfigureAwait(false);
        }
コード例 #36
0
        /// <summary>
        /// Wraps the provided messages in an NServiceBus envelope, does not include destination.
        /// Invokes message mutators.
        /// </summary>
        /// <param name="rawMessages">The messages to wrap.</param>
        /// <param name="result">The envelope in which the messages are placed.</param>
        /// <returns>The envelope containing the messages.</returns>
        void MapTransportMessageFor(IList <object> rawMessages, TransportMessage result)
        {
            if (!Configure.SendOnlyMode)
            {
                result.ReplyToAddress = Address.Local;

                if (PropagateReturnAddressOnSend && _messageBeingHandled != null && _messageBeingHandled.ReplyToAddress != null)
                {
                    result.ReplyToAddress = _messageBeingHandled.ReplyToAddress;
                }
            }

            var messages = ApplyOutgoingMessageMutatorsTo(rawMessages).ToArray();


            var messageDefinitions = rawMessages.Select(m => MessageMetadataRegistry.GetMessageDefinition(GetMessageType(m))).ToList();

            result.TimeToBeReceived = messageDefinitions.Min(md => md.TimeToBeReceived);
            result.Recoverable      = messageDefinitions.Any(md => md.Recoverable);

            SerializeMessages(result, messages);

            InvokeOutgoingTransportMessagesMutators(messages, result);
        }
コード例 #37
0
 public void Should_throw_an_exception_for_a_unmapped_type()
 {
     var defaultMessageRegistry = new MessageMetadataRegistry();
     var exception = Assert.Throws<Exception>(() => defaultMessageRegistry.GetMessageDefinition(typeof (int)));
     Assert.AreEqual("Could not find Metadata for 'System.Int32'. Messages need to implement either 'IMessage', 'IEvent' or 'ICommand'. Alternatively, if you don't want to implement an interface, you can configure 'Unobtrusive Mode Messages' and use convention to configure how messages are mapped.", exception.Message);
 }
コード例 #38
0
 /// <summary>
 /// Initializes a new instance of <see cref="LogicalMessageFactory" />.
 /// </summary>
 public LogicalMessageFactory(MessageMetadataRegistry messageMetadataRegistry, IMessageMapper messageMapper)
 {
     this.messageMetadataRegistry = messageMetadataRegistry;
     this.messageMapper = messageMapper;
 }
コード例 #39
0
ファイル: UnicastBus.cs プロジェクト: xqfgbc/NServiceBus
        void ConfigureMessageRegistry(FeatureConfigurationContext context, IEnumerable<Type> knownMessages)
        {
            var messageRegistry = new MessageMetadataRegistry(!DurableMessagesConfig.GetDurableMessagesEnabled(context.Settings), context.Settings.Get<Conventions>());

            foreach (var msg in knownMessages)
            {
                messageRegistry.RegisterMessageType(msg);
            }

            context.Container.RegisterSingleton(messageRegistry);
            context.Container.ConfigureComponent<LogicalMessageFactory>(DependencyLifecycle.SingleInstance);

            if (!Logger.IsInfoEnabled)
            {
                return;
            }

            var messageDefinitions = messageRegistry.GetAllMessages().ToList();

            Logger.InfoFormat("Number of messages found: {0}", messageDefinitions.Count());

            if (!Logger.IsDebugEnabled)
            {
                return;
            }

            Logger.DebugFormat("Message definitions: \n {0}",
                string.Concat(messageDefinitions.Select(md => md.ToString() + "\n")));
        }
コード例 #40
0
 public void Should_throw_an_exception_for_a_unmapped_type()
 {
     var defaultMessageRegistry = new MessageMetadataRegistry(new Conventions());
     Assert.Throws<Exception>(() => defaultMessageRegistry.GetMessageMetadata(typeof(int)));
 }
コード例 #41
0
 public void Setup()
 {
     metadataRegistry = new MessageMetadataRegistry(new Conventions());
     endpointInstances = new EndpointInstances();
     subscriptionStorage = new FakeSubscriptionStorage();
     router = new UnicastPublishRouter(
         metadataRegistry,
         subscriptionStorage);
 }
コード例 #42
0
        static UnicastSendRouterConnector InitializeBehavior(
            string sharedQueue = null,
            string instanceSpecificQueue = null,
            FakeSendRouter router = null)
        {
            var metadataRegistry = new MessageMetadataRegistry(new Conventions());
            metadataRegistry.RegisterMessageTypesFoundIn(new List<Type> { typeof(MyMessage), typeof(MessageWithoutRouting) });

            return new UnicastSendRouterConnector(sharedQueue, instanceSpecificQueue, null, router ?? new FakeSendRouter(), new DistributionPolicy(), e => e.ToString());
        }
コード例 #43
0
 public UnicastPublishRouter(MessageMetadataRegistry messageMetadataRegistry, ISubscriptionStorage subscriptionStorage)
 {
     this.messageMetadataRegistry = messageMetadataRegistry;
     this.subscriptionStorage = subscriptionStorage;
 }