示例#1
0
        public async Task ShouldBuildFromActorBuilderAndRunActors()
        {
            var testActorAutoBuildOne = EventStoreEmbeddedStatelessActorBuilder <TestActorAutoBuildOne, SomeRegistry> .Create(_clusterVNode, _connectionSettings, ActorConfiguration.Default, _loggerFactory)
                                        .WithBus <IEventStoreBus>((actor, bus) => {
                actor.SubscribeFromEndToAllStreams();
                actor.SubscribeToPersistentSubscriptionStream(_streamId2, _groupIdOne);
            })
                                        .Build();

            var testActorAutoBuildTwo = EventStoreEmbeddedStatelessActorBuilder <TestActorAutoBuildOne, SomeRegistry> .Create(_clusterVNode, _connectionSettings, ActorConfiguration.Default, _loggerFactory)
                                        .WithBus <IEventStoreBus>((actor, bus) => {
                actor.SubscribeFromEndToAllStreams();
            })
                                        .Build();


            await Task.Delay(1000);

            await testActorAutoBuildTwo.EmitEventStore(new SomeMoreData(_correlationId, "some-stream"));

            await Task.Delay(2000);

            Assert.AreEqual(1, testActorAutoBuildOne.Events.Count);

            await testActorAutoBuildTwo.EmitEventStore(new SomeMoreData(_correlationId, _streamId2));

            await Task.Delay(1000);

            Assert.AreEqual(3, testActorAutoBuildOne.Events.Count);

            testActorAutoBuildOne.Dispose();
            testActorAutoBuildTwo.Dispose();
        }
示例#2
0
        public async Task ShouldRegisterTwoBusAndHandleEventsFromDifferentSources()
        {
            var testBusRegistrationActor = EventStoreEmbeddedStatelessActorBuilder <TestBusRegistrationStatelessActor, DummyBusRegistry>
                                           .Create(_clusterVNode, _connectionSettings, ActorConfiguration.Default, _loggerFactory)
                                           .WithBus <IDummyBus>((actor, bus) =>
            {
                actor.SubscribeDummyBus("somesubject");
            })
                                           .WithBus <IDummyBus2>((actor, bus) =>
            {
                actor.SubscribeDummyBus2("someothersubject");
            })
                                           .Build();

            var dummyBus  = testBusRegistrationActor.GetConnectedBus <IDummyBus>();
            var dummyBus2 = testBusRegistrationActor.GetConnectedBus <IDummyBus2>();

            dummyBus.Push(new SomeData("entity", Guid.NewGuid()));
            dummyBus2.Push(new SomeData("entity2", Guid.NewGuid()));

            await Task.Delay(200);

            Assert.AreEqual(2, testBusRegistrationActor.Events.Count);

            testBusRegistrationActor.Dispose();
        }
示例#3
0
        public static void Run()
        {
            var clusterVNode = EmbeddedVNodeBuilder
                               .AsSingleNode()
                               .RunInMemory()
                               .StartStandardProjections()
                               .WithWorkerThreads(1)
                               .Build();

            clusterVNode.StartAsync(true).Wait();

            CreateSubscriptionGroups(clusterVNode).Wait();

            var eventCountActorOne = EventStoreEmbeddedStatelessActorBuilder <EventCountStatelessActor, DemoSystemRegistry>
                                     .Create(clusterVNode, Do.GetConnectionSettings(), ActorConfiguration.Default)
                                     .WithBus <IEventStoreBus>((actor, bus) =>
            {
                actor.SubscribeToPersistentSubscriptionStream(StaticData.PersistentStreamOne, StaticData.GroupIdOne);
            })
                                     .Build();

            var eventCountActorTwo = EventStoreEmbeddedStatelessActorBuilder <EventCountStatelessActor, DemoSystemRegistry>
                                     .Create(clusterVNode, Do.GetConnectionSettings(), ActorConfiguration.Default)
                                     .WithBus <IEventStoreBus>((actor, bus) =>
            {
                actor.SubscribeToPersistentSubscriptionStream(StaticData.PersistentStreamOne, StaticData.GroupIdOne);
            })
                                     .Build();

            var position = 0;

            while (true)
            {
                if (position == 0)
                {
                    Console.WriteLine("Press enter to generate random event...");
                }

                Console.ReadLine();

                Console.WriteLine($"Generating {nameof(EventCountOne)} for stream {StaticData.PersistentStreamOne}");
                eventCountActorOne.EmitEventStore(new EventCountOne(position++, StaticData.PersistentStreamOne, Guid.NewGuid())).Wait();
            }
        }
