コード例 #1
0
        private Func <BusinessData <TBusinessData> > GetCurrentBusinessData <TBusinessData, TBusinessDataUpdate>(
            Func <TBusinessData> createEmptyBusinessData,
            Func <TBusinessData, TBusinessDataUpdate, TBusinessData> applyUpdate)
        {
            var businessDataUpdates = new BusinessDataPump <TBusinessData, TBusinessDataUpdate>(
                demoCredential: this.demoCredential,
                createEmptyBusinessData: createEmptyBusinessData,
                applyUpdate: applyUpdate,
                snapshotContainerClient: this.snapshotContainerClient);

            businessDataUpdates.StartUpdateProcess().Wait();
            return(() => businessDataUpdates.BusinessData);
        }
コード例 #2
0
        internal Func <BusinessData <TBusinessData> > GetCurrentBusinessData <TBusinessData, TBusinessDataUpdate>(
            Func <TBusinessData> createEmptyBusinessData,
            Func <TBusinessData, TBusinessDataUpdate, TBusinessData> applyUpdate)
        {
            var businessDataUpdates = new BusinessDataPump <TBusinessData, TBusinessDataUpdate>(
                demoCredential: this.demoCredential,
                createEmptyBusinessData: createEmptyBusinessData,
                applyUpdate: applyUpdate,
                snapshotContainerClient: new BlobContainerClient(
                    blobContainerUri: new Uri($"https://{this.demoCredential.BusinessDataSnapshotAccountName}.blob.core.windows.net/{this.demoCredential.BusinessDataSnapshotContainerName}/"),
                    credential: this.demoCredential.AADServicePrincipal));

            businessDataUpdates.StartUpdateProcess().Wait();
            return(() => businessDataUpdates.BusinessData);
        }
コード例 #3
0
        // This demo shows how you can consume business data.
        private static async Task Main(string[] args)
        {
            Console.Title = "Business Data User";

            IDistributedSearchConfiguration demoCredential = new DemoCredential();

            var cts = new CancellationTokenSource();

            var businessDataPump = new BusinessDataPump <FashionBusinessData, FashionBusinessDataUpdate>(
                demoCredential: demoCredential,
                createEmptyBusinessData: newFashionBusinessData,
                applyUpdate: FashionBusinessDataExtensions.ApplyFashionUpdate,
                snapshotContainerClient: new BlobContainerClient(
                    blobContainerUri: new Uri($"https://{demoCredential.BusinessDataSnapshotAccountName}.blob.core.windows.net/{demoCredential.BusinessDataSnapshotContainerName}/"),
                    credential: demoCredential.AADServicePrincipal));

            Func <BusinessData <FashionBusinessData>, string> bdToStr = bd => string.Join(" ",
                                                                                          bd.Data.Markup.Select(kvp => $"{kvp.Key}={kvp.Value}").ToArray());

            bool demoObservable = true;

            if (demoObservable)
            {
                // This code observes business data changes and only prints when there have been changes.
                // One line oer change, only when something changes.
                var businessDataObservable = await businessDataPump.CreateObservable(cts.Token);

                businessDataObservable.Subscribe(onNext: async bd =>
                {
                    await Console.Out.WriteLineAsync(bdToStr(bd));
                }, token: cts.Token);

                _ = await Console.In.ReadLineAsync();

                cts.Cancel();
            }
            else
            {
                // This code runs in an endless loop, and prints the business data (regardless whether it changed or not)
                // Prints out the same message, if there are no changes.
                await businessDataPump.StartUpdateProcess(cts.Token);

                while (true)
                {
                    await Console.Out.WriteLineAsync(bdToStr(businessDataPump.BusinessData));
                }
            }
        }
コード例 #4
0
        private static async Task Main()
        {
            Console.Title = "Update Configuration";

            IDistributedSearchConfiguration demoCredential = new DemoCredential();

            var businessDataUpdates = new BusinessDataPump <FashionBusinessData, FashionBusinessDataUpdate>(
                demoCredential: demoCredential,
                createEmptyBusinessData: newFashionBusinessData,
                applyUpdate: FashionBusinessDataExtensions.ApplyFashionUpdate,
                snapshotContainerClient: new BlobContainerClient(
                    blobContainerUri: new Uri($"https://{demoCredential.BusinessDataSnapshotAccountName}.blob.core.windows.net/{demoCredential.BusinessDataSnapshotContainerName}/"),
                    credential: demoCredential.AADServicePrincipal));

            while (true)
            {
                await Console.Out.WriteAsync($"Please enter an item and a price, separated by a space: ");

                var input = await Console.In.ReadLineAsync();

                var values = input.Split(" ");
                if (values.Length != 2)
                {
                    continue;
                }
                var item = values[0];

                if (!decimal.TryParse(values[1], out var newMarkup))
                {
                    continue;
                }

                var update = FashionBusinessDataUpdate.NewMarkupUpdate(
                    fashionType: item,
                    markupPrice: newMarkup);

                // Here, we're directly dropping the update in Kafka.
                // This must be replaced with a secured HTTP request.
                var watermark = await businessDataUpdates.SendUpdate(update);

                await Console.Out.WriteLineAsync($"Update sent for {newMarkup} (#{watermark.Item})");
            }
        }
コード例 #5
0
        private static async Task Main()
        {
            Console.Title = "Snapshot Generator Service";

            IDistributedSearchConfiguration demoCredential = new DemoCredential();

            var businessDataPump = new BusinessDataPump <FashionBusinessData, FashionBusinessDataUpdate>(
                demoCredential: demoCredential,
                createEmptyBusinessData: newFashionBusinessData,
                applyUpdate: FashionBusinessDataExtensions.ApplyFashionUpdate,
                snapshotContainerClient: new BlobContainerClient(
                    blobContainerUri: new Uri($"https://{demoCredential.BusinessDataSnapshotAccountName}.blob.core.windows.net/{demoCredential.BusinessDataSnapshotContainerName}/"),
                    credential: demoCredential.AADServicePrincipal));

            var cts = new CancellationTokenSource();
            IObservable <BusinessData <FashionBusinessData> > businessDataObservable = await businessDataPump.CreateObservable(cts.Token);

            businessDataObservable
            .Sample(interval: TimeSpan.FromSeconds(5))
            .Subscribe(
                onNext: async bd =>
            {
                await Console.Out.WriteLineAsync($"{bd.AsJSON()}");
                var snapshotName = await businessDataPump.WriteBusinessDataSnapshot(bd);
                await Console.Out.WriteLineAsync($"wrote snapshot {snapshotName}");
            },
                onError: ex => Console.Error.WriteLine($"ERROR: {ex.Message}"),
                onCompleted: () => Console.Out.WriteLine($"Completed"),
                token: cts.Token);

            await Console.Out.WriteAsync("Press <return> to stop snapshot generation");

            _ = await Console.In.ReadLineAsync();

            cts.Cancel();
        }
コード例 #6
0
 public BusinessDataUpdateController(BusinessDataPump <FashionBusinessData, FashionBusinessDataUpdate> businessDataProvider)
 {
     this.businessDataProvider = businessDataProvider;
 }