Exemple #1
0
 public void Configure()
 {
     _actorSystem = ActorSystem.Create("test");
     _transport   = new LocalAkkaEventBusTransport(_actorSystem);
     Waiter       = new AkkaMessageLocalWaiter(_actorSystem, _transport, TimeSpan.FromSeconds(1));
     _results     = ConfigureWaiter(Waiter);
 }
Exemple #2
0
        public LocalTransportProxyActor()
        {
            var localTransport = new LocalAkkaEventBusTransport(Context.System);

            Receive <Publish>(p =>
            {
                localTransport.Publish(p.Msg);
                Sender.Tell(PublishAck.Instance);
            });
            Receive <PublishMany>(p =>
            {
                var messages = p.Messages.Select(m => m.Msg).ToArray();
                localTransport.Publish(messages);
                Sender.Tell(PublishManyAck.Instance);
            });
            Receive <Subscribe>(s =>
            {
                localTransport.Subscribe(s.Topic, s.Actor, s.Notificator);
                Sender.Tell(SubscribeAck.Instance);
            });
            Receive <Unsubscribe>(us =>
            {
                localTransport.Unsubscribe(us.Actor, us.Topic);
                Sender.Tell(UnsubscribeAck.Instance);
            });
        }
Exemple #3
0
        public AkkaWaiter_message_test_filtered_message()
        {
            _transport = new LocalAkkaEventBusTransport(Sys);
            var waiter = new LocalMessagesWaiter(Sys, _transport, TimeSpan.FromSeconds(2));

            waiter.Expect <string>(m => m.Like("Msg"));
            _results = waiter.Start(TimeSpan.FromSeconds(10));
        }
Exemple #4
0
        //Given_waiter_subscribed_for_message_When_publishing_message()
        public AkkaWaiter_One_Message_Test()
        {
            var actorSystem = TestActorSystem.Create();
            var transport   = new LocalAkkaEventBusTransport(actorSystem);
            var waiter      = new LocalMessagesWaiter(actorSystem, transport, TimeSpan.FromSeconds(10));

            waiter.Expect <string>();

            _results = waiter.Start(TimeSpan.FromSeconds(10));
            _testmsg = "TestMsg";
            transport.Publish(_testmsg, MessageMetadata.Empty);
        }
        public void Given_waiter_subscribed_for_message_When_publishing_message()
        {
            var actorSystem = ActorSystem.Create("test");
            var transport   = new LocalAkkaEventBusTransport(actorSystem);

            _waiter = new AkkaMessageLocalWaiter(actorSystem, transport, TimeSpan.FromSeconds(10));
            _waiter.Expect <string>();
            _results = _waiter.Start(TimeSpan.FromSeconds(1));

            _testmsg = "TestMsg";
            transport.Publish(_testmsg);
        }
        //TODO: refactor to good config via IContainerConfiguration
        public static void Init(IUnityContainer container,
                                ActorSystem actorSystem,
                                TransportMode transportMode,
                                IQuartzConfig config = null)
        {
            container.Register(new QuartzSchedulerConfiguration(config ?? new PersistedQuartzConfig()));
            container.RegisterInstance <IRetrySettings>(new InMemoryRetrySettings(5,
                                                                                  TimeSpan.FromMinutes(10),
                                                                                  new DefaultExceptionPolicy()));

            //TODO: replace with config
            IActorTransport transport;

            switch (transportMode)
            {
            case TransportMode.Standalone:
                transport = new LocalAkkaEventBusTransport(actorSystem);
                break;

            case TransportMode.Cluster:
                transport = new DistributedPubSubTransport(actorSystem);
                break;

            default:
                throw new ArgumentException(nameof(transportMode));
            }

            container.RegisterInstance <IPublisher>(transport);
            container.RegisterInstance <IActorSubscriber>(transport);
            container.RegisterInstance <IActorTransport>(transport);

            container.RegisterType <IHandlerActorTypeFactory, DefaultHandlerActorTypeFactory>();
            container.RegisterType <IAggregateActorLocator, DefaultAggregateActorLocator>();
            container.RegisterType <IPersistentChildsRecycleConfiguration, DefaultPersistentChildsRecycleConfiguration>();
            container.RegisterInstance <IAppInsightsConfiguration>(AppInsightsConfigSection.Default ??
                                                                   new DefaultAppInsightsConfiguration());
            container.RegisterInstance <IPerformanceCountersConfiguration>(PerformanceCountersConfigSection.Default ??
                                                                           new DefaultPerfCountersConfiguration());

            container.RegisterInstance(actorSystem);

            var executor = new AkkaCommandExecutor(actorSystem, transport);

            container.RegisterType <ICommandExecutor, AkkaCommandExecutor>();
            var messageWaiterFactory = new MessageWaiterFactory(executor, actorSystem, TimeSpan.FromSeconds(15), transport);

            container.RegisterInstance <IMessageWaiterFactory>(messageWaiterFactory);
            container.RegisterInstance <ICommandWaiterFactory>(messageWaiterFactory);
        }
