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); }
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); }
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; }
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); }
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); } }
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(); }
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); }
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(); }
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")); }
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(); }
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(); }
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>(); }
[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)); }
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) { }
/// <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()); } }
public AckHandler(RabbitMQEventBus eventBus, EventsStorage eventStorage) : base(eventBus, null) { this.eventsStorage = eventsStorage; }
public EventHandler(RabbitMQEventBus eventBus, DBProxy dbProxy) { this.eventBus = eventBus; eventBus.Subscribe(this); this.dbContext = dbProxy?.DbContext; }
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) { }
public void InstanceDefaultParametersCreationTest() { IMetricsClient client = NSubstitute.Substitute.For <IMetricsClient>(); IEventBus bus = new RabbitMQEventBus(new DATConfiguration(), client); }