示例#4
0
        public async Task ShouldRegisterOneBusAndHandleEventsFromDifferentSources()
        {
            var testBusRegistrationActor = EventStoreEmbeddedStatelessActorBuilder <TestBusRegistrationStatelessActor, DummyBusRegistry>
                                           .Create(_clusterVNode, _connectionSettings, ActorConfiguration.Default, _loggerFactory)
                                           .WithBus <IEventStoreBus>((actor, bus) => actor.SubscribeFromEndToAllStreams())
                                           .WithBus <IDummyBus>((actor, bus) =>
            {
                actor.SubscribeDummyBus("somesubject");
            })
                                           .Build();

            await Task.Delay(500);

            var eventStoreRepositoryConfiguration = new EventStoreRepositoryConfiguration();
            var connection        = EmbeddedEventStoreConnection.Create(_clusterVNode, _connectionSettings);
            var connectionMonitor = new EventStoreConnectionStatusMonitor(connection, _loggerFactory);

            var eventStoreRepository = new EventStoreAggregateRepository(
                eventStoreRepositoryConfiguration,
                connection,
                connectionMonitor,
                _loggerFactory);


            var dummyBus = testBusRegistrationActor.GetConnectedBus <IDummyBus>();

            dummyBus.Push(new SomeData("entity", Guid.NewGuid()));

            await eventStoreRepository.Emit(new SomeData("thisisit", Guid.NewGuid()));

            await Task.Delay(500);

            Assert.AreEqual(2, testBusRegistrationActor.Events.Count);
            Assert.True(testBusRegistrationActor.Events.Any(ev => ev.EntityId == "thisisit"));

            testBusRegistrationActor.Dispose();
        }
示例#5
0
        static void Main(string[] args)
        {
            //var dispatchQueue = new DispatchQueue<int>(new DispatchQueueConfiguration<int>((i=>
            //{
            //    throw new Exception("boom");

            //}),1,1));

            //dispatchQueue.Enqueue(1);


            Task.Run(() =>
            {
                var connectionSettings = StaticData.GetConnectionSettings();

                var tradeDataEventProvider  = new DefaultEventTypeProvider <Trade>(() => new[] { typeof(TradeCreated), typeof(TradeStatusChanged) });
                var marketDataEventProvider = new DefaultEventTypeProvider <MarketData>(() => new[] { typeof(MarketDataChanged) });

                var tradeService = EventStoreEmbeddedStatelessActorBuilder <TradeService, DemoSystemRegistry>
                                   .Create(StaticData.ClusterVNode, connectionSettings, ActorConfiguration.Default)
                                   .WithBus <IEventStoreBus>((actor, bus) =>
                {
                    actor.SubscribeFromEndToAllStreams();
                })
                                   .Build();

                var tradePriceUpdateService = EventStoreEmbeddedStatefulActorBuilder <TradePriceUpdateService, Trade, DemoSystemRegistry>
                                              .Create(StaticData.ClusterVNode, connectionSettings, ActorConfiguration.Default)
                                              .WithReadAllFromStartCache(eventTypeProvider: tradeDataEventProvider)
                                              .WithBus <IEventStoreBus>((actor, bus) =>
                {
                    actor.SubscribeFromEndToAllStreams();
                })
                                              .WithBus <IMarketDataBus>((actor, bus) =>
                {
                    actor.SubscribeMarketDataBus();
                })
                                              .Build();

                var tradeSink = EventStoreEmbeddedStatefulActorBuilder <TradeSink, Trade, DemoSystemRegistry>
                                .Create(StaticData.ClusterVNode, connectionSettings, ActorConfiguration.Default)
                                .WithReadAllFromStartCache(eventTypeProvider: tradeDataEventProvider)
                                .Build();

                var marketDataSink = StatelessActorBuilder <MarketDataSink, DemoSystemRegistry>
                                     .Create(ActorConfiguration.Default)
                                     .WithBus <IMarketDataBus>((actor, bus) =>
                {
                    actor.SubscribeMarketDataBus();
                })
                                     .Build();

                var marketDataCache = marketDataSink.CurrentPrices.Connect();
                var tradeCache      = tradeSink.State.AsObservableCache().Connect();

                tradeCache.PrintTradeChanges();
                marketDataCache.PrintMarketDataChanges();
            });

            Console.Read();
        }