Bagikan melalui


Panduan arsitektur dorong perusahaan

Perusahaan saat ini secara bertahap bergerak menuju pembuatan aplikasi seluler untuk pengguna akhir mereka (eksternal) atau untuk karyawan (internal). Mereka memiliki sistem backend yang ada di tempat baik itu mainframe atau beberapa aplikasi LoB, yang harus diintegrasikan ke dalam arsitektur aplikasi seluler. Panduan ini berbicara tentang cara terbaik untuk melakukan integrasi ini yang merekomendasikan kemungkinan solusi untuk skenario umum.

Persyaratan yang sering adalah untuk mengirim pemberitahuan push kepada pengguna melalui aplikasi seluler mereka ketika peristiwa yang menarik terjadi di sistem backend. Misalnya, pelanggan bank yang memiliki aplikasi perbankan bank di iPhone ingin diberi tahu ketika debit dibuat di atas jumlah tertentu dari akun atau skenario intranet di mana karyawan dari departemen keuangan yang memiliki aplikasi persetujuan anggaran di Windows Phone ingin diberi tahu ketika permintaan persetujuan diterima.

Pemrosesan rekening bank atau persetujuan kemungkinan akan dilakukan dalam beberapa sistem backend, yang harus mengirimkan pemberitahuan kepada pengguna. Mungkin ada beberapa sistem backend seperti itu, yang semuanya harus membangun jenis logika yang sama untuk mendorong pemberitahuan saat suatu peristiwa dipicu. Kompleksitas di sini terletak pada mengintegrasikan beberapa sistem backend bersama dengan sistem push tunggal di mana pengguna akhir mungkin telah berlangganan pemberitahuan yang berbeda dan bahkan mungkin ada beberapa aplikasi seluler. Misalnya, aplikasi seluler intranet di mana satu aplikasi seluler mungkin ingin menerima pemberitahuan dari beberapa sistem backend tersebut. Sistem backend tidak mengetahui atau perlu mengetahui semantik atau teknologi push sehingga solusi umum di sini secara tradisional adalah memperkenalkan komponen, yang melakukan polling pada sistem backend untuk setiap peristiwa yang menarik dan bertanggung jawab untuk mengirim pesan push ke klien.

Solusi yang lebih baik adalah menggunakan Azure Service Bus - Model Topik/Langganan, yang mengurangi kompleksitas sekaligus membuat solusi dapat diskalakan.

Berikut adalah arsitektur umum solusi (digeneralisasi dengan beberapa aplikasi seluler tetapi sama-sama berlaku ketika hanya ada satu aplikasi seluler)

Arsitektur

Diagram arsitektur perusahaan memperlihatkan alur melalui Peristiwa, Langganan, dan Pesan Push.

Bagian utama dalam diagram arsitektur ini adalah Azure Service Bus, yang menyediakan model pemrograman topik/langganan (lebih lanjut di pemrograman Service Bus Pub/Sub). Penerima, yang dalam hal ini, adalah backend seluler (biasanya Azure Mobile Service, yang memulai pendorongan ke aplikasi mobile) tidak menerima pesan langsung dari sistem backend melainkan dari lapisan abstraksi perantara yang disediakan oleh Azure Service Bus, yang memungkinkan backend seluler untuk menerima pesan dari satu atau beberapa sistem backend. Topik Bus Layanan perlu dibuat untuk setiap sistem backend, misalnya, Akun, SDM, Keuangan, yang pada dasarnya merupakan topik yang relevan, yang memulai dikirimkannya pesan sebagai notifikasi push. Sistem backend mengirim pesan ke topik-topik ini. Mobile Backend dapat berlangganan pada satu atau lebih topik tersebut dengan membuat langganan Bus Layanan. Ini memberi izin pada backend seluler untuk menerima pemberitahuan dari sistem backend yang sesuai. Latar belakang seluler terus mendengarkan pesan di langganan mereka, dan segera setelah pesan tiba, sistem bagian belakang akan berbalik dan mengirimkannya sebagai notifikasi ke hub notifikasinya. Hub pemberitahuan kemudian akhirnya mengirimkan pesan ke aplikasi seluler. Berikut adalah daftar komponen utama:

  1. Sistem belakang (sistem LoB/sistem Legacy)
    • Membuat Topik Service Bus
    • Mengirim Pesan
  2. Backend seluler
    • Membuat Langganan Layanan
    • Menerima Pesan (dari sistem Backend)
    • Mengirim pemberitahuan ke klien (melalui Azure Notification Hub)
  3. Aplikasi Seluler
    • Menerima dan menampilkan pemberitahuan

Keuntungan

  1. Pemisahan antara penerima (aplikasi/layanan seluler melalui Notification Hub) dan pengirim (sistem backend) memungkinkan sistem backend tambahan diintegrasikan dengan perubahan minimal.
  2. Ini juga memfasilitasi skenario di mana berbagai aplikasi seluler dapat menerima kejadian dari satu atau lebih sistem backend.

Contoh

Prasyarat

Selesaikan tutorial berikut untuk membiasakan konsep serta langkah-langkah pembuatan & konfigurasi umum:

  1. Pemrograman Service Bus Pub/Sub - Tutorial ini menjelaskan detail bekerja dengan Topik/Abonemen Bus Layanan, cara membuat namespace layanan untuk menyimpan topik/abonemen, cara mengirim & menerima pesan dari topik/abonemen tersebut.
  2. Notification Hubs - Tutorial Windows Universal - Tutorial ini menjelaskan cara menyiapkan aplikasi Windows Store dan menggunakan Notification Hubs untuk mendaftar lalu menerima pemberitahuan.

