Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
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:
- Sistem belakang (sistem LoB/sistem Legacy)
- Membuat Topik Service Bus
- Mengirim Pesan
- Backend seluler
- Membuat Langganan Layanan
- Menerima Pesan (dari sistem Backend)
- Mengirim pemberitahuan ke klien (melalui Azure Notification Hub)
- Aplikasi Seluler
- Menerima dan menampilkan pemberitahuan
Keuntungan
- Pemisahan antara penerima (aplikasi/layanan seluler melalui Notification Hub) dan pengirim (sistem backend) memungkinkan sistem backend tambahan diintegrasikan dengan perubahan minimal.
- 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:
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.- 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:
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)); } }
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
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 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:
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
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 dijadwalkan untuk berjalan terus menerus.
Jalankan EnterprisePushMobileApp, yang memulai aplikasi Windows Store.
Jalankan aplikasi konsol EnterprisePushBackendSystem, yang menirukan backend LoB dan mulai mengirim pesan. Anda akan melihat notifikasi toast muncul seperti gambar berikut:
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: