Пример #1
0
        public void Tell_TracedMessageAndExceptionDuringProcessing_TracerScopeDisposed()
        {
            //setup
            IAkkaTracer tracer = Substitute.For <IAkkaTracer>();
            IScope      scope  = Substitute.For <IScope>();

            tracer.AroundReceive(null, null, null).ReturnsForAnyArgs(scope);

            var tep = new TracingExtensionProvider(new SubsTracingExtensionFactory(tracer));

            Sys.RegisterExtension(tep);
            var testActor = new TestActorRef <SampleActor>(Sys, Props.Create(() => new SampleActor())); //sync actor

            //call
            testActor.Tell(new TracedMessage("exception", null));

            //assert
            scope.ReceivedWithAnyArgs(1).Dispose();
        }
Пример #2
0
        protected override bool AroundReceive(Receive receive, object message)
        {
            IScope scope = null;

            try
            {
                if (message is TracedMessage m)
                {
                    scope   = _tracer?.AroundReceive(Context, m, GetType());
                    message = m.Message;
                }

                return(base.AroundReceive(receive, message));
            }
            finally
            {
                scope?.Dispose();
            }
        }