Exemplo n.º 1
0
        public MessageDistributor(
            NsqBus bus,
            IObjectBuilder objectBuilder,
            ILogger logger,
            MessageHandlerMetadata messageHandlerMetadata
        )
        {
            if (bus == null)
                throw new ArgumentNullException("bus");
            if (objectBuilder == null)
                throw new ArgumentNullException("objectBuilder");
            if (logger == null)
                throw new ArgumentNullException("logger");
            if (messageHandlerMetadata == null)
                throw new ArgumentNullException("messageHandlerMetadata");

            _bus = bus;
            _objectBuilder = objectBuilder;
            _logger = logger;

            _serializer = messageHandlerMetadata.Serializer;
            _handlerType = messageHandlerMetadata.HandlerType;
            _messageType = messageHandlerMetadata.MessageType;
            _messageAuditor = messageHandlerMetadata.MessageAuditor;
            _topic = messageHandlerMetadata.Topic;
            _channel = messageHandlerMetadata.Channel;

            var possibleMethods = _handlerType.GetMethods().Where(p => p.Name == "Handle" && !p.IsGenericMethod);
            foreach (var possibleMethod in possibleMethods)
            {
                var parameters = possibleMethod.GetParameters();
                if (parameters.Length == 1 && parameters[0].ParameterType == _messageType)
                {
                    _handleMethod = possibleMethod;
                    break;
                }
            }

            if (_handleMethod == null)
                throw new Exception(string.Format("Handle({0}) not found on {1}", _messageType, _handlerType));

            if (!_messageType.IsInterface)
            {
                _concreteMessageType = _messageType;
            }
            else
            {
                _concreteMessageType = InterfaceBuilder.CreateType(_messageType);
            }
        }
Exemplo n.º 2
0
 public static void TryOnReceived(
     this IMessageAuditor messageAuditor,
     ILogger logger,
     IBus bus,
     MessageInformation messageInformation
     )
 {
     try
     {
         messageAuditor.OnReceived(bus, messageInformation);
     }
     catch (Exception ex)
     {
         logger.Output(LogLevel.Error, string.Format("messageAuditor.OnReceived - {0}", ex));
     }
 }
Exemplo n.º 3
0
        public MessageDistributor(
            NsqBus bus,
            IObjectBuilder objectBuilder,
            ILogger logger,
            MessageHandlerMetadata messageHandlerMetadata
            )
        {
            if (bus == null)
            {
                throw new ArgumentNullException("bus");
            }
            if (objectBuilder == null)
            {
                throw new ArgumentNullException("objectBuilder");
            }
            if (logger == null)
            {
                throw new ArgumentNullException("logger");
            }
            if (messageHandlerMetadata == null)
            {
                throw new ArgumentNullException("messageHandlerMetadata");
            }

            _bus           = bus;
            _objectBuilder = objectBuilder;
            _logger        = logger;

            _serializer     = messageHandlerMetadata.Serializer;
            _handlerType    = messageHandlerMetadata.HandlerType;
            _messageType    = messageHandlerMetadata.MessageType;
            _messageAuditor = messageHandlerMetadata.MessageAuditor;
            _topic          = messageHandlerMetadata.Topic;
            _channel        = messageHandlerMetadata.Channel;

            var possibleMethods = _handlerType.GetMethods().Where(p => p.Name == "Handle" && !p.IsGenericMethod);

            foreach (var possibleMethod in possibleMethods)
            {
                var parameters = possibleMethod.GetParameters();
                if (parameters.Length == 1 && parameters[0].ParameterType == _messageType)
                {
                    _handleMethod = possibleMethod;
                    break;
                }
            }

            if (_handleMethod == null)
            {
                throw new Exception(string.Format("Handle({0}) not found on {1}", _messageType, _handlerType));
            }

            if (!_messageType.IsInterface)
            {
                _concreteMessageType = _messageType;
            }
            else
            {
                _concreteMessageType = InterfaceBuilder.CreateType(_messageType);
            }
        }
 public CancelOrderMessageProcessor(IMessageAuditor auditor) : base(auditor)
 {
 }
Exemplo n.º 5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BusConfiguration"/> class.
        /// </summary>
        /// <param name="dependencyInjectionContainer">The DI container to use for this bus (required). See
        /// <see cref="StructureMapObjectBuilder"/> for a default implementation.</param>
        /// <param name="defaultMessageSerializer">The default message serializer/deserializer. See
        /// <see cref="NewtonsoftJsonSerializer" /> for a default implementation.</param>
        /// <param name="messageAuditor">The handler to call when a message fails to process.</param>
        /// <param name="messageTypeToTopicProvider">The message type to topic provider.</param>
        /// <param name="handlerTypeToChannelProvider">The handler type to channel provider.</param>
        /// <param name="defaultNsqLookupdHttpEndpoints">The default nsqlookupd HTTP endpoints; typically listening
        /// on port 4161.</param>
        /// <param name="defaultThreadsPerHandler">The default number of threads per message handler.</param>
        /// <param name="nsqConfig">The NSQ <see cref="Config"/> (optional).</param>
        /// <param name="busStateChangedHandler">Handle bus start and stop events (optional).</param>
        /// <param name="nsqLogger">The <see cref="ILogger"/> used by NsqSharp when communicating with nsqd/nsqlookupd.
        /// (default = <see cref="TraceLogger"/>).</param>
        /// <param name="preCreateTopicsAndChannels">Set to <c>true</c> to pre-create all registered topics and channels
        /// on the local nsqd instance listening on 127.0.0.1:4151; useful for self-contained clusters (default =
        /// <c>false</c>).</param>
        /// <param name="messageMutator">The message mutator used to modify a message before it's sent (optional).</param>
        /// <param name="messageTopicRouter">The message router used to specify custom message-to-topic routing logic; used
        /// to override <paramref name="messageTypeToTopicProvider"/> (optional).</param>
        /// <param name="nsqdPublisher">The implementation responsible for handling <see cref="M:IBus.Send"/> calls (optional;
        /// default = <see cref="NsqdTcpPublisher"/> using 127.0.0.1:4150 and the specified <paramref name="nsqLogger"/>
        /// and <paramref name="nsqConfig"/>).</param>
        /// <param name="logOnProcessCrash"><c>true</c> to log <see cref="E:AppDomain.CurrentDomain.UnhandledException" /> using
        /// <paramref name="nsqLogger"/> (default = <c>true</c>).
        /// </param>
        public BusConfiguration(
            IObjectBuilder dependencyInjectionContainer,
            IMessageSerializer defaultMessageSerializer,
            IMessageAuditor messageAuditor,
            IMessageTypeToTopicProvider messageTypeToTopicProvider,
            IHandlerTypeToChannelProvider handlerTypeToChannelProvider,
            string[] defaultNsqLookupdHttpEndpoints,
            int defaultThreadsPerHandler,
            Config nsqConfig = null,
            IBusStateChangedHandler busStateChangedHandler = null,
            ILogger nsqLogger = null,
            bool preCreateTopicsAndChannels        = false,
            IMessageMutator messageMutator         = null,
            IMessageTopicRouter messageTopicRouter = null,
            INsqdPublisher nsqdPublisher           = null,
            bool logOnProcessCrash = true
            )
        {
            _nsqLogger = nsqLogger ?? new TraceLogger();
            if (logOnProcessCrash)
            {
                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            }

            if (dependencyInjectionContainer == null)
            {
                throw new ArgumentNullException("dependencyInjectionContainer");
            }
            if (defaultMessageSerializer == null)
            {
                throw new ArgumentNullException("defaultMessageSerializer");
            }
            if (messageAuditor == null)
            {
                throw new ArgumentNullException("messageAuditor");
            }
            if (messageTypeToTopicProvider == null)
            {
                throw new ArgumentNullException("messageTypeToTopicProvider");
            }
            if (handlerTypeToChannelProvider == null)
            {
                throw new ArgumentNullException("handlerTypeToChannelProvider");
            }
            if (defaultNsqLookupdHttpEndpoints == null)
            {
                throw new ArgumentNullException("defaultNsqLookupdHttpEndpoints");
            }
            if (defaultNsqLookupdHttpEndpoints.Length == 0)
            {
                throw new ArgumentNullException("defaultNsqLookupdHttpEndpoints", "must contain elements");
            }
            if (defaultThreadsPerHandler <= 0)
            {
                throw new ArgumentOutOfRangeException("defaultThreadsPerHandler", "must be > 0");
            }

            _topicChannelHandlers = new Dictionary <string, List <MessageHandlerMetadata> >();

            _messageTypeToTopicProvider   = messageTypeToTopicProvider;
            _handlerTypeToChannelProvider = handlerTypeToChannelProvider;

            _dependencyInjectionContainer = dependencyInjectionContainer;
            _defaultMessageSerializer     = defaultMessageSerializer;
            _messageAuditor = messageAuditor;
            _defaultNsqlookupdHttpEndpoints = defaultNsqLookupdHttpEndpoints;
            _nsqConfig = nsqConfig ?? new Config();
            _defaultThreadsPerHandler   = defaultThreadsPerHandler;
            _busStateChangedHandler     = busStateChangedHandler;
            _preCreateTopicsAndChannels = preCreateTopicsAndChannels;
            _messageMutator             = messageMutator;
            _messageTopicRouter         = messageTopicRouter;
            _nsqdPublisher = nsqdPublisher ?? new NsqdTcpPublisher("127.0.0.1:4150", _nsqLogger, _nsqConfig);

            var handlerTypes = _handlerTypeToChannelProvider.GetHandlerTypes();

            AddMessageHandlers(handlerTypes);
        }
 public MessageProcessor(IMessageAuditor auditor)
 {
     _auditor = auditor;
 }