Contoh kode

Kode sampel lengkap tersedia di Sampel Notification Hub. Ini dibagi menjadi tiga komponen:

  1. EnterprisePushBackendSystem

    a. Proyek ini menggunakan paket Azure.Messaging.ServiceBus NuGet dan didasarkan pada pemrograman Service Bus Pub/Sub.

    b. Aplikasi ini adalah aplikasi konsol C# sederhana untuk mensimulasikan sistem LoB, yang memulai pesan yang akan dikirimkan ke aplikasi seluler.

    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. CreateTopicAsync digunakan untuk membuat topik Service Bus.

    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. SendMessageAsync digunakan untuk mengirim pesan ke Topik Bus Layanan ini. Kode ini hanya mengirim serangkaian pesan acak ke topik secara berkala untuk tujuan sampel. Biasanya ada sistem backend, yang mengirim pesan ketika peristiwa terjadi.

    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. TerimaDanKirimNotifikasi

    a. Proyek ini menggunakan paket Azure.Messaging.ServiceBus dan Microsoft.Web.WebJobs.Publish NuGet dan didasarkan pada pemrograman Service Bus Pub/Sub.

    b. Aplikasi konsol berikut berjalan sebagai Azure WebJob karena harus berjalan terus menerus untuk mendengarkan pesan dari sistem LoB/backend. Aplikasi ini adalah bagian dari backend Seluler Anda.

    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. CreateSubscriptionAsync digunakan untuk membuat langganan Service Bus untuk topik di mana sistem backend mengirim pesan. Tergantung pada skenario bisnis, komponen ini membuat satu atau beberapa langganan ke topik yang sesuai (misalnya, beberapa mungkin menerima pesan dari sistem SDM, beberapa dari sistem Keuangan, dan sebagainya)

    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. ReceiveMessageAndSendNotificationAsync digunakan untuk membaca pesan dari topik menggunakan langganannya. Jika bacaan berhasil, maka membuat pemberitahuan (dalam skenario contoh berupa pemberitahuan toast bawaan Windows) untuk dikirim ke aplikasi seluler menggunakan 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. Untuk menerbitkan aplikasi ini sebagai WebJob, klik kanan pada solusi di Visual Studio dan pilih Terbitkan sebagai WebJob

    Cuplikan layar opsi klik kanan yang ditampilkan dengan Terbitkan sebagai Azure WebJob yang diuraikan dengan warna merah.

    f. Pilih profil penerbitan Anda dan buat Situs Web Azure baru jika belum ada, yang menghosting WebJob ini dan setelah Anda memiliki Situs Web lalu Terbitkan.

    Cuplikan layar memperlihatkan alur kerja untuk membuat situs di Azure.

    Cuplikan layar kotak dialog Terbitkan Web dengan opsi Situs Web Microsoft Azure dipilih, panah hijau yang menunjuk ke kotak dialog Pilih Situs Web yang Sudah Ada dengan opsi Baru yang diuraikan dalam warna merah, dan panah hijau menunjuk ke kotak dialog Buat situs di Microsoft Azure dengan nama Situs dan Buat opsi yang diuraikan dengan warna merah.

    g. Konfigurasikan pekerjaan menjadi "Jalankan Terus Menerus" sehingga saat Anda masuk ke portal Microsoft Azure , Anda akan melihat sesuatu seperti berikut ini:

    Cuplikan layar Portal Microsoft Azure dengan webjobs backend push perusahaan ditampilkan dan nilai Nama, Jadwal, dan Log yang diuraikan dengan warna merah.

  3. EnterprisePushMobileApp

    a. Aplikasi ini adalah aplikasi Windows Store, yang menerima notifikasi toast dari WebJob yang berjalan sebagai bagian dari backend aplikasi Seluler Anda dan menampilkan notifikasi tersebut. Kode ini didasarkan pada Notification Hubs - Tutorial Windows Universal.

    b. Pastikan aplikasi Anda diaktifkan untuk menerima notifikasi toast.

    c. Pastikan bahwa kode pendaftaran Notification Hubs berikut dipanggil saat aplikasi dimulai (setelah mengganti nilai HubName dan DefaultListenSharedAccessSignature)

    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();
        }
    }
    

Menjalankan sampel

  1. Pastikan WebJob Anda berjalan dengan sukses dan dijadwalkan untuk berjalan terus menerus.

  2. Jalankan EnterprisePushMobileApp, yang memulai aplikasi Windows Store.

  3. Jalankan aplikasi konsol EnterprisePushBackendSystem, yang menirukan backend LoB dan mulai mengirim pesan. Anda akan melihat notifikasi toast muncul seperti gambar berikut:

    Cuplikan layar konsol yang menjalankan aplikasi Enterprise Push Backend System dan pesan yang dikirim oleh aplikasi.

  4. Pesan awalnya dikirim ke topik Service Bus, yang dipantau oleh langganan Service Bus dalam Web Job Anda. Setelah pesan diterima, pemberitahuan dibuat dan dikirim ke aplikasi seluler. Anda dapat melihat log WebJob untuk mengonfirmasi pemrosesan saat membuka tautan Log di portal Microsoft Azure untuk Pekerjaan Web Anda:

    Cuplikan layar kotak dialog Detail WebJob Berkelanjutan dengan pesan yang dikirim ditandai dengan warna merah.