Kurumsal gönderme mimari kılavuzu
Günümüzde kuruluşlar, son kullanıcıları (dış) veya çalışanlar (şirket içi) için mobil uygulamalar oluşturmaya yavaş yavaş devam etmektedir. Ana bilgisayarlar veya mobil uygulama mimarisiyle tümleştirilmesi gereken bazı LoB uygulamaları gibi mevcut arka uç sistemleri vardır. Bu kılavuzda, yaygın senaryolara olası çözüm önererek bu tümleştirmenin nasıl en iyi şekilde gerçekleştirilmesi hakkında bilgi verilmektedir.
Sık karşılaşılan bir gereksinim, arka uç sistemlerinde ilgi çekici bir olay oluştuğunda kullanıcılara mobil uygulamaları aracılığıyla anında iletme bildirimi göndermektir. Örneğin, i Telefon üzerinde bankanın bankacılık uygulamasına sahip bir banka müşterisi, windows Telefon bütçe onay uygulamasına sahip finans departmanı çalışanının onay isteği alındığında bildirim almak istediği hesaptan veya intranet senaryosundan belirli bir tutarın üzerinde bir ödeme yapıldığında bildirim almak ister.
Banka hesabı veya onay işleme, kullanıcıya gönderimi başlatması gereken bir arka uç sisteminde gerçekleştirilebilir. Bir olay bir bildirim tetiklediğinde göndermek için aynı mantık türünü oluşturması gereken bu tür birden çok arka uç sistemi olabilir. Buradaki karmaşıklık, son kullanıcıların farklı bildirimlere abone olabileceği ve hatta birden fazla mobil uygulama olabileceği tek bir gönderim sistemiyle birkaç arka uç sistemini tümleştirmektir. Örneğin, bir mobil uygulamanın bu tür birden çok arka uç sisteminden bildirim almak isteyebileceği intranet mobil uygulamaları. Arka uç sistemleri, itme semantiğini/teknolojisini bilmez veya bilmesi gerekmez, bu nedenle buradaki yaygın bir çözüm geleneksel olarak arka uç sistemlerini ilgilenilen olaylar için yoklayan ve istemciye gönderme iletilerini göndermekle sorumlu olan bir bileşen tanıtmaktır.
Daha iyi bir çözüm, çözümü ölçeklenebilir hale getirirken karmaşıklığı azaltan Azure Service Bus - Konu/Abonelik modelini kullanmaktır.
Çözümün genel mimarisi aşağıdadır (birden çok mobil uygulamayla genelleştirilmiştir, ancak yalnızca bir mobil uygulama olduğunda aynı şekilde uygulanabilir)
Mimari
Bu mimari diyagramın en önemli parçası, bir konu/abonelik programlama modeli sağlayan Azure Service Bus'tır (Service Bus Pub/Sub programlama bölümünde daha fazla bilgi sağlanır). Bu durumda alıcı, Mobil arka ucudur (genellikle mobil uygulamalara gönderim başlatan Azure Mobile Service), doğrudan arka uç sistemlerinden ileti almaz, bunun yerine Azure Service Bus tarafından sağlanan ve mobil arka ucun bir veya daha fazla arka uç sisteminden ileti almasını sağlayan bir ara soyutlama katmanıdır. Arka uç sistemlerinin her biri için temel olarak "ilgilenilen konular" olan ve anında iletme bildirimi olarak gönderilecek iletileri başlatan Hesap, İk, Finans gibi bir Service Bus Konusu oluşturulması gerekir. Arka uç sistemleri bu konulara ileti gönderir. Mobil Arka Uç, Service Bus aboneliği oluşturarak bir veya daha fazla konuya abone olabilir. Mobil arka ucun ilgili arka uç sisteminden bildirim almasını sağlar. Mobil arka uç, aboneliklerindeki iletileri dinlemeye devam eder ve bir ileti gelir gelmez geri döner ve bildirim hub'ına bildirim olarak gönderir. Bildirim hub'ları daha sonra iletiyi mobil uygulamaya teslim eder. Temel bileşenlerin listesi aşağıdadır:
- Arka uç sistemleri (LoB/Eski sistemler)
- Service Bus Konusu Oluşturur
- İleti Gönderir
- Mobil arka uç
- Hizmet Aboneliği Oluşturur
- İleti alır (Arka uç sisteminden)
- İstemcilere bildirim gönderir (Azure Notification Hub aracılığıyla)
- Mobil Uygulama
- Bildirim alır ve görüntüler
Sosyal haklar
- Alıcı (Notification Hub aracılığıyla mobil uygulama/hizmet) ile gönderen (arka uç sistemleri) arasındaki ayırma, ek arka uç sistemlerinin minimum değişiklikle tümleştirilmesini sağlar.
- Ayrıca, birden çok mobil uygulamanın bir veya daha fazla arka uç sisteminden olay alabilmesini de sağlar.
Örnek
Önkoşullar
Kavramları ve yaygın oluşturma ve yapılandırma adımlarını öğrenmek için aşağıdaki öğreticileri tamamlayın:
- Service Bus Pub/Sub programlaması - Bu öğreticide Service Bus Konuları/Abonelikleri ile çalışmanın ayrıntıları, konuları/abonelikleri içerecek bir ad alanı oluşturma, onlardan ileti gönderme ve alma işlemleri açıklanmaktadır.
- Notification Hubs - Windows Evrensel öğreticisi - Bu öğreticide bir Windows Mağazası uygulamasını ayarlama ve Notification Hubs kullanarak kaydolma ve bildirim alma işlemleri açıklanmaktadır.
Örnek kod
Tam örnek kodu Notification Hub Örnekleri'nde bulabilirsiniz. Üç bileşene ayrılır:
EnterprisePushBackendSystem
a. Bu proje Azure.Messaging.ServiceBus NuGet paketini kullanır ve Service Bus Pub/Sub programlamasını temel alır.
b. Bu uygulama, mobil uygulamaya teslim edilecek iletiyi başlatan bir LoB sisteminin benzetimini yapmak için basit bir C# konsol uygulamasıdır.
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
, Service Bus konusunu oluşturmak için kullanılır.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
, iletileri bu Service Bus Konusuna göndermek için kullanılır. Bu kod, örneğin amacı doğrultusunda belirli aralıklarla konuya rastgele bir ileti kümesi gönderir. Normalde, bir olay gerçekleştiğinde ileti gönderen bir arka uç sistemi vardır.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. Bu proje, Azure.Messaging.ServiceBus ve Microsoft.Web.WebJobs.Publish NuGet paketlerini kullanır ve Service Bus Pub/Sub programlamasını temel alır.
b. Aşağıdaki konsol uygulaması, LoB/arka uç sistemlerinden gelen iletileri dinlemek için sürekli çalışması gerektiğinden Azure Web İşi olarak çalışır. Bu uygulama Mobil arka ucunuzun bir parçasıdır.
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
, arka uç sisteminin ileti gönderdiği konu için bir Service Bus aboneliği oluşturmak için kullanılır. İş senaryosuna bağlı olarak, bu bileşen ilgili konular için bir veya daha fazla abonelik oluşturur (örneğin, bazıları İk sisteminden, bazıları Finans sisteminden vb. ileti alıyor olabilir)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
aboneliğini kullanarak konu başlığındaki iletiyi okumak için kullanılır ve okuma başarılı olursa Azure Notification Hubs kullanılarak mobil uygulamaya gönderilecek bir bildirim (örnek senaryoda bir Windows yerel bildirim bildirimi) oluşturun.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. Bu uygulamayı Web İşi olarak yayımlamak için Visual Studio'da çözüme sağ tıklayın ve Web İşi Olarak Yayımla'yı seçin
f. Yayımlama profilinizi seçin ve henüz yoksa yeni bir Azure Web Sitesi oluşturun; bu Web İşi'ni barındırır ve Web Sitesi'ni aldıktan sonra Yayımla'yı seçin.
Microsoft Azure Web Siteleri seçeneğinin seçili olduğu Web'i Yayımla iletişim kutusunun ekran görüntüsü, Yeni seçeneği kırmızıyla vurgulanmış Mevcut Web Sitesini Seç iletişim kutusunu gösteren yeşil bir ok ve Site adı ve Oluşturma seçenekleri kırmızıyla vurgulanmış Microsoft Azure'da site oluştur iletişim kutusunu işaret eden yeşil bir ok.
r. azure portalında oturum açtığınızda aşağıdakine benzer bir şey görmeniz için işi "Sürekli Çalıştır" olarak yapılandırın:
EnterprisePushMobileApp
a. Bu uygulama, Mobil arka ucunuzun bir parçası olarak çalışan Web İşinden bildirim alan ve görüntüleyen bir Windows Mağazası uygulamasıdır. Bu kod Notification Hubs - Windows Evrensel öğreticisini temel alır.
b. Uygulamanızın bildirim almak için etkinleştirildiğinden emin olun.
c. Uygulama başlangıcında aşağıdaki Notification Hubs kayıt kodunun çağrıldığından emin olun (ve
DefaultListenSharedAccessSignature
değerlerini değiştirdiktenHubName
sonra: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(); } }
Örneği çalıştırma
Web işinizin başarıyla çalıştığından ve sürekli çalışacak şekilde zamanlandığından emin olun.
Windows Mağazası uygulamasını başlatan EnterprisePushMobileApp'i çalıştırın.
LoB arka ucu benzetimini yapan ve ileti göndermeye başlayan EnterprisePushBackendSystem konsol uygulamasını çalıştırın ve aşağıdaki görüntüde gösterildiği gibi bildirim bildirimleri görmeniz gerekir:
İletiler başlangıçta Web İşinizdeki Service Bus abonelikleri tarafından izlenen Service Bus konularına gönderildi. İleti alındıktan sonra bir bildirim oluşturulur ve mobil uygulamaya gönderilir. Web İşinizin Azure portalındaki Günlükler bağlantısına gittiğinizde işlemeyi onaylamak için Web İşi günlüklerine bakabilirsiniz: