static IBusControl Build(IBusFactory factory, IBusConfiguration busConfiguration, IEnumerable <ValidationResult> validationResult)
        {
            if (LogContext.Current == null)
            {
                LogContext.ConfigureCurrentLogContext();
            }

            busConfiguration.HostConfiguration.LogContext = LogContext.Current;

            var result = BusConfigurationResult.CompileResults(validationResult);

            try
            {
                var busReceiveEndpointConfiguration = factory.CreateBusEndpointConfiguration(x => x.ConfigureConsumeTopology = false);

                var host = busConfiguration.HostConfiguration.Build();

                var bus = new MassTransitBus(host, busConfiguration.BusObservers, busReceiveEndpointConfiguration);

                TaskUtil.Await(() => busConfiguration.BusObservers.PostCreate(bus));

                return(bus);
            }
            catch (Exception ex)
            {
                TaskUtil.Await(() => busConfiguration.BusObservers.CreateFaulted(ex));

                throw new ConfigurationException(result, "An exception occurred during bus creation", ex);
            }
        }
示例#2
0
        public static IBusConfiguration UseAspNetCore(this IBusConfiguration bc, IServiceCollection service)
        {
            bc.DependencyAdapter = new AspNetCoreDependencyAdapter(service);
            bc.SetBindings();

            return(bc);
        }
示例#3
0
 public BusManager(IBusConnection connection, IBusConfiguration config, ILogger <BusManager> logger = null)
 {
     _config     = config;
     _connection = connection;
     _logger     = logger;
     InitQueues();
 }
 /// <summary>
 /// Base class used to send and receive messages.
 /// </summary>
 /// <param name="configuration"></param>
 /// <param name="configurationFactory"></param>
 public AzureSenderReceiverBase(IBusConfiguration configuration, IServiceBusConfigurationFactory configurationFactory) {
     Guard.ArgumentNotNull(configuration, "configuration");
     Guard.ArgumentNotNull(configurationFactory, "configurationFactory");
     this.configuration = configuration;
     this.configurationFactory = configurationFactory;
     EnsureTopic(configuration.TopicName, configuration.EnablePartitioning);
 }
示例#5
0
        public static IBus Create <TRegistry>(IBusConfiguration configuration) where TRegistry : Registry
        {
            var container = new Container((conf) => conf.AddRegistry(Activator.CreateInstance <TRegistry>()));

            container.Configure(conf => conf.For <IBusConfiguration>().Use(configuration));

            var self = new Peer(Guid.NewGuid(), configuration.PeerName, configuration.Endpoint);

            container.Configure(conf => conf.For <IPeer>().Use(self));

            var peerDirectoryDescriptor = new Peer(Guid.NewGuid(), "PeerDirectory", configuration.DirectoryEndpoint);

            var bus = new Bus(container, self, peerDirectoryDescriptor);

            container.Configure(conf => conf.For <IBus>().Use(bus));

            if (configuration.IsPeerDirectory)
            {
                var peerDirectory = new PeerDirectory(bus);
                container.Configure(conf => conf.For <IPeerDirectory>().Use(peerDirectory));
                bus.Register <PeerRegisterCommand>(peerDirectory);
                bus.Register <PeerUpdatedEvent>(peerDirectory);
            }

            bus.Start();

            return(bus);
        }
示例#6
0
        private IBusControl CreateBusUsingAzureServiceBus(
            IComponentContext context,
            IBusConfiguration configuration)
        {
            return(Bus.Factory.CreateUsingAzureServiceBus(b =>
            {
                var uri = configuration.BusUri;
                uri = ServiceBusEnvironment.CreateServiceUri("sb", uri.Host, "");

                var host = b.Host(uri, h =>
                {
                    h.SharedAccessSignature(s =>
                    {
                        s.KeyName = configuration.BusSecretName;
                        s.SharedAccessKey = configuration.BusSecret;
                        s.TokenTimeToLive = TimeSpan.FromDays(1);
                        s.TokenScope = TokenScope.Namespace;
                    });
                });

                b.ReceiveEndpoint(host, configuration.BusQueue, r =>
                {
                    r.LoadFrom(context); // All registered consumers
                });

                b.ReceiveEndpoint(host, configuration.BusQueue + "_error", r =>
                {
                    r.Consumer <ErrorConsumer>();
                });

                b.UseRetry(r => r.None());
            }));
        }
示例#7
0
        /// <summary>
        /// Configure the input queue for send bus
        /// </summary>
        /// <param name="configuration">Configuration to modify</param>
        /// <param name="messageTypes">Messages that can be published</param>
        /// <param name="region">Amazon Region the topic is in</param>
        /// <returns>Modified configuration</returns>
        public static IConfigureEventPublishing PublishingMessages(this IBusConfiguration configuration, IEnumerable <Type> messageTypes, RegionEndpoint region)
        {
            if (messageTypes == null || !messageTypes.Any())
            {
                throw new JungleBusConfigurationException("messageTypes", "Cannot have a blank publish queue name");
            }

            if (region == null)
            {
                throw new JungleBusConfigurationException("region", "Region cannot be null");
            }

            if (configuration == null)
            {
                throw new JungleBusConfigurationException("configuration", "Configuration cannot be null");
            }

            if (configuration.Send != null)
            {
                throw new JungleBusConfigurationException("PublishingMessages", "PublishingMessages is already configured");
            }

            configuration.Send = new SendConfiguration();
            configuration.Send.MessagePublisher = new AwsMessagePublisher(new SnsClient(region, configuration.SubscriptionFormatter), configuration.MessageLogger);
            configuration.Send.MessagePublisher.SetupMessagesForPublishing(messageTypes);

            return(configuration as IConfigureEventPublishing);
        }
示例#8
0
        private IBusControl CreateBusUsingRabbitMq(
            IComponentContext context,
            IBusConfiguration configuration)
        {
            return(Bus.Factory.CreateUsingRabbitMq(b =>
            {
                var uri = configuration.BusUri;
                uri = new UriBuilder(RabbitMqScheme, uri.Host, uri.Port, uri.AbsolutePath).Uri;

                var host = b.Host(uri, h =>
                {
                    h.Username(configuration.BusSecretName);
                    h.Password(configuration.BusSecret);
                });

                b.ReceiveEndpoint(host, configuration.BusQueue, r =>
                {
                    r.Durable = true;       // Queue should survive broker restart
                    r.AutoDelete = false;   // Queue should survive service restart
                    r.LoadFrom(context);    // All registered consumers
                });

                b.ReceiveEndpoint(host, configuration.BusQueue + "_error", r =>
                {
                    r.BindMessageExchanges = false; // binding not required to get messages into queue
                    r.PurgeOnStartup = true;        // we discard them anyway
                    r.Consumer <ErrorConsumer>();
                });

                b.UseRetry(r => r.None());
            }));
        }
示例#9
0
 public AzureBusSender(IBusConfiguration configuration, IServiceBusConfigurationFactory configurationFactory)
     : base(configuration, configurationFactory)
 {
     retryPolicy.ExecuteAction(() => {
         defaultClient = configurationFactory.MessageFactory.CreateTopicClient(defaultTopic.Path);
     });
 }
示例#10
0
        public EasyConnection(IBusConfiguration config)
        {
            _config = config;
            _serializationStrategy = config.DataSerializationStrategy;

            _clientId = Guid.NewGuid();
        }
示例#11
0
 public void OnBusStarted(IBusConfiguration config, IBus bus)
 {
     // throw the ball!
     bus.Send(new PongMessage {
         Message = "Hey, Catch!"
     });
 }
示例#12
0
        public PeerDirectoryClient(IBusConfiguration configuration)
        {
            _configuration = configuration;

            _messagesReceivedDuringRegister = new BlockingCollection <IEvent>();
            _messagesReceivedDuringRegister.CompleteAdding();
        }
        /// <summary>
        /// Configure the input queue for receive bus
        /// </summary>
        /// <param name="configuration">Configuration to modify</param>
        /// <param name="sqsName">SQS queue name</param>
        /// <param name="region">Amazon Region the queue is in</param>
        /// <returns>Modified configuration</returns>
        public static IConfigureEventReceiving SetInputQueue(this IBusConfiguration configuration, string sqsName, RegionEndpoint region)
        {
            if (string.IsNullOrWhiteSpace(sqsName))
            {
                throw new JungleBusConfigurationException("sqsName", "Cannot have a blank input queue name");
            }

            if (region == null)
            {
                throw new JungleBusConfigurationException("region", "Region cannot be null");
            }

            if (configuration == null)
            {
                throw new JungleBusConfigurationException("configuration", "Configuration cannot be null");
            }

            if (configuration.Receive == null)
            {
                configuration.Receive = new ReceiveConfiguration();
            }

            if (!string.IsNullOrWhiteSpace(configuration.BusName))
            {
                sqsName = string.Format("{0}_{1}", configuration.BusName, sqsName);
            }

            configuration.Receive.MessageRetryCount = 5;
            configuration.Receive.InputQueue        = new SqsQueue(region, sqsName, configuration.Receive.MessageRetryCount, new MessageParser(null));
            return(configuration as IConfigureEventReceiving);
        }
示例#14
0
        private static IBusControl CreateBusUsingAzureServiceBus(
            IBusRegistrationContext context,
            IBusConfiguration configuration)
        {
            const string UriDomain = ".servicebus.windows.net";

            return(MassTransit.Bus.Factory.CreateUsingAzureServiceBus(b =>
            {
                var uri = configuration.HostUri;
                uri = new UriBuilder(AzureServiceBusScheme, uri.Host + UriDomain).Uri;

                b.Host(uri, h =>
                {
                    h.SharedAccessSignature(s =>
                    {
                        s.KeyName = configuration.SecretName;
                        s.SharedAccessKey = configuration.Secret;
                        s.TokenTimeToLive = TimeSpan.FromDays(1);
                        s.TokenScope = TokenScope.Namespace;
                    });
                });

                b.ReceiveEndpoint(configuration.QueueName, r =>
                {
                    TuneForReportExecution(r);
                    r.ConfigureConsumers(context);
                });
            }));
        }
示例#15
0
        public IBus Start()
        {
            if (Logger == null || Logger is StartupLogger)
            {
                _busConfiguration = _busConfiguration.WithLogger <MSExtensionsLogging>();
            }
            if (DependencyInjector == null)
            {
                _busConfiguration = _busConfiguration.WithDependencyInjector <MSExtensionsDependencyInjection>();
            }
            if (Serializer == null)
            {
                _busConfiguration = _busConfiguration.WithSerializer <JSONSerializer>();
            }
            if (Transport == null)
            {
                _busConfiguration = _busConfiguration.WithTransport <InMemoryTransport>();
            }
            if (Persistence == null)
            {
                _busConfiguration = _busConfiguration.WithPersistence <InMemoryPersistence>();
            }

            return(new Bus(_busConfiguration).Start());
        }
示例#16
0
        /// <summary>
        /// Base class used to send and receive messages.
        /// </summary>
        /// <param name="configuration"></param>
        public ReceiverBase(IBusConfiguration configuration)
        {
            Guard.ArgumentNotNull(configuration, "configuration");
            this.configuration = configuration;

            configurationFactory = configuration.Container.Resolve<IServiceBusConfigurationFactory>();
            EnsureTopic(configuration.InboundTopicName);
        }
 public GenericServiceBusConfigurationFactory(IBusConfiguration configuration, IMessagingFactory messageFactory, INamespaceManager namespaceManager) {
     Guard.ArgumentNotNull(configuration, "configuration");
     Guard.ArgumentNotNull(messageFactory, "messageFactory");
     Guard.ArgumentNotNull(namespaceManager, "namespaceManager");
     this.configuration = configuration;
     this.MessageFactory = messageFactory;
     this.NamespaceManager = namespaceManager;
 }
 /// <summary>
 /// Base class used to send and receive messages.
 /// </summary>
 /// <param name="configuration"></param>
 /// <param name="configurationFactory"></param>
 public AzureSenderReceiverBase(IBusConfiguration configuration, IServiceBusConfigurationFactory configurationFactory)
 {
     Guard.ArgumentNotNull(configuration, "configuration");
     Guard.ArgumentNotNull(configurationFactory, "configurationFactory");
     this.configuration        = configuration;
     this.configurationFactory = configurationFactory;
     EnsureTopic(configuration.TopicName, configuration.EnablePartitioning);
 }
示例#19
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="config"></param>
 /// <param name="sender"></param>
 /// <param name="receiver"></param>
 public AzureBus(IBusConfiguration config, IAzureBusSender sender, IAzureBusReceiver receiver)
 {
     Guard.ArgumentNotNull(config, "config");
     Guard.ArgumentNotNull(sender, "sender");
     Guard.ArgumentNotNull(receiver, "receiver");
     this.config   = config;
     this.sender   = sender;
     this.receiver = receiver;
 }
示例#20
0
            public void OnBusStarted(IBusConfiguration config, IBus bus)
            {
#if DEBUG
                if (config.IsConsoleMode)
                {
                    bus.Send <GetProductsCommand>();
                }
#endif
            }
示例#21
0
 public void OnBusStarted(IBusConfiguration config, IBus bus)
 {
     #if DEBUG
     if (config.IsConsoleMode)
     {
         bus.Send<GetCustomersCommand>();
     }
     #endif
 }
        public ServiceBusTokenProvider(IBusConfiguration configuration) {
            Guard.ArgumentNotNull(configuration, "configuration");

            this.configuration = configuration;
            servicePath = string.Empty;
            if (!string.IsNullOrWhiteSpace(configuration.ServicePath)) {
                servicePath = configuration.ServicePath;
            }
        }
 public GenericServiceBusConfigurationFactory(IBusConfiguration configuration, IMessagingFactory messageFactory, INamespaceManager namespaceManager)
 {
     Guard.ArgumentNotNull(configuration, "configuration");
     Guard.ArgumentNotNull(messageFactory, "messageFactory");
     Guard.ArgumentNotNull(namespaceManager, "namespaceManager");
     this.configuration    = configuration;
     this.MessageFactory   = messageFactory;
     this.NamespaceManager = namespaceManager;
 }
示例#24
0
        public ConfigurationBusBuilder(IBusConfiguration configuration, IReceiveEndpointConfiguration busReceiveEndpointConfiguration,
                                       BusObservable busObservable)
        {
            _busEndpointSpecification = new ConfigurationReceiveEndpointSpecification(busReceiveEndpointConfiguration);
            _configuration            = configuration;
            _busEndpointConfiguration = busReceiveEndpointConfiguration;

            _busObservable = busObservable;
        }
        protected BusFactoryConfigurator(IBusConfiguration configuration, IEndpointConfiguration busEndpointConfiguration)
        {
            _configuration            = configuration;
            _busEndpointConfiguration = busEndpointConfiguration;

            BusObservable           = new BusObservable();
            _specifications         = new List <IBusFactorySpecification>();
            _endpointSpecifications = new List <IReceiveEndpointSpecification <IBusBuilder> >();
        }
示例#26
0
        private static IServiceProvider ConfigureServices(IBusConfiguration busConfiguration)
        {
            var services = new ServiceCollection()
                           .AddTransient <IAppService, AppService>()
                           .AddSingleton(busConfiguration);

            RabbitMq.Publish.IoC.Configure(services);

            return(services.BuildServiceProvider());
        }
        public BrokeredMessageReceiverServiceBusEndpointConfiguration(IBusConfiguration busConfiguration)
            : base(busConfiguration)
        {
            HostAddress  = busConfiguration.HostConfiguration.HostAddress;
            InputAddress = new Uri(busConfiguration.HostConfiguration.HostAddress, "no-queue-specified");

            var deadLetterPipe = Pipe.Execute <ReceiveContext>(context => throw new TransportException(context.InputAddress, "The message was not consumed"));

            Receive.DeadLetterConfigurator.UseDeadLetter(deadLetterPipe);
        }
        /// <summary>
        /// Configure the the bus to use log inbound and outbound messages
        /// </summary>
        /// <param name="configuration">Configuration to modify</param>
        /// <returns>Modified configuration</returns>
        public static IBusConfiguration EnableMessageLogging(this IBusConfiguration configuration)
        {
            if (configuration == null)
            {
                throw new JungleBusConfigurationException("configuration", "Configuration cannot be null");
            }

            configuration.MessageLogger = new MessageLogger();
            return(configuration);
        }
