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); }
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); }
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); }
public MessageTopicRouter(IMessageTypeToTopicProvider messageTypeToTopicProvider) { _messageTypeToTopicProvider = messageTypeToTopicProvider; }
/// <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); }