Esempio n. 1
0
        // Agent created
        public void AddAgent(string agentId, EndpointConnectionInfo info)
        {
            // all public functions should have locks since we concurrent access
            lock (lockObj)
            {
                using (Trace.Log($"agentId: {agentId}, info: {info}"))
                {
                    if (agents.ContainsKey(agentId))
                    {
                        return;
                    }

                    var agent = new AgentInfo()
                    {
                        id    = agentId,
                        jobId = null,
                        info  = info,
                    };
                    agents[agentId] = agent;

                    if (!AssignAgentAsLoopback(agentId))
                    {
                        unassignedAgents.Add(agentId);
                        UpdateAllocations();
                    }
                }
            }
        }
Esempio n. 2
0
        void MultiInstance(BusConfiguration busConfiguration)
        {
            #region sqlserver-multiinstance-upgrade [2.1,3.0)

            var transport = busConfiguration.UseTransport <SqlServerTransport>();
            // Option 1
            transport
            .UseSpecificConnectionInformation(
                EndpointConnectionInfo.For("RemoteEndpoint")
                .UseConnectionString("SomeConnectionString"),
                EndpointConnectionInfo.For("AnotherEndpoint")
                .UseConnectionString("SomeOtherConnectionString"));

            // Option 2
            transport
            .UseSpecificConnectionInformation(x =>
            {
                if (x == "RemoteEndpoint")
                {
                    var connectionInfo = ConnectionInfo.Create();
                    return(connectionInfo.UseConnectionString("SomeConnectionString"));
                }
                if (x == "AnotherEndpoint")
                {
                    var connectionInfo = ConnectionInfo.Create();
                    return(connectionInfo.UseConnectionString("SomeOtherConnectionString"));
                }
                return(null);
            });

            #endregion
        }
