Panduan arsitektur push enterprise
Saat ini, banyak perusahaan yang secara bertahap mulai membuat aplikasi seluler untuk pengguna akhir (eksternal) mau pun untuk karyawannya (internal). Semua perusahaan ini memiliki sistem backend yang terpasang pada mainframe atau beberapa aplikasi LoB dan harus diintegrasikan ke dalam arsitektur aplikasi seluler. Panduan ini memberikan informasi tentang cara terbaik untuk melakukan integrasi dengan rekomendasi solusi yang dapat digunakan dalam beberapa skenario umum.
Persyaratan yang sering diminta adalah untuk mengirim pemberitahuan push kepada pengguna melalui aplikasi seluler mereka ketika ada kejadian penting di dalam sistem backend. Misalnya, pelanggan bank yang memiliki aplikasi perbankan di iPhone ingin mendapatkan pemberitahuan ketika terjadi transaksi debit di atas jumlah tertentu dari akunnya atau skenario intranet saat karyawan dari departemen keuangan yang memiliki aplikasi persetujuan anggaran pada Windows Phone ingin mendapatkan pemberitahuan ketika permintaan persetujuan diterima.
Pemrosesan rekening bank atau persetujuan mungkin akan dilakukan dalam beberapa sistem backend, yang mengharuskan sistem ini memulai push (pendorongan) kepada pengguna. Mungkin ada beberapa sistem backend yang harus membangun jenis logika yang sama untuk mendorong ketika satu peristiwa memicu pemberitahuan. Kompleksitas di sini terletak pada integrasi beberapa sistem backend dengan sistem pendorongan tunggal ketika pengguna akhir mungkin telah berlangganan pemberitahuan yang berbeda dan bahkan mungkin mempunyai beberapa aplikasi seluler. Misalnya, aplikasi seluler intranet di manasatu aplikasi seluler yang mungkin dapat menerima pemberitahuan dari beberapa sistem backend tersebut. Sistem backend tidak tahu atau tidak perlu tahu tentang semantik /teknologi push, jadi solusi umum di sini secara tradisional telah memperkenalkan komponen yang memeriksa status pada sistem backend untuk setiap peristiwa penting dan bertanggung jawab untuk mengirim pesan push kepada klien.
Solusi yang lebih baik adalah menggunakan Topik/Model langganan - Azure Service Bus, yang dapat mengurangi kompleksitas sekaligus membuat solusi secara terukur.
Berikut adalah arsitektur umum solusi (secara umum dapat digunakan untuk beberapa aplikasi seluler sekaligus, tetapi berlaku juga ketika hanya ada satu aplikasi seluler)
Arsitektur
Bagian kunci dalam diagram arsitektur ini adalah Azure Service Bus, yang menyediakan topik/model pemrograman langganan (lihat lebih lanjut pada pemrograman Azure Service Bus Pub/Sub. Penerima, yaitu Backend seluler (biasanya Azure Mobile Service, yang memulai pendorongan ke aplikasi seluler) tidak menerima pesan langsung dari sistem backend, tetapi melalui lapisan abstraksi perantara yang disediakan oleh Azure Service Bus sehingga memungkinkan backend seluler untuk menerima pesan dari satu sistem backend atau lebih. Topik Bus Layanan perlu dibuat untuk setiap sistem backend, misalnya, Akun, SDM, Keuangan, yang pada dasarnya adalah "topik" yang menarik, yang memulai pesan untuk dikirim sebagai pemberitahuan push. Sistem backend mengirim pesan ke topik ini. Backend Seluler dapat berlangganan ke satu atau beberapa topik tersebut dengan membuat langganan pada Azure Service Bus. Langganan ini memungkinkan backend seluler menerima pemberitahuan dari sistem backend yang sesuai. Backend seluler terus-menerus mendengarkan pesan pada langganan mereka dan segera setelah pesan diterima, pesan akan dikembalikan dan dikirimkan sebagai pemberitahuan ke hub pemberitahuannya. Hub pemberitahuan nantinya akan mengirimkan pesan ke aplikasi seluler. Berikut adalah daftar komponen utama:
- Sistem backend (sistem LoB/Warisan)
- Membuat Topik Microsoft Azure Service Bus
- Mengirim Pesan
- Backend seluler
- Membuat Langganan Layanan
- Menerima Pesan (dari sistem Backend)
- Mengirim pemberitahuan ke klien (melalui Hub Pemberitahuan Azure)
- Aplikasi Seluler
- Menerima dan menampilkan pemberitahuan
Keuntungan
- Pemisahan antara penerima (aplikasi seluler/layanan melalui Hub Pemberitahuan) dan pengirim (sistem backend) memungkinkan sistem backend tambahan berintegrasi dengan perubahan minimal.
- Pemisahan ini juga membuat skenario beberapa aplikasi seluler dapat menerima peristiwa dari satu sistem backend atau lebih.
Sampel
Prasyarat
Pelajari tutorial berikut secara lengkap untuk memahami konsep beserta langkah-langkah pembuatan umum dan konfigurasi:
- Pemrograman Azure Service Bus Pub/Sub - Tutorial ini menjelaskan detail cara kerja Topik/Langganan Azure Service Bus, cara membuat kumpulan nama XML yang berisi topik/langganan, serta cara mengirim & menerima pesan dari topik/langganan.
- Microsoft Azure Notification Hubs - Tutorial Universal Windows - Tutorial ini menjelaskan cara menyiapkan aplikasi Windows Microsoft Store dan menggunakan Microsoft Azure Notification Hubs untuk mendaftar dan nantinya menerima pemberitahuan.
Kode Sampel
Kode sampel lengkap tersedia di Sampel Hub Pemberitahuan. Kode sampel ini dibagi menjadi tiga komponen:
EnterprisePushBackendSystem
a. Proyek ini menggunakan paket NuGet Azure.Messaging.ServiceBus dan berdasarkan pada pemrograman Azure Service Bus Pub/Sub.
b. Aplikasi ini adalah aplikasi konsol C# sederhana untuk menyimulasikan sistem LoB dan membuat pesan terkirim 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 Microsoft Azure 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 Azure Service Bus ini. Kode ini hanya mengirim satu set pesan acak ke topik secara berkala untuk keperluan sampel. Umumnya, terdapat sistem backend yang akan mengirim pesan ketika terjadi peristiwa.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)); } }
ReceiveAndSendNotification
a. Proyek ini menggunakan paket NuGet Azure.Messaging.ServiceBus dan Microsoft.Web.WebJobs.Publish, berdasarkan pada pemrograman Azure Service Bus Pub/Sub.
b. Aplikasi konsol berikut dieksekusi sebagai Azure WebJob karena harus berjalan secara berkelanjutan 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 Azure Service Bus untuk topik tempat sistem backend mengirim pesan. Tergantung pada skenario bisnisnya, komponen ini membuat satu atau lebih 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 dan jika bacaan berhasil kemudian membuat pemberitahuan (dalam skenario sampel pemberitahuan toast asli Windows) untuk dikirim ke aplikasi seluler menggunakan Microsoft 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
f. Pilih profil penerbitan Anda dan buat Azure WebSite baru, jika belum ada, untuk yang akan menghosting WebJob ini dan setelah Anda memiliki Situs Web, lalu Terbitkan.
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 dioutline merah, dan panah hijau menunjuk ke kotak dialog Buat situs web pada Microsoft Azure dengan Nama situs dan Buat opsi dioutline merah.
g. Mengonfigurasi tugas dengan "Jalankan Secara Berkelanjutan" sehingga ketika Anda masuk ke portal Microsoft Azure, Anda akan melihat hal-hal berikut ini:
EnterprisePushMobileApp
a. Aplikasi ini adalah aplikasi Windows Microsoft Store yang menerima pemberitahuan toast dari WebJob yang berjalan sebagai bagian dari backend Mobile Anda dan menampilkannya. Kode ini berdasarkan pada Microsoft Azure Notification Hubs - Tutorial Universal Windows.
b. Pastikan aplikasi Anda aktif untuk menerima pemberitahuan toast.
c. Pastikan bahwa kode pendaftaran Microsoft Azure Notification Hubs berikut dipanggil ketika memulai Aplikasi (setelah mengganti nilai
HubName
danDefaultListenSharedAccessSignature
: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
Pastikan WebJob Anda berjalan dengan sukses dan terjadwal secara berkelanjutan.
Jalankan EnterprisePushMobileApp, yang memulai aplikasi Windows Store.
Jalankan aplikasi konsol EnterprisePushBackendSystem, yang menyimulasikan backend LoB dan mulai mengirim pesan, lalu Anda akan melihat pemberitahuan toast muncul seperti pada gambar berikut:
Pesan awalnya dikirim ke topik Microsoft Azure Service Bus, yang dipantau oleh langganan Microsoft Azure Service Bus pada Web Job Anda. Setelah pesan diterima, notifikasi dibuat dan dikirim ke aplikasi seluler. Anda dapat melihat log WebJob untuk mengonfirmasi proses ketika Anda masuk ke tautan Log pada portal Microsoft Azure untuk Web Job Anda: