Example #1
0
        public static void Start(
            IHandlerTypeToChannelProvider channelProvider,
            IBusStateChangedHandler busStateChangedHandler = null,
            IMessageTypeToTopicProvider topicProvider = null
        )
        {
            if (channelProvider == null)
                throw new ArgumentNullException("channelProvider");

            var config = new BusConfiguration(
                new StructureMapObjectBuilder(ObjectFactory.Container),
                new NewtonsoftJsonSerializer(typeof(JsonConvert).Assembly),
                new MessageAuditor(),
                topicProvider ?? new TopicProvider(),
                channelProvider,
                defaultThreadsPerHandler: 8,
                defaultNsqLookupdHttpEndpoints: new[] { "127.0.0.1:4161" },
                busStateChangedHandler: busStateChangedHandler,
                preCreateTopicsAndChannels: true,
                nsqConfig:
                    new NsqSharp.Config
                    {
                        BackoffStrategy = new FullJitterStrategy(),
                        //MaxRequeueDelay = TimeSpan.FromSeconds(0.1),
                        //MaxBackoffDuration = TimeSpan.FromSeconds(0.2)
                    }
            );

            BusService.Start(config);
        }
Example #2
0
        public static void Start(
            IHandlerTypeToChannelProvider channelProvider,
            IBusStateChangedHandler busStateChangedHandler = null,
            IMessageTypeToTopicProvider topicProvider      = null
            )
        {
            if (channelProvider == null)
            {
                throw new ArgumentNullException("channelProvider");
            }

            var config = new BusConfiguration(
                new StructureMapObjectBuilder(ObjectFactory.Container),
                new NewtonsoftJsonSerializer(typeof(JsonConvert).Assembly),
                new MessageAuditor(),
                topicProvider ?? new TopicProvider(),
                channelProvider,
                defaultThreadsPerHandler: 8,
                defaultNsqLookupdHttpEndpoints: new[] { "127.0.0.1:4161" },
                busStateChangedHandler: busStateChangedHandler,
                preCreateTopicsAndChannels: true,
                nsqConfig:
                new NsqSharp.Config
            {
                BackoffStrategy = new FullJitterStrategy(),
                //MaxRequeueDelay = TimeSpan.FromSeconds(0.1),
                //MaxBackoffDuration = TimeSpan.FromSeconds(0.2)
            }
                );

            BusService.Start(config);
        }
Example #3
0
        public NsqBus(
            Dictionary <string, List <MessageHandlerMetadata> > topicChannelHandlers,
            IObjectBuilder dependencyInjectionContainer,
            IMessageTypeToTopicProvider messageTypeToTopicProvider,
            IMessageSerializer sendMessageSerializer,
            ILogger nsqLogger,
            IMessageMutator messageMutator,
            IMessageTopicRouter messageTopicRouter,
            INsqdPublisher nsqdPublisher
            )
        {
            if (topicChannelHandlers == null)
            {
                throw new ArgumentNullException("topicChannelHandlers");
            }
            if (dependencyInjectionContainer == null)
            {
                throw new ArgumentNullException("dependencyInjectionContainer");
            }
            if (messageTypeToTopicProvider == null)
            {
                throw new ArgumentNullException("messageTypeToTopicProvider");
            }
            if (sendMessageSerializer == null)
            {
                throw new ArgumentNullException("sendMessageSerializer");
            }
            if (nsqdPublisher == null)
            {
                throw new ArgumentNullException("nsqdPublisher");
            }
            if (nsqLogger == null)
            {
                throw new ArgumentNullException("nsqLogger");
            }

            _topicChannelHandlers         = topicChannelHandlers;
            _dependencyInjectionContainer = dependencyInjectionContainer;
            _messageTypeToTopicProvider   = messageTypeToTopicProvider;
            _sendMessageSerializer        = sendMessageSerializer;
            _nsqLogger          = nsqLogger;
            _messageMutator     = messageMutator;
            _messageTopicRouter = messageTopicRouter;
            _nsqdPublisher      = nsqdPublisher;

            _dependencyInjectionContainer.Inject((IBus)this);
        }
Example #4
0
 public MessageTopicRouter(IMessageTypeToTopicProvider messageTypeToTopicProvider)
 {
     _messageTypeToTopicProvider = messageTypeToTopicProvider;
 }
Example #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);
        }