Esempio n. 3
0
    static void Main()
    {
        Console.Title = "Samples.SqlServer.StoreAndForwardReceiver";
        var busConfiguration = new BusConfiguration();

        busConfiguration.EndpointName("Samples.SqlServer.StoreAndForwardReceiver");

        #region ReceiverConfiguration

        var transport = busConfiguration.UseTransport <SqlServerTransport>();
        var receiver  = @"Data Source=.\SqlExpress;Database=NsbSamplesStoreAndForwardReceiver;Integrated Security=True";
        transport.ConnectionString(receiver);
        var sender         = @"Data Source=.\SqlExpress;Database=NsbSamplesStoreAndForwardSender;Integrated Security=True";
        var connectionInfo = EndpointConnectionInfo.For("Samples.SqlServer.StoreAndForwardSender")
                             .UseConnectionString(sender);
        transport.UseSpecificConnectionInformation(connectionInfo);

        busConfiguration.UsePersistence <InMemoryPersistence>();

        #endregion

        busConfiguration.DisableFeature <SecondLevelRetries>();
        SqlHelper.EnsureDatabaseExists(receiver);

        using (Bus.Create(busConfiguration).Start())
        {
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
    }
Esempio n. 4
0
 public override Endpoint CreateEndpoint(EndpointConnectionInfo info)
 {
     using (Trace.Log())
     {
         return(new Agent(dispatcher, info));
     }
 }
Esempio n. 5
0
        public AgentConnection(Distributed.Dispatcher dispatcher, EndpointConnectionInfo info)
        {
            using (Trace.Log())
            {
                connection = new HubConnection($"http://{info.signalrUrl}/", dispatcher.Identifier, dispatcher.SignalrUrl, dispatcher.WebUrl, "DispatcherHub");
                connection.StateChanged += s =>
                {
                    currentState = s.NewState;
                    StateChanged?.Invoke(s);

                    if (currentState == ConnectionState.Disconnected)
                    {
                        if (s.OldState == ConnectionState.Connecting)
                        {
                            if (retryCount++ > MaxRetryCount)
                            {
                                connection.Stop();
                                dispatcher.ReleaseAgent(info.name);
                            }
                        }

                        if (disposed)
                        {
                            stopped.Set();
                        }
                    }
                };
                connection.Proxy.On <string, bool>("SetAgentState", (id, active) => SetAgentState?.Invoke(id, active));
                connection.Proxy.On <TaskItem, TaskResult>("CompleteTask", (taskItem, taskResult) => TaskCompleted?.Invoke(taskItem, taskResult));
            }
        }
Esempio n. 6
0
 private void OnDispatcherRemoveAgent(string dispatcherId, EndpointConnectionInfo agentInfo)
 {
     using (Trace.Log())
     {
         DispatcherConnections[dispatcherId].EndpointRemoved(agentInfo.name);
     }
 }
Esempio n. 7
0
        public void Config_file_connection_string_convention_has_precedence_over_code_configured_endpoint_connection_info()
        {
            var busConfig = new BusConfiguration();

            busConfig.UseTransport <SqlServerTransport>().UseSpecificConnectionInformation(
                EndpointConnectionInfo.For("Endpoint1").UseConnectionString("Source=Code").UseSchema("CodeSchema"),
                EndpointConnectionInfo.For("Endpoint2").UseConnectionString("Source=Code").UseSchema("CodeSchema"));

            var connectionConfig = new ConnectionConfig(new List <ConnectionStringSettings>()
            {
                new ConnectionStringSettings("NServiceBus/Transport/Endpoint1", "Source=Config; Queue Schema=ConfigSchema")
            });

            var builder            = Activate(busConfig, connectionConfig);
            var connectionProvider = builder.Build <IConnectionStringProvider>();

            //Config
            var connectionParams = connectionProvider.GetForDestination(Address.Parse("Endpoint1"));

            Assert.IsTrue("Source=Config".Equals(connectionParams.ConnectionString, StringComparison.InvariantCultureIgnoreCase));
            Assert.AreEqual("ConfigSchema", connectionParams.Schema);

            //Fallback - code
            connectionParams = connectionProvider.GetForDestination(Address.Parse("Endpoint2"));
            Assert.IsTrue("Source=Code".Equals(connectionParams.ConnectionString, StringComparison.InvariantCultureIgnoreCase));
            Assert.AreEqual("CodeSchema", connectionParams.Schema);
        }
Esempio n. 8
0
    static void Main()
    {
        Console.Title = "Samples.SQLNHibernateOutboxEF.Sender";
        const string letters = "ABCDEFGHIJKLMNOPQRSTUVXYZ";
        var          random  = new Random();

        var hibernateConfig = new Configuration();

        hibernateConfig.DataBaseIntegration(
            dataBaseIntegration: configurationProperties =>
        {
            configurationProperties.ConnectionStringName = "NServiceBus/Persistence";
            configurationProperties.Dialect <MsSql2012Dialect>();
        });

        hibernateConfig.SetProperty("default_schema", "sender");

        var busConfiguration = new BusConfiguration();

        busConfiguration.UseSerialization <JsonSerializer>();
        busConfiguration.EndpointName("Samples.SQLNHibernateOutboxEF.Sender");

        #region SenderConfiguration

        var transport      = busConfiguration.UseTransport <SqlServerTransport>();
        var connectionInfo = EndpointConnectionInfo.For("Samples.SQLNHibernateOutboxEF.Receiver")
                             .UseSchema("receiver");
        transport.UseSpecificConnectionInformation(connectionInfo);
        transport.DefaultSchema("sender");

        busConfiguration.UsePersistence <NHibernatePersistence>();

        busConfiguration.EnableOutbox();

        #endregion

        using (var bus = Bus.Create(busConfiguration).Start())
        {
            Console.WriteLine("Press enter to send a message");
            Console.WriteLine("Press any key to exit");

            while (true)
            {
                var key = Console.ReadKey();
                Console.WriteLine();

                if (key.Key != ConsoleKey.Enter)
                {
                    return;
                }
                var orderId        = new string(Enumerable.Range(0, 4).Select(x => letters[random.Next(letters.Length)]).ToArray());
                var orderSubmitted = new OrderSubmitted
                {
                    OrderId = orderId,
                    Value   = random.Next(100)
                };
                bus.Publish(orderSubmitted);
            }
        }
    }
Esempio n. 9
0
        CompositeConnectionStringProvider ConfigureConnectionStringProvider(FeatureConfigurationContext context, LocalConnectionParams localConnectionParams)
        {
            const string transportConnectionStringPrefix = "NServiceBus/Transport/";
            var          configConnectionStrings         =
                connectionStrings
                .Where(x => x.Name.StartsWith(transportConnectionStringPrefix))
                .Select(x =>
            {
                string schema;
                var connectionString = x.ConnectionString.ExtractSchemaName(out schema);
                var endpoint         = x.Name.Replace(transportConnectionStringPrefix, String.Empty);
                return(EndpointConnectionInfo.For(endpoint).UseConnectionString(connectionString).UseSchema(schema));
            });

            var configProvidedPerEndpointConnectionStrings           = new CollectionConnectionStringProvider(configConnectionStrings, localConnectionParams);
            var programmaticallyProvidedPerEndpointConnectionStrings = CreateProgrammaticPerEndpointConnectionStringProvider(context, localConnectionParams);

            var connectionStringProvider = new CompositeConnectionStringProvider(
                configProvidedPerEndpointConnectionStrings,
                programmaticallyProvidedPerEndpointConnectionStrings,
                new DefaultConnectionStringProvider(localConnectionParams)
                );

            return(connectionStringProvider);
        }
Esempio n. 10
0
    static void Main()
    {
        Console.Title = "Samples.SQLOutboxStoreAndForward.Receiver";
        BusConfiguration busConfiguration = new BusConfiguration();

        busConfiguration.EndpointName("Samples.SQLOutboxStoreAndForward.Receiver");

        #region ReceiverConfiguration

        busConfiguration.UseTransport <SqlServerTransport>()
        .UseSpecificConnectionInformation(
            EndpointConnectionInfo.For("Samples.SQLOutboxStoreAndForward.Sender")
            .UseConnectionString(@"Data Source=.\SQLEXPRESS;Initial Catalog=sender;Integrated Security=True"));

        busConfiguration.UsePersistence <NHibernatePersistence>();
        busConfiguration.EnableOutbox();

        #endregion

        busConfiguration.DisableFeature <SecondLevelRetries>();

        using (Bus.Create(busConfiguration).Start())
        {
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
    }
Esempio n. 11
0
        IConnectionStringProvider CreateConfigPerEndpointConnectionStringProvider(LocalConnectionParams localConnectionParams)
        {
            const string transportConnectionStringPrefix = "NServiceBus/Transport/";
            var          configConnectionStrings         =
                connectionStrings
                .Where(x => x.Name.StartsWith(transportConnectionStringPrefix))
                .Select(x =>
            {
                string schema;
                var connectionString = x.ConnectionString.ExtractSchemaName(out schema);
                var endpoint         = x.Name.Replace(transportConnectionStringPrefix, String.Empty);
                var connectionInfo   = EndpointConnectionInfo.For(endpoint).UseSchema(schema);

                var localConnectionStringBuilder = new DbConnectionStringBuilder {
                    ConnectionString = localConnectionParams.ConnectionString
                };
                var overriddenConnectionStringBuilder = new DbConnectionStringBuilder {
                    ConnectionString = connectionString
                };

                if (!localConnectionStringBuilder.EquivalentTo(overriddenConnectionStringBuilder))
                {
                    connectionInfo = connectionInfo.UseConnectionString(connectionString);
                }
                return(connectionInfo);
            })
                .ToArray();

            return(new CollectionConnectionStringProvider(configConnectionStrings, localConnectionParams));
        }
Esempio n. 12
0
        static void Main(string[] args)
        {
            const string letters   = "ABCDEFGHIJKLMNOPQRSTUVXYZ";
            var          random    = new Random();
            var          busConfig = new BusConfiguration();

            #region SenderConfiguration
            busConfig.UseTransport <SqlServerTransport>().DefaultSchema("sender")
            .UseSpecificConnectionInformation(EndpointConnectionInfo.For("receiver").UseSchema("receiver"));
            busConfig.UsePersistence <NHibernatePersistence>();
            #endregion

            var bus = Bus.Create(busConfig).Start();
            while (true)
            {
                Console.WriteLine("Press <enter> to send a message");
                Console.ReadLine();

                var orderId = new String(Enumerable.Range(0, 4).Select(x => letters[random.Next(letters.Length)]).ToArray());
                bus.Publish(new OrderSubmitted()
                {
                    OrderId = orderId,
                    Value   = random.Next(100)
                });
            }
        }
 public void Configure(BusConfiguration busConfiguration)
 {
     busConfiguration.UseTransport <SqlServerTransport>()
     .UseSpecificConnectionInformation(
         EndpointConnectionInfo.For("UsingDifferentConnectionStringsForEachEndpoint.Sender").UseConnectionString("ToBeOverridenViaConfig").UseSchema("ToBeOverridenViaConfig"))
     .ConnectionString(ReceiverConnectionStringWithSchema);
 }
Esempio n. 14
0
    static void Main()
    {
        using (ReceiverDataContext ctx = new ReceiverDataContext())
        {
            ctx.Database.Initialize(true);
        }

        #region ReceiverConfiguration

        BusConfiguration busConfiguration = new BusConfiguration();
        busConfiguration.UseTransport <SqlServerTransport>().UseSpecificConnectionInformation(
            EndpointConnectionInfo.For("sender")
            .UseConnectionString(@"Data Source=.\SQLEXPRESS;Initial Catalog=sender;Integrated Security=True"));

        busConfiguration.UsePersistence <NHibernatePersistence>().RegisterManagedSessionInTheContainer();
        busConfiguration.EnableOutbox();

        #endregion

        using (Bus.Create(busConfiguration).Start())
        {
            Console.WriteLine("Press <enter> to exit");
            Console.ReadLine();
        }
    }
Esempio n. 15
0
        static void Main(string[] args)
        {
            #region NHibernate
            var hibernateConfig = new Configuration();
            hibernateConfig.DataBaseIntegration(x =>
            {
                x.ConnectionStringName = "NServiceBus/Persistence";
                x.Dialect <MsSql2012Dialect>();
            });
            var mapper = new ModelMapper();
            mapper.AddMapping <OrderMap>();
            hibernateConfig.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());
            SessionFactory = hibernateConfig.BuildSessionFactory();
            #endregion

            new SchemaExport(hibernateConfig).Execute(false, true, false);

            #region ReceiverConfiguration
            var busConfig = new BusConfiguration();
            busConfig.UseTransport <SqlServerTransport>().UseSpecificConnectionInformation(
                EndpointConnectionInfo.For("sender")
                .UseConnectionString(@"Data Source=.\SQLEXPRESS;Initial Catalog=sender;Integrated Security=True"));

            busConfig.UsePersistence <NHibernatePersistence>();
            busConfig.EnableOutbox();
            #endregion

            using (Bus.Create(busConfig).Start())
            {
                Console.WriteLine("Press <enter> to exit");
                Console.ReadLine();
            }
        }
Esempio n. 16
0
 public virtual Endpoint CreateEndpoint(EndpointConnectionInfo info)
 {
     using (Trace.Log($"{info}"))
     {
         return(new Endpoint(info));
     }
 }
Esempio n. 17
0
 private void OnAgentAdded(string agentId, string endpointData, EndpointConnectionInfo info)
 {
     using (Trace.Log())
     {
         agentAllocator.AddAgent(agentId, info);
     }
 }
Esempio n. 18
0
 private void OnDispatcherAdded(string dispatcherId, string connectionId, EndpointConnectionInfo info)
 {
     using (Trace.Log())
     {
         agentAllocator.AddDispatcher(dispatcherId, info);
     }
 }
Esempio n. 19
0
                public void Configure(BusConfiguration busConfiguration)
                {
                    busConfiguration.UseTransport <SqlServerTransport>()
                    .UseSpecificConnectionInformation(
                        EndpointConnectionInfo.For("Basic.Sender.WhenUsingDifferentConnectionStringsForEachEndpoint.SqlServerTransport").UseConnectionString("ToBeOverridenViaConfig").UseSchema("ToBeOverridenViaConfig"))
                    .ConnectionString(ReceiverConnectionStringWithSchema);

                    busConfiguration.Transactions().DisableDistributedTransactions();
                }
Esempio n. 20
0
        private void OnDispatcherAssignAgent(string dispatcherId, EndpointConnectionInfo agentInfo)
        {
            var connection = DispatcherConnections[dispatcherId];

            using (Trace.Log($"{connection}[{dispatcherId}].EndpointAdded({agentInfo})"))
            {
                connection.EndpointAdded(agentInfo);
            }
        }
 public Sender()
 {
     EndpointSetup <DefaultServer>(x => x
                                   .UseTransport <SqlServerTransport>()
                                   .DefaultSchema("sender")
                                   .UseSpecificConnectionInformation(
                                       EndpointConnectionInfo.For("UsingNonStandardSchema.Receiver").UseSchema("receiver")
                                       ))
     .AddMapping <MyMessage>(typeof(Receiver));
 }
Esempio n. 22
0
    static void Main()
    {
        const string     letters          = "ABCDEFGHIJKLMNOPQRSTUVXYZ";
        Random           random           = new Random();
        BusConfiguration busConfiguration = new BusConfiguration();

        busConfiguration.EnableInstallers();
        Configuration hibernateConfig = new Configuration();

        hibernateConfig.DataBaseIntegration(x =>
        {
            x.ConnectionStringName = "NServiceBus/Persistence";
            x.Dialect <MsSql2012Dialect>();
        });
        hibernateConfig.SetProperty("default_schema", "sender");

        #region SenderConfiguration

        busConfiguration.UseTransport <SqlServerTransport>()
        .DefaultSchema("sender")
        .UseSpecificConnectionInformation(
            EndpointConnectionInfo.For("receiver")
            .UseSchema("receiver"));
        busConfiguration.UsePersistence <NHibernatePersistence>()
        .UseConfiguration(hibernateConfig);

        #endregion

        using (IBus bus = Bus.Create(busConfiguration).Start())
        {
            Console.WriteLine("Press enter to send a message");
            Console.WriteLine("Press any key to exit");

            while (true)
            {
                ConsoleKeyInfo key = Console.ReadKey();
                Console.WriteLine();

                if (key.Key != ConsoleKey.Enter)
                {
                    return;
                }

                string orderId = new string(Enumerable.Range(0, 4).Select(x => letters[random.Next(letters.Length)]).ToArray());
                bus.Publish(new OrderSubmitted
                {
                    OrderId = orderId,
                    Value   = random.Next(100)
                });
            }
        }
    }
        public void OnConnect(string name, string connectionId, string signalrUrl, string webUrl)
        {
            if (Connections.Add(name, connectionId))
            {
                var info = new EndpointConnectionInfo(name, signalrUrl, webUrl);
                lock (Endpoints)
                {
                    Endpoints[name] = info;
                }

                EndpointAdded?.Invoke(name, connectionId, info);
            }
        }
        public void When_multi_db_via_code_it_fails_to_start()
        {
            var context = new Context();

            Scenario.Define(context)
            .WithEndpoint <Receiver>(b => b.CustomConfig(c => c.UseTransport <SqlServerTransport>().UseSpecificConnectionInformation(
                                                             EndpointConnectionInfo.For("A").UseConnectionString(OtherDatabaseConnectionString)
                                                             )))
            .AllowExceptions()
            .Done(c => true)
            .Run();

            StringAssert.Contains(ExceptionText, context.Exceptions);
        }
        void OtherEndpointConnectionParamsPush(BusConfiguration busConfiguration)
        {
            #region sqlserver-singledb-multidb-push [2.1,2.0]

            busConfiguration.UseTransport <SqlServerTransport>()
            .UseSpecificConnectionInformation(
                EndpointConnectionInfo.For("AnotherEndpoint")
                .UseSchema("receiver1"),
                EndpointConnectionInfo.For("YetAnotherEndpoint")
                .UseSchema("receiver2")
                );

            #endregion
        }
Esempio n. 26
0
    void ConfigureCustomSchemaForEndpoint(BusConfiguration busConfiguration)
    {
        #region sqlserver-multischema-config-push

        var transport = busConfiguration.UseTransport <SqlServerTransport>();
        transport.UseSpecificConnectionInformation(
            EndpointConnectionInfo.For("sales")
            .UseSchema("sender"),
            EndpointConnectionInfo.For("billing")
            .UseSchema("receiver")
            );

        #endregion
    }
Esempio n. 27
0
    void ConfigureCustomSchemaForEndpointAndQueue(BusConfiguration busConfiguration)
    {
        #region sqlserver-multischema-config-for-endpoint-and-queue

        var transport = busConfiguration.UseTransport <SqlServerTransport>();
        transport.UseSpecificConnectionInformation(
            EndpointConnectionInfo.For("sales")
            .UseSchema("sender"),
            EndpointConnectionInfo.For("error")
            .UseSchema("control")
            );

        #endregion
    }
Esempio n. 28
0
        void RedirectAuditAndError(BusConfiguration busConfiguration)
        {
            #region sqlserver-multidb-redirect-audit-error 2.1

            busConfiguration.UseTransport <SqlServerTransport>()
            .UseSpecificConnectionInformation(
                EndpointConnectionInfo.For("error")
                .UseConnectionString("ServiceControl connection string"),
                EndpointConnectionInfo.For("audit")
                .UseConnectionString("ServiceControl connection string")
                );

            #endregion
        }
    void OtherEndpointConnectionParamsPush(BusConfiguration busConfiguration)
    {
        #region sqlserver-multischema-config-push [2.1,3.0)

        var transport = busConfiguration.UseTransport <SqlServerTransport>();
        transport.UseSpecificConnectionInformation(
            EndpointConnectionInfo.For("sales")
            .UseSchema("sender"),
            EndpointConnectionInfo.For("billing")
            .UseSchema("receiver")
            );

        #endregion
    }
        public void When_multi_schema_via_code_it_starts()
        {
            var context = new Context();

            Scenario.Define(context)
            .WithEndpoint <Receiver>(b => b.CustomConfig(c => c.UseTransport <SqlServerTransport>().UseSpecificConnectionInformation(
                                                             EndpointConnectionInfo.For("A").UseSchema("A"),
                                                             EndpointConnectionInfo.For("B").UseSchema("B")
                                                             )))
            .Done(c => true)
            .Run();

            Assert.IsNull(context.Exceptions);
        }