示例#29
0
        public PersistentTransport(IBusConfiguration configuration, ITransport innerTransport, IPeerDirectory peerDirectory)
        {
            _configuration = configuration;
            _isPersistent = configuration.IsPersistent;
            _innerTransport = innerTransport;
            _peerDirectory = peerDirectory;

            SetInitialPhase();

            _innerTransport.MessageReceived += OnTransportMessageReceived;
        }
示例#30
0
        public PersistentTransport(IBusConfiguration configuration, ITransport innerTransport, IPeerDirectory peerDirectory)
        {
            _configuration  = configuration;
            _isPersistent   = configuration.IsPersistent;
            _innerTransport = innerTransport;
            _peerDirectory  = peerDirectory;

            SetInitialPhase();

            _innerTransport.MessageReceived += OnTransportMessageReceived;
        }
示例#31
0
        protected EndpointConfiguration(IBusConfiguration busConfiguration, ITopologyConfiguration topology)
        {
            Topology = topology;

            Consume = new ConsumePipeConfiguration();
            Send    = new SendPipeConfiguration(busConfiguration.Send.Specification);
            Publish = new PublishPipeConfiguration(busConfiguration.Publish.Specification);
            Receive = new ReceivePipeConfiguration();

            Serialization = busConfiguration.Serialization.CreateSerializationConfiguration();
        }
示例#32
0
        public ServiceBusTokenProvider(IBusConfiguration configuration)
        {
            Guard.ArgumentNotNull(configuration, "configuration");

            this.configuration = configuration;
            servicePath        = string.Empty;
            if (!string.IsNullOrWhiteSpace(configuration.ServicePath))
            {
                servicePath = configuration.ServicePath;
            }
        }
        protected BusFactoryConfigurator(IBusConfiguration busConfiguration)
        {
            _busConfiguration = busConfiguration;

            busConfiguration.BusEndpointConfiguration.Consume.Configurator.AutoStart = false;

            if (LogContext.Current == null)
            {
                LogContext.ConfigureCurrentLogContext();
            }
        }
        /// <summary>
        /// Runs validation general to building a bus
        /// </summary>
        /// <param name="configuration">Configuration to validate</param>
        private static void RunGeneralConfigurationValidation(this IBusConfiguration configuration)
        {
            if (configuration == null)
            {
                throw new JungleBusConfigurationException("configuration", "Configuration cannot be null");
            }

            if (configuration.ObjectBuilder == null)
            {
                throw new JungleBusConfigurationException("ObjectBuilder", "Object builder has not been configured");
            }
        }
示例#35
0
        public Bus(IBusConfiguration cfg, ILogger <Bus> log, PullMessagesJob job)
        {
            this.cfg = cfg;
            this.log = log;
            this.job = job;

            using (var db = this.cfg.DbConnectionFactory.Open())
            {
                db.CreateTableIfNotExists <MessageRow>();
                db.CreateTableIfNotExists <MessageHandlerRow>();
            }
        }
示例#36
0
        protected BaseHostConfiguration(IBusConfiguration busConfiguration)
        {
            BusConfiguration = busConfiguration;
            _endpoints       = new List <TConfiguration>();

            _endpointObservable = new EndpointConfigurationObservable();

            _receiveObservers = new ReceiveObservable();
            _consumeObservers = new ConsumeObservable();
            _publishObservers = new PublishObservable();
            _sendObservers    = new SendObservable();
        }
