Exemple #1
0
        public void HandlerSubscribeTest()
        {
            IMetricsClient client = NSubstitute.Substitute.For <IMetricsClient>();

            IEventBus bus = new RabbitMQEventBus(new DATConfiguration(), client);

            MessageTest test = new MessageTest {
                Name = "Maikel"
            };

            bus.Publish("exchange.subscribe-test-handler", test);
            bus.Publish("exchange.subscribe-test-handler", test);
            bus.Publish("exchange.subscribe-test-handler", test);


            int index = 0;

            bus.Subscribe <MessageTest>("exchange.subscribe-test-handler", messageTest =>
            {
                Assert.Equal("Maikel", messageTest.Name);

                index++;

                return(true);
            });

            Thread.Sleep(500);

            Assert.Equal(3, index);
        }
Exemple #2
0
 public static IFuxionBuilder RabbitMQ(this IFuxionBuilder me, out Func <IServiceProvider, RabbitMQEventBus> builder, string exchangeName, string queueName, string connectionHost = "localhost", int connectionRetryCount = 5, int queueRetryCount = 5)
 {
     me.Services.AddSingleton <IRabbitMQPersistentConnection>(new DefaultRabbitMQPersistentConnection(new ConnectionFactory()
     {
         HostName = connectionHost
     }, connectionRetryCount));
     builder = new Func <IServiceProvider, RabbitMQEventBus>(sp =>
     {
         var bus = new RabbitMQEventBus(
             sp,
             sp.GetRequiredService <IRabbitMQPersistentConnection>(),
             sp.GetRequiredService <TypeKeyDirectory>(),
             exchangeName,
             queueName,
             queueRetryCount);
         // Esto se ejecutará al activar la instancia de RabbitMQEventBus
         // Suscribo los eventos externos. Se manejarán mediante EventHandlers igual que los eventos del propio bounded context
         foreach (var sub in sp.GetServices <EventSubscription>())
         {
             bus.Subscribe(sub.EventType);
         }
         return(bus);
     });
     me.Services.AddSingleton(builder);
     me.AddToAutoActivateList <RabbitMQEventBus>();
     return(me);
 }
Exemple #3
0
 public HomeController(AggregationController aggregationController, IStockService stockService,
                       ITransferService transferService, IOrderService orderService, RabbitMQEventBus eventBus)
 {
     this.aggregationController = aggregationController;
     this.stockService          = stockService;
     this.transferService       = transferService;
     this.orderService          = orderService;
     this.eventBus = eventBus;
 }
Exemple #4
0
        public void PublishTest()
        {
            IMetricsClient client = NSubstitute.Substitute.For <IMetricsClient>();

            IEventBus bus = new RabbitMQEventBus(new DATConfiguration(), client);

            MessageTest test = new MessageTest {
                Name = "Maikel"
            };

            bus.Publish("exchange.topic", test);
        }
