示例#1
0
        /// <summary>
        ///     Performs application-defined tasks associated with freeing,
        ///     releasing, or resetting unmanaged resources.
        /// </summary>
        public void Dispose()
        {
            var cd = AppDomain.CurrentDomain;

            cd.AssemblyLoad -= CurrentDomainOnAssemblyLoad;
            //cd.TypeResolve += CdOnTypeResolve;

            cd.UnhandledException -= OnAppDomainUnhandledException;
            cd.ResourceResolve    -= CdOnResourceResolve;

            cd.FirstChanceException -= CurrentDomainOnFirstChanceException;
            _container?.Dispose();
            AppContainer?.Dispose();
        }
示例#2
0
 public void Dispose()
 {
     notificationService?.Dispose();
     updateChecker?.Dispose();
     container?.Dispose();
 }
示例#3
0
 /// <summary>
 /// 释放容器
 /// </summary>
 public void Dispose()
 {
     _container.Dispose();
 }
示例#4
0
        public async Task Aggregator_Consume40EventsWith5BucketSize_2BucketsMustBeCreatedBecauseOfSizeAndPeriod()
        {
            //prepare
            IConfiguration configuration = ConfigurationHelper.ProvideConfiguration();
            var            exchangeName  =
                "Aggregator_Consume40EventsWith5BucketSize_2BucketsMustBeCreatedBecauseOfSizeAndPeriod.exchangename";

            configuration["rabbitmq:exchangename"]     = exchangeName;
            configuration["rabbitmq:waitexchangename"] = exchangeName.Replace("exchangename", "waitexchangename");

            var        maxretrycount = 2;
            IContainer container     = ConfigurationHelper.ConfigureContainer(configuration);

            //create Subscriber
            var         bookingactivityCreatedSubscriberFactory = container.Resolve <ISubscriberFactory>();
            ISubscriber aggregatorSubscriber =
                await bookingactivityCreatedSubscriberFactory
                .CreateSubscriberAsync("Aggregator_Consume40EventsWith5BucketSize_2BucketsMustBeCreatedBecauseOfSizeAndPeriod" +
                                       ".bookingactivitycreatedclusterizator", new List <string>
            {
                "*.entity.create.bookingactivity",
            }, maxretrycount, 40);


            var         activityBatchSubscriberFactory = container.Resolve <ISubscriberFactory>();
            ISubscriber activityBatchSubscriber        =
                await activityBatchSubscriberFactory
                .CreateSubscriberAsync("Aggregator_Consume40EventsWith5BucketSize_2BucketsMustBeCreatedBecauseOfSizeAndPeriod" +
                                       ".activityclusterizator", new List <string>
            {
                "*.activitytagging",
            }, maxretrycount, 1);


            //create Publisher

            var publisher = container.Resolve <IPublisher>();

            string bookingactivityRoutingKey = "changetracker.entity.create.bookingactivity";
            string activitytaggingRoutingKey = "activityclusterizator.activitytagging";

            //create aggregator
            var bookingActivitiesChangeTrackerEventAggregator = new Aggregator <BookingActivity, Guid>(
                intergrationevent => Task.FromResult(intergrationevent.Content.ActivityId), 30,
                activitiesIds =>
            {
                var activitytaggingintergrationevnt = new IntegrationEvent <ActivityTags>
                {
                    EventId           = Guid.NewGuid(),
                    CorrelationId     = Guid.NewGuid(),
                    EventCreationDate = DateTime.UtcNow,
                    EventType         = "activitytagging",
                    Version           = "0.1",
                    Content           = new ActivityTags()
                    {
                        ActivityIds = activitiesIds.ToList()
                    }
                };

                return(publisher.PublishEventAsync(activitytaggingintergrationevnt, activitytaggingRoutingKey));
            }, TimeSpan.FromSeconds(10));

            aggregatorSubscriber.Subscribe(SubscriptionBuilder.Create()
                                           .AddSubscription("bookingactivityCreated", () => bookingActivitiesChangeTrackerEventAggregator)
                                           .Build());

            var activityBatchProcessor = new ActivityTagsConsumer();

            activityBatchSubscriber.Subscribe(SubscriptionBuilder.Create()
                                              .AddSubscription("activitytagging", () => activityBatchProcessor)
                                              .Build());

            List <IntegrationEvent <BookingActivity> > originalBookingActivityCreatedEvents = new List <IntegrationEvent <BookingActivity> >();

            for (int i = 1; i <= 40; i++)
            {
                originalBookingActivityCreatedEvents.Add(new IntegrationEvent <BookingActivity>
                {
                    EventId           = Guid.NewGuid(),
                    CorrelationId     = Guid.NewGuid(),
                    EventCreationDate = DateTime.UtcNow,
                    EventType         = "bookingactivityCreated",
                    Version           = "0.1",
                    Content           = new BookingActivity()
                    {
                        ActivityId = Guid.NewGuid(), BookingId = Guid.NewGuid()
                    }
                });
            }

            //act
            foreach (var bookingActivityCreatedEvent in originalBookingActivityCreatedEvents)
            {
                await publisher.PublishEventAsync(bookingActivityCreatedEvent, bookingactivityRoutingKey);
            }

            //wait 12 seconds
            await Task.Delay(12000);

            //check
            List <Guid> expectedresult = new List <Guid>();

            IntegrationEvent <ActivityTags> countBasedBucket = activityBatchProcessor.ProcessedIntegrationEvents[0];

            countBasedBucket.Content.ActivityIds.Count().Should().Be(30);
            expectedresult.AddRange(countBasedBucket.Content.ActivityIds);

            IntegrationEvent <ActivityTags> maxWaitingTimeBasedBucket = activityBatchProcessor.ProcessedIntegrationEvents[1];

            maxWaitingTimeBasedBucket.Content.ActivityIds.Count().Should().Be(10);
            expectedresult.AddRange(maxWaitingTimeBasedBucket.Content.ActivityIds);

            expectedresult.ShouldBeEquivalentTo(originalBookingActivityCreatedEvents.Select(ob => ob.Content.ActivityId));
            container.Dispose();
        }
示例#5
0
 public void Dispose()
 {
     m_ToolbarProxy.RequestMacroRunning -= OnRequestMacroRunning;
     m_Container.Dispose();
 }
示例#6
0
        public async Task QueueInfoProvider_GetQueueInfo_CorrectCountOfReadyMessagesMustBeReturned()
        {
            //prepare
            IConfiguration configuration = ConfigurationHelper.ProvideConfiguration();
            var            exchangeName  =
                "QueueInfoProvider_GetQueueInfo_CorrectCountOfReadyMessagesMustBeReturned.exchangename";

            configuration["rabbitmq:exchangename"]     = exchangeName;
            configuration["rabbitmq:waitexchangename"] = exchangeName.Replace("exchangename", "waitexchangename");


            var maxretrycount = 2;

            IContainer container = ConfigurationHelper.ConfigureContainer(configuration);

            //create Subscriber
            var         bookingCreatedSubscriberFactory = container.Resolve <ISubscriberFactory>();
            ISubscriber fastSubscriber =
                await bookingCreatedSubscriberFactory
                .CreateSubscriberAsync("QueueInfoProvider_GetQueueInfo_CorrectCountOfReadyMessagesMustBeReturned" +
                                       ".fast", new List <string>
            {
                "*.entity.create.booking",
            }, maxretrycount, 5);

            ISubscriber slowSubscriber =
                await bookingCreatedSubscriberFactory
                .CreateSubscriberAsync("QueueInfoProvider_GetQueueInfo_CorrectCountOfReadyMessagesMustBeReturned" +
                                       ".slow", new List <string>
            {
                "*.entity.create.booking",
            }, maxretrycount, 1);


            //create Publisher

            var publisher = container.Resolve <IPublisher>();

            string bookingRoutingKey = "changetracker.entity.create.booking";


            //act
            BookingCreated bookingCreated =
                new BookingCreated()
            {
                BookingName = string.Concat("Microsoft Sale", Guid.NewGuid().ToString())
            };


            var bookingCreatedIntegrationEvent = new IntegrationEvent <BookingCreated>()
            {
                Content   = bookingCreated,
                EventType = "bookingcreated"
            };

            for (int i = 1; i <= 8; i++)
            {
                await publisher.PublishEventAsync(bookingCreatedIntegrationEvent, bookingRoutingKey);
            }


            //wait 1 second
            await Task.Delay(1000);

            //ckeck the GetQueueInfo method first call
            var queueInfoProvider = container.Resolve <IQueueInfoProvider>();
            var fastSubscriberQueueSnapshotInfo = queueInfoProvider.GetQueueInfo(
                "QueueInfoProvider_GetQueueInfo_CorrectCountOfReadyMessagesMustBeReturned.fast");

            fastSubscriberQueueSnapshotInfo.CountOfMessages.Should().Be(8);

            var slowSubscriberQueueSnapshotInfo = queueInfoProvider.GetQueueInfo(
                "QueueInfoProvider_GetQueueInfo_CorrectCountOfReadyMessagesMustBeReturned.slow");

            slowSubscriberQueueSnapshotInfo.CountOfMessages.Should().Be(8);

            //Let's create Subscriber

            var fastBookingTypedSubscriberConsumer = new BookingTypedParallellismCounterConsumer(500);
            var slowBookingTypedSubscriberConsumer = new BookingTypedParallellismCounterConsumer(500);

            fastSubscriber.Subscribe(SubscriptionBuilder.Create()
                                     .AddSubscription("bookingcreated", () => fastBookingTypedSubscriberConsumer)
                                     .Build());

            slowSubscriber.Subscribe(SubscriptionBuilder.Create()
                                     .AddSubscription("bookingcreated", () => slowBookingTypedSubscriberConsumer)
                                     .Build());

            //wait 10 seconds
            await Task.Delay(10000);

            //check

            //ckeck the GetQueueInfo method second call
            fastSubscriberQueueSnapshotInfo = queueInfoProvider.GetQueueInfo(
                "QueueInfoProvider_GetQueueInfo_CorrectCountOfReadyMessagesMustBeReturned.fast");
            fastSubscriberQueueSnapshotInfo.CountOfMessages.Should().Be(0);

            slowSubscriberQueueSnapshotInfo = queueInfoProvider.GetQueueInfo(
                "QueueInfoProvider_GetQueueInfo_CorrectCountOfReadyMessagesMustBeReturned.slow");
            slowSubscriberQueueSnapshotInfo.CountOfMessages.Should().Be(0);

            container.Dispose();
        }
示例#7
0
 public void Dispose() => m_Container.Dispose();
示例#8
0
 void IDisposable.Dispose()
 {
     container.Dispose();
 }
示例#9
0
 protected void ShutdownIoC()
 {
     container.Dispose();
 }
示例#10
0
 private void OnExit(object sender, ExitEventArgs e)
 {
     _container.Dispose();
 }
示例#11
0
 public void Dispose() => autofacContainer.Dispose();