Doprovodné materiály k architektuře nabízení v podnicích

Podniky v současné době se postupně pohybují k vytváření mobilních aplikací pro koncové uživatele (externí) nebo pro zaměstnance (interní). Mají stávající back-endové systémy na místě IT sálové nebo některé obchodní aplikace, které musí být integrovány do architektury mobilní aplikace. V této příručce se dozvíte, jak nejlépe provést tuto integraci, aby bylo možné řešení doporučit běžným scénářům.

Častým požadavkem je odesílat nabízená oznámení uživatelům prostřednictvím své mobilní aplikace, když dojde k nějakému zájmu v back-end systémech. například zákazník banky, který má bankovní aplikaci bank na iPhone, chce upozornit, když se na účtu navýší debet nad určitou částku z účtu nebo intranetového scénáře, kdy zaměstnanec z finančního oddělení, který má aplikaci pro schvalování rozpočtu na Windows Phone, chce upozornit, když se přijme žádost o schválení.

Bankovní účet nebo zpracování schválení se pravděpodobně provede v některém back-endu systému, který musí iniciovat uživateli nabízené oznámení. Může existovat několik takových back-end systémů, které musí všechny sestavovat stejný druh logiky, aby bylo možné je odeslat, když událost aktivuje oznámení. Složitost zde spočívá v integraci několika back-end systémů spolu s jediným systémem nabízených oznámení, kde se koncoví uživatelé můžou přihlásit k odběru různých oznámení a můžou existovat i několik mobilních aplikací. Například intranetové mobilní aplikace, ve kterých jedna mobilní aplikace může chtít dostávat oznámení z několika takových back-end systémů. Systémy back-end neznají ani nepotřebují znát sémantiku a technologii nabízených oznámení, takže běžné řešení je tradičně zavedlo k zavedení komponenty, která se dotáže back-endové systémy na všechny události, které vás zajímají, a zodpovídá za odeslání nabízených zpráv klientovi.

lepším řešením je použití modelu Azure Service Bus – tématu nebo předplatného, které zjednodušuje složitost a zároveň usnadňuje škálovatelné řešení.

Tady je obecná Architektura řešení (generalizovaná s více mobilními aplikacemi, ale i v případě, že je k dispozici jenom jedna mobilní aplikace).

Architektura

Diagram podnikové architektury znázorňující tok prostřednictvím událostí, předplatných a nabízených zpráv.

klíčovým kamenem v tomto diagramu architektury je Azure Service Bus, který poskytuje témata nebo programovací model předplatných (další informace najdete v tématu [Service Bus publikování do Pub/Sub]). příjemce, což je v tomto případě mobilní back-end (obvykle mobilní služba Azure, která iniciuje nabízení oznámení do mobilních aplikací), nepřijímá zprávy přímo ze systémů back-end, ale místo toho poskytuje zprostředkující vrstvu abstrakce poskytovanou službou Azure Service Bus, která umožňuje mobilnímu back-endu přijímat zprávy z jednoho nebo více back-end systémů. je třeba vytvořit Service Bus téma pro každý back-end systém, například účet, HR, Finance, který je v podstatě "důležité" témata, která zahájí odeslání zprávy jako nabízené oznámení. Back-endové systémy odesílají zprávy do těchto témat. mobilní back-end se může přihlásit k odběru jednoho nebo několika takových témat vytvořením předplatného Service Bus. Umožňuje mobilnímu back-endu přijímat oznámení z odpovídajícího systému back-end. Mobilní back-end nadále naslouchá zprávám ve svých předplatných a Jakmile přijde zpráva, přepíná a odesílá oznámení do centra oznámení. Centra oznámení nakonec doručovat zprávu do mobilní aplikace. Tady je seznam klíčových součástí:

  1. Back-endové systémy (LoB/starší systémy)
    • vytvoří Service Bus téma.
    • Odesílá zprávu.
  2. Mobilní back-end
    • Vytvoří předplatné služby.
    • Přijímá zprávu (ze systému back-end)
    • Odesílá oznámení klientům (prostřednictvím centra oznámení Azure).
  3. Mobilní aplikace
    • Přijímá a zobrazuje oznámení.

Výhody

  1. Oddělení mezi příjemcem (mobilní aplikace/služba prostřednictvím centra oznámení) a odesilatelem (back-end systémy) umožňuje integraci dalších back-end systémů s minimálními změnami.
  2. Také umožňuje situaci, kdy více mobilních aplikací dokáže přijímat události z jednoho nebo více back-end systémů.

Ukázka

Požadavky

Dokončete následující kurzy a seznamte se s koncepty a běžnými vytvářeními & kroky konfigurace:

  1. [Service Bus program pro publikování a následné] zpracování – v tomto kurzu se dozvíte, jak pomocí Service Bus témata a předplatná vytvořit obor názvů, který bude obsahovat témata nebo odběry, jak odesílat & zpráv z nich.
  2. [Notification Hubs – Windows univerzální kurz] – v tomto kurzu se dozvíte, jak nastavit aplikaci v Windows storu a použít Notification Hubs k registraci a následnému doručování oznámení.