Exemple #5
0
 public AggregationController(
     IOrderService orderService,
     IStockService stockService,
     ITransferService transferService,
     ILogger <HomeController> logger,
     RabbitMQEventBus eventBus)
 {
     this.orderService    = orderService;
     this.stockService    = stockService;
     this.transferService = transferService;
     this.logger          = logger;
     this.eventBus        = eventBus;
 }
        public async Task RabbitMQClientBus_PublishEventAsync_Should_Be_Readable()
        {
            var          appId     = Guid.NewGuid();
            const string queueName = "test_publish_queue_1";

            try
            {
                _channel.ExchangeDeclare(
                    exchange: appId + "_events",
                    type: ExchangeType.Fanout,
                    durable: true,
                    autoDelete: false);
                _channel.QueueDeclare(queueName, false, true, true);
                _channel.QueueBind(queueName, appId + "_events", "");

                var evt = new RabbitEvent
                {
                    Data = "testData"
                };

                var b = new RabbitMQEventBus(
                    new JsonDispatcherSerializer(),
                    new RabbitMQClientBusConfiguration(appId.ToString(), _testConfiguration["host"], _testConfiguration["user"], _testConfiguration["password"]));
                var allCalled = false;

                await b.PublishEventAsync(evt).ContinueWith(t =>
                {
                    t.Result.IsSuccess.Should().BeTrue();
                    var result = _channel.BasicGet(queueName, true);
                    result.Should().NotBeNull();
                    var enveloppeAsStr = Encoding.UTF8.GetString(result.Body);
                    enveloppeAsStr.Should().NotBeNullOrWhiteSpace();

                    var receivedEnveloppe = enveloppeAsStr.FromJson <Enveloppe>();
                    receivedEnveloppe.Should().NotBeNull();

                    var type = Type.GetType(receivedEnveloppe.AssemblyQualifiedDataType);
                    var evet = receivedEnveloppe.Data.FromJson(type);
                    evet.Should().BeOfType <RabbitEvent>();
                    evet.As <RabbitEvent>().Data.Should().Be("testData");
                    allCalled = true;
                }).ConfigureAwait(false);

                allCalled.Should().BeTrue();
            }
            finally
            {
                _channel.ExchangeDelete(appId + "_events");
                _channel.QueueDelete(queueName);
            }
        }
Exemple #7
0
        static void Main(string[] args)
        {
            var connectionFactory = new ConnectionFactory {
                HostName = "localhost"
            };
            var eventBus = new RabbitMQEventBus(connectionFactory, "EventBus.RabbitMQ.Events.Exchange", queueName: "EventBus.RabbitMQ.Events.Queue");

            var sendedEvent = new SendedEvent("优惠");

            Console.WriteLine($"商店发了{sendedEvent.Name}通知!");
            eventBus.Publish <SendedEvent>(sendedEvent);

            Console.ReadKey();
        }
Exemple #8
0
        public async Task DispatchRangeEvents_SameEvent(int nbEvents, bool allowParallelDispatch)
        {
            var bus = new RabbitMQEventBus(new JsonDispatcherSerializer(),
                                           new RabbitPublisherBusConfiguration("benchmark", "localhost", "guest", "guest",
                                                                               parallelDispatchEventTypes: allowParallelDispatch ? new List <Type> {
                typeof(TestDispatchEvent)
            } : new List <Type>()));
            var events = new List <IDomainEvent>();

            for (int i = 0; i < nbEvents; i++)
            {
                events.Add(new TestDispatchEvent(i, false, 0));
            }
            await bus.PublishEventRangeAsync(events);
        }
Exemple #9
0
        static void Main(string[] args)
        {
            var connectionFactory = new ConnectionFactory {
                HostName = "localhost"
            };
            var eventBus = new RabbitMQEventBus(connectionFactory, "EventBus.RabbitMQ.Events.Exchange", queueName: "EventBus.RabbitMQ.Events.Queue");

            var customerASendedEventHandler = new CustomerASendedEventHandler();

            eventBus.Subscribe <SendedEvent>(customerASendedEventHandler);
            var customerBSendedEventHandler = new CustomerBSendedEventHandler();

            eventBus.Subscribe <SendedEvent>(customerBSendedEventHandler);

            Console.ReadKey();
        }
Exemple #10
0
        public void GetTest()
        {
            IMetricsClient client = NSubstitute.Substitute.For <IMetricsClient>();

            IEventBus bus = new RabbitMQEventBus(new DATConfiguration(), client);

            MessageTest test = new MessageTest {
                Name = "Maikel"
            };

            bus.Publish("exchange.topic-get", test);

            Option <MessageTest> returnMessage = bus.Get <MessageTest>("exchange.topic-get");

            Assert.True(returnMessage.HasValue);
            Assert.True(returnMessage.Exists(x => x.Name == "Maikel"));
        }