示例#37
0
 public void OnBusStarted(IBusConfiguration config, IBus bus)
 {
     if (config.IsConsoleMode)
     {
         Task.Factory.StartNew(() =>
         {
             // uncomment to send lots of messages
             //for (int i = 0; i < 1000; i++)
             {
                 bus.Send<GetCustomersCommand>();
                 bus.Send<GetInvoicesCommand>();
                 bus.Send<GetProductsCommand>();
             }
         });
     }
 }
        public AzureReceiverHelper(TopicDescription topic, IServiceBusConfigurationFactory configurationFactory, IBusConfiguration config, IServiceBusSerializer serializer, RetryPolicy verifyRetryPolicy, RetryPolicy retryPolicy, ServiceBusEnpointData endpoint) {
            Guard.ArgumentNotNull(topic, "topic");
            Guard.ArgumentNotNull(configurationFactory, "configurationFactory");
            Guard.ArgumentNotNull(config, "config");
            Guard.ArgumentNotNull(serializer, "serializer");
            Guard.ArgumentNotNull(retryPolicy, "retryPolicy");
            Guard.ArgumentNotNull(endpoint, "endpoint");
            this.topic = topic;
            this.configurationFactory = configurationFactory;
            this.config = config;
            this.serializer = serializer;
            this.verifyRetryPolicy = verifyRetryPolicy;
            this.retryPolicy = retryPolicy;
            this.endpoint = endpoint;

            Configure(endpoint);
        }
        internal static void SubscribeOrUnsubscribeType(Action<string> logInfo, Type type, IBusConfiguration config, Action<ServiceBusEnpointData> callback) {
            Guard.ArgumentNotNull(type, "type");
            Guard.ArgumentNotNull(callback, "callback");

            logInfo(string.Format("SubscribeOrUnsubscribeType={0}", type.FullName));
            var interfaces = type.GetInterfaces()
                            .Where(i => i.IsGenericType && (i.GetGenericTypeDefinition() == typeof(IHandleMessages<>) || i.GetGenericTypeDefinition() == typeof(IHandleCompetingMessages<>)))
                            .ToList();

            if (interfaces.Count == 0) {
                throw new ApplicationException(string.Format("Type {0} does not implement IHandleMessages or IHandleCompetingMessages", type.FullName));
            }

            //for each interface we find, we need to register it with the bus.
            foreach (var foundInterface in interfaces) {

                var implementedMessageType = foundInterface.GetGenericArguments()[0];
                //due to the limits of 50 chars we will take the name and a MD5 for the name.
                var hashName = implementedMessageType.FullName + "|" + type.FullName;

                var hash = MD5Helper.CalculateMD5(hashName);
                var fullName = (IsCompetingHandler(foundInterface) ? "C_" : config.ServiceBusApplicationId + "_") + hash;

                var info = new ServiceBusEnpointData() {
                    AttributeData = type.GetCustomAttributes(typeof(MessageHandlerConfigurationAttribute), false).FirstOrDefault() as MessageHandlerConfigurationAttribute,
                    DeclaredType = type,
                    MessageType = implementedMessageType,
                    SubscriptionName = fullName,
                    ServiceType = foundInterface
                };

                if (!config.Container.IsRegistered(type)) {
                    if (info.IsReusable) {
                        config.Container.Register(type, type);
                    }
                    else {
                        config.Container.Register(type, type, true);
                    }
                }

                callback(info);
            }

            config.Container.Build();
        }
示例#40
0
 public BusFactory WithConfiguration(IBusConfiguration configuration, string environment)
 {
     _configuration = configuration;
     _environment = environment;
     return this;
 }
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="configuration">The configuration data</param>
 /// <param name="configurationFactory"></param>
 /// <param name="serializer"></param>
 public AzureBusReceiver(IBusConfiguration configuration, IServiceBusConfigurationFactory configurationFactory, IServiceBusSerializer serializer)
     : base(configuration, configurationFactory) {
     Guard.ArgumentNotNull(serializer, "serializer");
     this.serializer = serializer;
 }
示例#42
0
 protected MessageBus(IBusConfiguration<IMessagingConfiguration> configuration)
 {
     Configuration = configuration;
 }
示例#43
0
 public void OnBusStopping(IBusConfiguration config, IBus bus)
 {
 }
示例#44
0
 public void OnBusStopped(IBusConfiguration config)
 {
 }
示例#45
0
 public void OnBusStarting(IBusConfiguration config)
 {
 }
示例#46
0
 public ReceiverHelper(IBusConfiguration config, RetryPolicy retryPolicy, BusReceiverState data)
 {
     this.config = config;
     this.retryPolicy = retryPolicy;
     this.data = data;
 }
示例#47
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="configuration">The configuration data</param>
 public BusReceiver(IBusConfiguration configuration)
     : base(configuration)
 {
     Guard.ArgumentNotNull(configuration, "configuration");
 }
示例#48
0
 public void OnBusStarted(IBusConfiguration config, IBus bus)
 {
     // throw the ball!
     bus.Send(new PongMessage { Message = "Hey, Catch!" });
 }