public static RabbitFactoryBrokers RegisterBrokers(this List <object> _instances) { IServiceCollection services = _instances.First(c => (c is IServiceCollection)) as IServiceCollection; IConfiguration configuration = _instances.First(c => (c is IConfiguration)) as IConfiguration; var broker = new RabbitFactoryBrokers(); var servers = Collectkeys(configuration, "Servers"); if (servers.Count > 0) { foreach (var server in servers) { broker.AddServerFromConnectionString(server); } } else { Trace.WriteLine($"sample broker server : {ConnectionStringHelper.GenerateHelp(typeof(ServerBrokerConfiguration))}"); } var publishers = Collectkeys(configuration, "Publishers"); if (publishers.Count > 0) { foreach (var publisher in publishers) { broker.AddPublisherFromConnectionString(publisher); } } else { Trace.WriteLine($"sample broker publisher : {ConnectionStringHelper.GenerateHelp(typeof(BrokerPublishParameter))}"); } var subsribers = Collectkeys(configuration, "Subsribers"); if (subsribers.Count > 0) { foreach (var subsriber in subsribers) { broker.AddSubscriberFromConnectionString(subsriber); } } else { Trace.WriteLine($"sample broker subscriber : {ConnectionStringHelper.GenerateHelp(typeof(BrokerSubscriptionParameter))}"); } services.AddSingleton(typeof(IFactoryBroker), broker); _instances.Add(broker); return(broker); }
public void TestInitializer1() { IFactoryBroker brokers = new RabbitFactoryBrokers() .AddServerFromConnectionString("Name=serverLocal;Hostname=localhost;Port=5672;QosPrefetchCount=1;ConnectionTimeoutSeconds=50;ConnectionRetryIntervalSeconds=50;UserName=guest;Password=guest;MaxReplayCount=50;UseLogger=true;ManagementPort=15672;ConfigAllowed=true") .AddPublisherFromConnectionString("Name=publisherLog;ServerName=serverLocal;DeliveryMode=Persistent;DefaultRountingKey=logTechnical;ExchangeName=ExchangeLog;ExchangeType=DIRECT") .AddPublisherFromConnectionString("Name=AcknowledgeQueue;ServerName=serverLocal;DeliveryMode=Persistent;DefaultRountingKey=AcknowledgeQueue;ExchangeName=AcknowledgeAction;ExchangeType=DIRECT") .AddPublisherFromConnectionString("Name=DeadQueue;ServerName=serverLocal;DeliveryMode=Persistent;DefaultRountingKey=DeadQueue;ExchangeName=DeadAction;ExchangeType=DIRECT") .AddPublisherFromConnectionString("Name=Parent;ServerName=serverLocal;DeliveryMode=Persistent;DefaultRountingKey=ParentQueue;ExchangeName=ParentAction;ExchangeType=DIRECT") .AddSubscriberFromConnectionString("Name=subscriber1;ServerName=serverLocal;StorageQueueName=queue1;Durable=true;MaxParallelism=20;ExchangeName=ExchangeName1;ExchangeType=DIRECT") .AddSubscriberFromConnectionString("Name=subscriberAction;ServerName=serverLocal;StorageQueueName=subscriberActionQueue;Durable=true;MaxParallelism=20;ExchangeName=subscriberActionExchangeName;ExchangeType=DIRECT") .Initialize(); }
public void TestInitializer() { IFactoryBroker brokers = new RabbitFactoryBrokers() .AddServerFromConnectionString("Name=server1;Hostname=localhost;UserName=gael;Password=gael;Port=5672;UseLogger=true") .AddPublisherFromConnectionString("Name=publisher1;ServerName=server1;ExchangeType=DIRECT;ExchangeName=ech1;DefaultRountingKey=ech2") .AddSubscriberFromConnectionString("Name=subscriber37;ServerName = server1;ExchangeType=DIRECT;ExchangeName=ech1;StorageQueueName=ech2") .Initialize(); int count = 0; using (var subs = new SubscriptionInstances(brokers)) { Task callback(IBrokerContext ctx) { count++; Assert.AreEqual(ctx.Broker != null, true); Assert.AreEqual(ctx.Broker.Factory != null, true); Assert.AreEqual(ctx.Utf8Data != null, true); ctx.Commit(); //ctx.Reject(); return(Task.CompletedTask); } // Add a subscriber subs.AddSubscription("sub1", "subscriber37", callback); // push message in transaction var publisher = brokers.CreatePublisher("publisher1"); using (publisher.BeginTransaction()) { publisher.Publish(new { uui = Guid.NewGuid() }); publisher.Publish("ech2", new { uui = Guid.NewGuid() }, new { domain = "test" }); publisher.Commit(); } DateTime d = DateTime.Now.AddSeconds(10); while (DateTime.Now < d) { Thread.Yield(); } } Assert.AreEqual(count > 0, true); }
public void TestInitializerDirectShortcut() { IFactoryBroker brokers = new RabbitFactoryBrokers() .Add( new ServerBrokerConfiguration() { Name = "server1", Hostname = "localhost", UserName = "******", Password = "******", Port = 5672, UseLogger = true, } ) .AddDirect("server1", "publisher1", "subscriber1", "echange1", "queueDirect") .Initialize(); }
public void TestInitializer() { IFactoryBroker brokers = new RabbitFactoryBrokers() .Add( new ServerBrokerConfiguration() { Name = "server1", Hostname = "localhost", UserName = "******", Password = "******", Port = 5672, UseLogger = true, }) .Add( new BrokerPublishParameter() { Name = "publisher", ServerName = "server1", ExchangeType = ExchangeType.DIRECT, ExchangeName = "ech1", DefaultRountingKey = "ech2" }) .Add( new BrokerSubscriptionParameter() { Name = "subscriber", ServerName = "server1", ExchangeType = ExchangeType.DIRECT, ExchangeName = "ech1", StorageQueueName = "ech2", }.AddRoutingKeys("ech2") ); brokers.Initialize(); }
public void TestInitializer2() { IFactoryBroker brokers = new RabbitFactoryBrokers() .AddServerFromConnectionString("Name=server1;Hostname=localhost;UserName=guest;Password=guest;Port=5672;UseLogger=true") .AddPublisherFromConnectionString("Name=publisher1;ServerName=server1;ExchangeType=DIRECT;ExchangeName=ech1;DefaultRountingKey=ech2") .AddSubscriberFromConnectionString("Name=subscriber37;ServerName = server1;ExchangeType=DIRECT;ExchangeName=ech1;StorageQueueName=ech2") .Initialize(); bool connectionShutdown = false; void Connection_ConnectionShutdown(object sender, RabbitMQ.Client.ShutdownEventArgs e) { connectionShutdown = true; } RabbitInterceptor.Instance = new RabbitInterceptor() { InitializeConnection = (broker, connection) => { connection.ConnectionShutdown += Connection_ConnectionShutdown; }, DisposeConnection = (broker, connection) => { connection.ConnectionShutdown -= Connection_ConnectionShutdown; } }; int count = 0; using (var subs = new SubscriptionInstances(brokers)) { Task callback(IBrokerContext ctx) { count++; Assert.AreEqual(ctx.Broker != null, true); Assert.AreEqual(ctx.Broker.Factory != null, true); ctx.Commit(); //ctx.Reject(); return(Task.CompletedTask); } // Add a subscriber subs.AddSubscription("sub1", "subscriber37", callback); // push message in transaction var publisher = brokers.CreatePublisher("publisher1"); using (publisher.BeginTransaction()) { publisher.Publish(new { uui = Guid.NewGuid() }); publisher.Publish(new { uui = Guid.NewGuid() }); publisher.Commit(); } DateTime d1 = DateTime.Now.AddSeconds(5); while (DateTime.Now < d1) { Thread.Yield(); } } DateTime d2 = DateTime.Now.AddSeconds(5); while (DateTime.Now < d2) { Thread.Yield(); } Assert.AreEqual(count > 0, true); Assert.AreEqual(connectionShutdown, true); }
public static void CreateSubscriptionInstances(this IConfiguration configuration, IServiceCollection services, RabbitFactoryBrokers brokers) { var subscriptions = new SubscriptionInstances(brokers); services.AddSingleton(subscriptions); }