Exemple #11
0
        static void Main(string[] args)
        {
            var connectionFactory = new ConnectionFactory {
                HostName = "localhost"
            };
            var eventBus = new RabbitMQEventBus(connectionFactory, "EventBus.RabbitMQ.ConsoleApp01.Exchange", queueName: "EventBus.RabbitMQ.ConsoleApp01.Queue");

            var sendedEvent = new SendedEvent("优惠");

            var customerASendedEventHandler = new CustomerASendedEventHandler();

            eventBus.Subscribe <SendedEvent>(customerASendedEventHandler);
            var customerBSendedEventHandler = new CustomerBSendedEventHandler();

            eventBus.Subscribe <SendedEvent>(customerBSendedEventHandler);
            Console.WriteLine($"商店发了{sendedEvent.Name}通知!");
            eventBus.Publish <SendedEvent>(sendedEvent);

            Console.ReadKey();
        }
Exemple #12
0
        public void ObservableSubscribeTest()
        {
            IMetricsClient client = NSubstitute.Substitute.For <IMetricsClient>();

            IEventBus bus = new RabbitMQEventBus(new DATConfiguration(), client);

            MessageTest test = new MessageTest {
                Name = "Maikel"
            };

            bus.Publish("exchange.subscribe-test", test);
            bus.Publish("exchange.subscribe-test", test);
            bus.Publish("exchange.subscribe-test", test);


            IObservable <MessageTest> subscription = bus.Subscribe <MessageTest>("exchange.subscribe-test");


            subscription.Do(messageTest => Assert.Equal("Maikel", messageTest.Name)).Subscribe();
        }
Exemple #13
0
        private static void ConfigureContainer(ContainerBuilder containerBuilder)
        {
            // Add any Autofac modules or registrations.
            // This is called AFTER ConfigureServices so things you
            // register here OVERRIDE things registered in ConfigureServices.
            //
            // You must have the call to `UseServiceProviderFactory(new AutofacServiceProviderFactory())`
            // when building the host or this won't be called.
            containerBuilder.Register <ILogger>((c, p) => new LoggerConfiguration()
                                                .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://127.0.0.1:9200")))
                                                .CreateLogger()).SingleInstance();
            containerBuilder.RegisterType <SubscriptionsManager>().As <ISubscriptionsManage>();
            containerBuilder.RegisterType <HelloWorldEventHandler>();
            containerBuilder.RegisterType <EventService>()
            .As <IEventService>();

            // var rabbitHost = new Uri("amqp://*****:*****@rabbitmq:5672 ");
            // var rabbitHostdev = new Uri("amqp://*****:*****@127.0.0.1");
            ConnectionFactory factory = new ConnectionFactory()
            {
                HostName = "rabbitmq", Port = 5672
            };

            factory.UserName = "******";
            factory.Password = "******";
            Console.WriteLine("registering RabbitMQ connection");
            containerBuilder.Register(_ => new RabbitMqConnection(factory)).As <IRabbitMqConnection>();

            containerBuilder.Register(componentContext =>
            {
                var connection    = componentContext.Resolve <IRabbitMqConnection>();
                var subsManage    = componentContext.Resolve <ISubscriptionsManage>();
                var lifeTimeScope = componentContext.Resolve <ILifetimeScope>();
                var logger        = componentContext.Resolve <ILogger>();

                var eventBus = new RabbitMQEventBus(connection, lifeTimeScope, subsManage, logger, AppName);
                ConfigureSubscribes(eventBus);

                return(eventBus);
            }).As <IEventBus>();
        }
Exemple #14
0
 [Benchmark] // We add those benchmark that are mainly the same as command cause we must not see any perf differences between these two
 public async Task DispatchEvent()
 {
     var bus = new RabbitMQEventBus(new JsonDispatcherSerializer(),
                                    new RabbitPublisherBusConfiguration("benchmark", "localhost", "guest", "guest"));
     await bus.PublishEventAsync(new TestDispatchEvent(0, false, 0));
 }
Exemple #15
0
 public TransactionCancelEvent(RabbitMQEventBus rabbitMQEventBus)
 {
     this.rabbitMQEventBus = rabbitMQEventBus;
 }
 public GetInfoEventHandler(RabbitMQEventBus eventBus, DBProxy proxy) : base(eventBus, proxy)
 {
 }
 public RequestEventHandler(RabbitMQEventBus eventBus,
                            DBProxy proxy)
     : base(eventBus, proxy)
 {
 }