Exemple #7
0
        public AkkaEventsChronicle(AkkaConfiguration akkaConf)
        {
            _system = akkaConf.CreateSystem();

            _system.AddDependencyResolver(new UnityDependencyResolver(new UnityContainer(), _system));

            _transport = new LocalAkkaEventBusTransport(_system);

            var routingActor =
                _system.ActorOf(Props.Create(() => new LocalSystemRoutingActor(new DefaultHandlerActorTypeFactory(),
                                                                               new LocalAkkaEventBusTransport(_system))));

            var actorLocator = new DefaultAggregateActorLocator();

            Router = new ActorMessagesRouter(routingActor);
        }
        public void Message_process_actor_produce_fault_with_sagaId_from_incoming_message(string payload)
        {
            var message = new SampleAggregateChangedEvent(payload, Guid.NewGuid(), DateTime.Now, Guid.NewGuid());

            var transport = new LocalAkkaEventBusTransport(Sys);

            transport.Subscribe <IMessageMetadataEnvelop <Fault <SampleAggregateChangedEvent> > >(TestActor);

            var actor = Sys.ActorOf(Props.Create(() =>
                                                 new MessageHandlingActor <SampleAggregateChangedEvent, OddFaultyMessageHandler>(
                                                     new OddFaultyMessageHandler(transport),
                                                     transport)));

            actor.Tell(message);
            var fault = ExpectMsg <IMessageMetadataEnvelop <Fault <SampleAggregateChangedEvent> > >();

            Assert.AreEqual(message.SagaId, fault.Message.SagaId);
        }
Exemple #9
0
        [InlineData("10")]   //, Description = "planned exception from message processor")]
        public void Message_process_actor_produce_fault_with_processId_from_incoming_message(string payload)
        {
            var message = new BalloonTitleChanged(payload, Guid.NewGuid().ToString(), DateTime.Now, Guid.NewGuid().ToString());

            var transport = new LocalAkkaEventBusTransport(Sys);

            transport.Subscribe <IMessageMetadataEnvelop>(TestActor);

            var actor =
                Sys.ActorOf(Props.Create(
                                () =>
                                new MessageHandleActor <BalloonTitleChanged, BalloonTitleChangedOddFaultyMessageHandler>(
                                    new BalloonTitleChangedOddFaultyMessageHandler(transport),
                                    transport)));

            actor.Tell(new MessageMetadataEnvelop <DomainEvent>(message, MessageMetadata.Empty));

            var fault = FishForMessage <IMessageMetadataEnvelop>(m => m.Message is IFault).Message as IFault;

            Assert.Equal(message.ProcessId, fault.ProcessId);
            Assert.IsAssignableFrom <Fault <BalloonTitleChanged> >(fault);
        }
        public void Aggregate_actor_produce_fault_with_sagaId_from_command()
        {
            var command = new GoSleepCommand(Guid.Empty, Guid.Empty).CloneWithSaga(Guid.NewGuid());

            var transport = new LocalAkkaEventBusTransport(Sys);

            transport.Subscribe <MessageMetadataEnvelop <Fault <GoSleepCommand> > >(TestActor);

            var actor = Sys.ActorOf(Props.Create(() =>
                                                 new AggregateActor <HomeAggregate>(new HomeAggregateHandler(),
                                                                                    new TypedMessageActor <ScheduleCommand>(TestActor),
                                                                                    new TypedMessageActor <Unschedule>(TestActor),
                                                                                    transport,
                                                                                    new SnapshotsPersistencePolicy(TimeSpan.FromSeconds(1), 1, 5),
                                                                                    new AggregateFactory()
                                                                                    )),
                                    AggregateActorName.New <HomeAggregate>(command.Id).Name);

            actor.Tell(new MessageMetadataEnvelop <ICommand>(command, new MessageMetadata(command.Id)));

            var fault = ExpectMsg <MessageMetadataEnvelop <Fault <GoSleepCommand> > >(TimeSpan.FromDays(1));

            Assert.AreEqual(command.SagaId, fault.Message.SagaId);
        }