Ukázka kódu

Úplný vzorový kód je k dispozici v [ukázkách centra oznámení]. Je rozdělen na tři komponenty:

  1. EnterprisePushBackendSystem

    a. tento projekt používá NuGet balíček Azure. Messaging. ServiceBus a je založen na [Service Busm programování pro publikování]a odesílání.

    b. Tato aplikace je jednoduchá Konzolová aplikace v jazyce C# pro simulaci systému LoB, která zahájí doručení zprávy do mobilní aplikace.

    static async Task Main(string[] args)
    {
        string connectionString =
            ConfigurationManager.AppSettings.Get("Azure.ServiceBus.ConnectionString");
    
        // Create the topic
        await CreateTopicAsync(connectionString);
    
        // Send message
        await SendMessageAsync(connectionString);
    }
    

    c. CreateTopicAsyncslouží k vytvoření Service Busho tématu.

    public static async Task CreateTopicAsync(string connectionString)
    {
        // Create the topic if it does not exist already
        ServiceBusAdministrationClient client = new ServiceBusAdministrationClient(connectionString);
    
        if (!await client.TopicExistsAsync(topicName))
        {
            await client.CreateTopicAsync(topicName);
        }
    }
    

    d. SendMessageAsyncslouží k odeslání zpráv do tohoto Service Bus tématu. Tento kód jednoduše pošle do tématu sadu náhodných zpráv pro účely ukázky. Obvykle existuje systém back-end, který odesílá zprávy, když dojde k události.

    public static sync Task SendMessageAsync(string connectionString)
    {
        await using var client = new ServiceBusClient(connectionString);
        ServiceBusSender sender = client.CreateSender(topicName);
    
        // Sends random messages every 10 seconds to the topic
        string[] messages =
        {
            "Employee Id '{0}' has joined.",
            "Employee Id '{0}' has left.",
            "Employee Id '{0}' has switched to a different team."
        };
    
        while (true)
        {
            Random rnd = new Random();
            string employeeId = rnd.Next(10000, 99999).ToString();
            string notification = String.Format(messages[rnd.Next(0,messages.Length)], employeeId);
    
            // Send Notification
            ServiceBusMessage message = new ServiceBusMessage(notification);
            await sender.SendMessageAsync(message);
    
            Console.WriteLine("{0} Message sent - '{1}'", DateTime.Now, notification);
    
            System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
        }
    }
    
  2. ReceiveAndSendNotification

    a. tento projekt využívá balíčky Azure. Messaging. ServiceBus a Microsoft. Web. webjobs. Publish NuGet a je založen na [Service Busm programování]pro publikování a odesílání.

    b. Následující aplikace konzoly se spouští jako Webová úloha Azure , protože musí běžet nepřetržitě, aby naslouchala zpráv ze systémů LOB a back-endu. Tato aplikace je součástí vašeho mobilního back-endu.

    static async Task Main(string[] args)
    {
        string connectionString =
                 ConfigurationManager.AppSettings.Get("Azure.ServiceBus.ConnectionString");
    
        // Create the subscription that receives messages
        await CreateSubscriptionAsync(connectionString);
    
        // Receive message
        await ReceiveMessageAndSendNotificationAsync(connectionString);
    }
    

    c. CreateSubscriptionAsyncslouží k vytvoření předplatného Service Bus pro téma, kde back-end systém odesílá zprávy. V závislosti na obchodním scénáři Tato součást vytvoří jedno nebo více předplatných odpovídajících tématům (například některé můžou přijímat zprávy ze systému HR, některé z finančních systémů a tak dále).

    static async Task CreateSubscriptionAsync(string connectionString)
    {
        // Create the subscription if it does not exist already
        ServiceBusAdministrationClient client = new ServiceBusAdministrationClient(connectionString);
    
        if (!await client.SubscriptionExistsAsync(topicName, subscriptionName))
        {
            await client.CreateSubscriptionAsync(topicName, subscriptionName);
        }
    }
    

    d. ReceiveMessageAndSendNotificationAsyncse používá ke čtení zprávy z tématu pomocí svého předplatného, a pokud je čtení úspěšné, pak se vytvoří oznámení (ve vzorovém scénáři Windows nativní informační oznámení), které se pošle do mobilní aplikace pomocí Azure Notification Hubs.

    static async Task ReceiveMessageAndSendNotificationAsync(string connectionString)
    {
        // Initialize the Notification Hub
        string hubConnectionString = ConfigurationManager.AppSettings.Get
                ("Microsoft.NotificationHub.ConnectionString");
        hub = NotificationHubClient.CreateClientFromConnectionString
                (hubConnectionString, "enterprisepushservicehub");
    
        ServiceBusClient Client = new ServiceBusClient(connectionString);
        ServiceBusReceiver receiver = Client.CreateReceiver(topicName, subscriptionName);
    
        // Continuously process messages received from the subscription
        while (true)
        {
            ServiceBusReceivedMessage message = await receiver.ReceiveMessageAsync();
            var toastMessage = @"<toast><visual><binding template=""ToastText01""><text id=""1"">{messagepayload}</text></binding></visual></toast>";
    
            if (message != null)
            {
                try
                {
                    Console.WriteLine(message.MessageId);
                    Console.WriteLine(message.SequenceNumber);
                    string messageBody = message.Body.ToString();
                    Console.WriteLine("Body: " + messageBody + "\n");
    
                    toastMessage = toastMessage.Replace("{messagepayload}", messageBody);
                    SendNotificationAsync(toastMessage);
    
                    // Remove message from subscription
                    await receiver.CompleteMessageAsync(message);
                }
                catch (Exception)
                {
                    // Indicate a problem, unlock message in subscription
                    await receiver.AbandonMessageAsync(message);
                }
            }
        }
    }
    static async void SendNotificationAsync(string message)
    {
        await hub.SendWindowsNativeNotificationAsync(message);
    }
    

    e. pokud chcete tuto aplikaci publikovat jako webovou úlohu, klikněte pravým tlačítkem na řešení v Visual Studio a vyberte publikovat jako webovou úlohu .

    Snímek obrazovky s možnostmi napravo od pravého tlačítka, která se zobrazuje s možností publikovat jako Azure WebJob, je popsaný červeně.

    f. Vyberte svůj profil publikování a vytvořte nový web Azure, pokud už neexistuje, který je hostitelem této webové úlohy, a až potom web publikujte.

    Snímek obrazovky znázorňující pracovní postup k vytvoření webu v Azure

    snímek obrazovky dialogového okna publikovat web s vybranou možností Microsoft Azure weby, zelená šipka ukazující na dialogové okno vybrat existující web s novou možností popsaný červeně a zelenou šipkou ukazující na dialogové okno vytvořit web v Microsoft Azure s názvem webu a možnostmi popsanými červeně.

    například Nakonfigurujte úlohu tak, aby běžela průběžně, takže když se přihlásíte k Azure Portal , mělo by se zobrazit něco jako v následujícím seznamu:

    Snímek obrazovky s portálem Azure Portal se zobrazenými WebJobs back-endu (Enterprise push back-end) a hodnotami názvů, plánů a protokolů popsaných červeně

  3. EnterprisePushMobileApp

    a. tato aplikace je aplikace Windows storu, která přijímá informační zprávy z webové úlohy spuštěné jako součást mobilního back-endu a zobrazuje je. tento kód je založený na [Notification Hubsm Windowsm univerzálním kurzu].

    b. Ujistěte se, že je ve vaší aplikaci povolený příjem oznámení informačními zprávami.

    c. Zajistěte, aby se při spuštění aplikace volala následující registrační kód Notification Hubs (po nahrazení HubName DefaultListenSharedAccessSignature hodnot a:

    private async void InitNotificationsAsync()
    {
        var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
        var hub = new NotificationHub("[HubName]", "[DefaultListenSharedAccessSignature]");
        var result = await hub.RegisterNativeAsync(channel.Uri);
    
        // Displays the registration ID so you know it was successful
        if (result.RegistrationId != null)
        {
            var dialog = new MessageDialog("Registration successful: " + result.RegistrationId);
            dialog.Commands.Add(new UICommand("OK"));
            await dialog.ShowAsync();
        }
    }
    

Spuštění ukázky

  1. Ujistěte se, že je vaše webová úloha úspěšně spuštěná a že je naplánováno jejich nepřetržité spuštění.

  2. spusťte EnterprisePushMobileApp, ve kterém se spustí aplikace Windows Store.

  3. Spusťte konzolovou aplikaci EnterprisePushBackendSystem , která simuluje back-end LOB a začne odesílat zprávy a měla by se zobrazit informační zpráva, která se zobrazí jako na následujícím obrázku:

    snímek obrazovky konzoly, na které běží aplikace Enterprise Push back-end System a zpráva odeslaná aplikací

  4. zprávy byly původně odeslány pro Service Bus témata, která byla monitorována Service Bus odběry ve webové úloze. Po přijetí zprávy se vytvoří oznámení a pošle se do mobilní aplikace. Můžete procházet protokoly webové úlohy a potvrdit zpracování při přechodu na odkaz protokoly v Azure Portal pro vaši webovou úlohu:

    Snímek obrazovky dialogového okna průběžné podrobnosti WebJob se zprávou, která je odeslána červeně.