Exemple #18
0
        /// <summary>
        /// 测试ActvieMQ 消息发布与订阅
        /// </summary>
        /// <param name="isServer"></param>
        private static void TestEventBus(MQTypeEnum mqType, Boolean isServer = true)
        {
            Console.WriteLine("消息测试:1,消息发布;2,消息订阅");

            isServer = Console.ReadKey().KeyChar == '1';

            var       topic1 = "Topic.Test";
            var       topic2 = "Topic.Admin.User";
            IEventBus eventbus;

            switch (mqType)
            {
            case MQTypeEnum.ActiveMQ:
                eventbus = new ActiveMQEventBus();
                break;

            case MQTypeEnum.RabbitMQ:
                eventbus = new RabbitMQEventBus();
                break;

            default:
                eventbus = new RabbitMQEventBus();
                break;
            }
            Int64 userid = UserX.FindCount() + 1;

            TimerX timer;

            if (isServer)
            {
                timer = new TimerX((Object state) =>
                {
                    try
                    {
                        var time = DateTime.Now;
                        eventbus.Publish(topic1, new EventMessage()
                        {
                            Action = "Test",
                            Body   = "学无先后达者为师"
                        });
                        Console.WriteLine($"{time} 发送了一条消息,主题为:{topic1}");

                        // 实体消息测试
                        long tick = DateTime.Now.Ticks;
                        var rd    = new Random((Int32)(tick & 0xFFFFFFFFL) | (Int32)(tick >> 32));
                        var user  = new UserX()
                        {
                            Name        = "User" + rd.Next(),
                            DisplayName = $"{Enum.GetName(typeof(MQTypeEnum), eventbus.MQType)}_{userid++}",
                            Code        = userid.ToString().PadLeft(7, '0')
                        };
                        //user.SaveAsync(); // 向数据库中插入数据
                        eventbus.PublishAsync(topic2, new EventMessage()
                        {
                            Action = "Insert",
                            Body   = user.ToJson()
                        });
                    }
                    catch (Exception ex)
                    {
                        XTrace.WriteException(ex);
                        throw ex;
                    }
                }, null, 10, 10);
            }
            else
            {
                var handler = new EventBusHandler();
                eventbus.Subscribe(topic1, handler);

                eventbus.SubscribeAsync(topic2, new MyHandler());
            }
        }
Exemple #19
0
 public AckHandler(RabbitMQEventBus eventBus, EventsStorage eventStorage) : base(eventBus, null)
 {
     this.eventsStorage = eventsStorage;
 }
Exemple #20
0
 public EventHandler(RabbitMQEventBus eventBus, DBProxy dbProxy)
 {
     this.eventBus = eventBus;
     eventBus.Subscribe(this);
     this.dbContext = dbProxy?.DbContext;
 }
Exemple #21
0
 public LoginHandler(RabbitMQEventBus eventBus, DBProxy proxy) : base(eventBus, proxy)
 {
 }
 public GetTransfersEventHandler(RabbitMQEventBus eventBus, DBProxy proxy) : base(eventBus, proxy)
 {
 }
 public GatewayAuthorizationMiddleWare(RequestDelegate next, IAuthService authService, RabbitMQEventBus eventBus) : base(next)
 {
     this.eventBus    = eventBus;
     this.authService = authService;
 }
 public OrderValuesEventHandler(RabbitMQEventBus eventBus, DBProxy proxy) : base(eventBus, proxy)
 {
 }
 public DeletedOrderEventHandler(RabbitMQEventBus eventBus, DBProxy proxy) : base(eventBus, proxy)
 {
 }
Exemple #26
0
        public void InstanceDefaultParametersCreationTest()
        {
            IMetricsClient client = NSubstitute.Substitute.For <IMetricsClient>();

            IEventBus bus = new RabbitMQEventBus(new DATConfiguration(), client);
        }