Kurumsal gönderim mimari kılavuzu
Günümüzde kuruluşlar, son kullanıcıları (harici) veya çalışanlar (iç) için mobil uygulamalar oluşturmaya doğru yavaş hareket edebilir. BT ana bilgisayarları veya mobil uygulama mimarisiyle tümleştirilebilen bazı LoB uygulamaları, mevcut arka uç sistemlerine sahiptir. Bu kılavuzda, bu tümleştirmenin en iyi şekilde yaygın senaryolar için olası çözümü önerme konusu ele alınabilir.
Sık kullanılan bir gereksinim, arka uç sistemlerinde ilgi çekici bir olay gerçekleştiğinde kullanıcılara mobil uygulamaları aracılığıyla anında iletme bildirimi göndermeye yöneliktir. örneğin, banka bankacılık uygulamasına bir iPhone sahip olan bir banka müşterisi, hesap veya bir intranet senaryosuyla, bir Windows Phone üzerinde bir bütçe onay uygulamasına sahip olan finans departmanından gelen bir çalışanın onay isteği alındığında bildirilmesini istemesi durumunda size bildirilmesini istiyor.
Banka hesabı veya onay işlemenin, kullanıcıya bir gönderim başlatması gereken bazı arka uç sistemlerinde yapılması olasıdır. Bir olay bir bildirim tetiklendiğinde, bu tür bir mantığın aynı tür mantığı oluşturması gereken birden fazla arka uç sistemi olabilir. Buradaki karmaşıklık, bazı arka uç sistemlerini, son kullanıcıların farklı bildirimlere abone olabileceği ve hatta birden çok mobil uygulama bile olabilecek tek bir gönderim sistemiyle tümleştirilmesine yer alıyor. Örneğin, bir mobil uygulamanın birden fazla arka uç sisteminden bildirim almak istedikleri intranet mobil uygulamaları. Burada yaygın olarak kullanılan bir çözümün, bir bileşeni tanıtmak üzere, arka uç sistemleri bir bileşen tanıtmak veya bilmesi gerekmez; bu sayede, her türlü olay için arka uç sistemlerini yoklayan ve istemciye gönderim iletileri göndermekten sorumludur.
daha iyi bir çözüm olan Azure Service Bus-konu/abonelik modelinin kullanılması, çözümü ölçeklenebilir hale getirirken karmaşıklığı azaltır.
Çözümün genel mimarisi aşağıda verilmiştir (birden çok mobil uygulamayla Genelleştirilmiş, ancak yalnızca bir mobil uygulama olduğunda aynı şekilde geçerlidir)
Mimari

bu mimari diyagramdaki anahtar parçası Azure Service Bus bir konu başlığı/abonelik programlama modeli (daha fazla [Service Bus Pub/Sub programlamada]) sağlar. bu durumda, mobil arka uç (mobil uygulamalara gönderim başlatan Azure mobil hizmeti) doğrudan arka uç sistemlerinden ileti almaz, bunun yerine azure Service Bustarafından sunulan bir ara soyutlama katmanı, mobil arka ucun bir veya daha fazla arka uç sisteminden ileti almasına olanak sağlar. bir Service Bus konunun her bir arka uç sistemi için oluşturulması gerekir; örneğin, bir hesap, ik ve finans, bu, temel olarak ilgi çekici bir "konu başlığı" olan ve anında iletme bildirimi olarak gönderilecek iletileri başlatır. Arka uç sistemleri bu konulara iletiler gönderir. mobil arka uç, Service Bus bir abonelik oluşturarak bir veya daha fazla konuya abone olabilir. Bu, ilgili arka uç sisteminden bildirim almak için mobil arka uca sahibine. Mobil arka uç, aboneliklerindeki iletileri dinlemeye devam eder ve bir ileti ulaştığında, geri döner ve Bildirim Hub 'ına bildirim olarak gönderir. Bildirim Hub 'ları, sonunda iletiyi mobil uygulamaya teslim edebilir. Anahtar bileşenlerinin listesi aşağıdadır:
- Arka uç sistemleri (LoB/eski sistemler)
- Service Bus konu oluşturur
- Ileti gönderir
- Mobil arka uç
- Hizmet aboneliği oluşturur
- Iletiyi alır (arka uç sisteminden)
- İstemcilere bildirim gönderir (Azure Notification Hub 'ı aracılığıyla)
- Mobile Uygulama
- Bildirim alır ve görüntüler
Avantajlar
- Alıcı (Bildirim Hub 'ı aracılığıyla mobil uygulama/hizmet) ve gönderici (arka uç sistemleri) arasındaki ayırma, ek arka uç sistemlerinin en az değişiklik ile tümleştirilebilmesine izin verebilir.
- Ayrıca, birden çok mobil uygulama senaryosunun bir veya daha fazla arka uç sisteminden olay alabilmesini sağlar.
Örnek
Önkoşullar
Kavramların yanı sıra ortak oluşturma & yapılandırma adımları hakkında bilgi edinmek için aşağıdaki öğreticilerini doldurun:
- Service Bus Pub/Sub programlama -bu öğreticide, Service Bus konuları/abonelikleri ile çalışmanın ayrıntıları, konuları/abonelikleri içeren bir ad alanı oluşturma, onlardan ileti alma & gönderme işlemleri açıklanmaktadır.
- Notification Hubs Windows evrensel öğretici -bu öğreticide, Windows bir mağaza uygulamasının nasıl ayarlanacağı Notification Hubs ve bildirimlerin nasıl kaydedileceği ve daha sonra bildirim alınacağı açıklanmaktadır.
Örnek kod
Tam örnek kod, [Bildirim Hub 'ı örneklerinde]kullanılabilir. Üç bileşene ayrılır:
EnterprisePushBackendSystem
a. bu proje, Azure. Messaging. servicebus NuGet paketini kullanır ve [Service Bus Pub/Sub programlamaya]dayalıdı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.
CreateTopicAsyncService 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.
SendMessageAsynciletileri bu Service Bus konusuna göndermek için kullanılır. Bu kod, örnek amacına uygun olarak konuya düzenli olarak bir rastgele 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 programlamaya]dayalıdır.
b. Aşağıdaki konsol uygulaması, LoB/arka uç sistemlerinden iletileri dinlemek için sürekli olarak çalıştırılması gerektiğinden, bir Azure WebJob 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.
CreateSubscriptionAsyncarka uç sisteminin ileti gönderdiği konu için Service Bus bir abonelik oluşturmak için kullanılır. İş senaryosuna bağlı olarak, bu bileşen ilgili konulara bir veya daha fazla abonelik oluşturur (örneğin, bazı bir HR sisteminden, bazıları finans sisteminden ve bu şekilde devam edebilir)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 konudan iletiyi okumak için kullanılır ve okuma başarılı olursa Azure Notification Hubs kullanılarak mobil uygulamaya gönderilmek üzere bir bildirim (örnek senaryoda 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ı webjob olarak yayımlamak için Visual Studio ' de çözüme sağ tıklayın ve WebJob olarak yayımla ' yı seçin.

f. Yayımlama profilinizi seçin ve henüz yoksa yeni bir Azure Web sitesi oluşturun, bu WebJob 'u barındırır ve Web sitesi yayımlandıktan sonra yayımlayın.
web 'i Microsoft Azure web siteleri seçeneği seçiliyken, var olan web sitesini seç iletişim kutusunu işaret eden, kırmızı renkle belirtilen yeni seçeneği içeren yeşil bir ok ve site adı ile ana Microsoft Azure site oluştur iletişim kutusuna işaret eden yeşil bir ok ve kırmızı renkte özetlenen seçenekleri içeren ekran görüntüsü.
örneğin: İşi "sürekli Çalıştır" olacak şekilde yapılandırın, böylece [Azure Portal] oturum açtığınızda aşağıdakine benzer bir şey görmeniz gerekir:

EnterprisePushMobileApp
a. bu uygulama, mobil arka ucunuzun bir parçası olarak çalışan WebJob 'tan bildirimler alan ve onu görüntüleyen bir Windows mağazası uygulamasıdır. bu kod, [Notification Hubs Windows evrensel öğreticiye]dayanır.
b. Uygulamanızın bildirim almak için etkinleştirildiğinden emin olun.
c. Uygulamanın başlangıcında aşağıdaki Notification Hubs kayıt kodunun çağrıldığından emin olun (
HubNameve değerlerini değiştirdikten sonraDefaultListenSharedAccessSignature: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
WebJob 'larınızın başarıyla çalıştığından ve sürekli çalışacak şekilde zamanlandığından emin olun.
Windows Store uygulamasını başlatan EnterprisePushMobileApp çalıştırın.
LoB arka ucunu taklit eden ve ileti göndermeye başlayan EnterprisePushBackendSystem konsol uygulamasını çalıştırın ve aşağıdaki görüntüde olduğu gibi bildirim bildirimleri görmeniz gerekir:

iletiler başlangıçta Web işinizdeki Service Bus abonelikleri tarafından izlenmekte olan Service Bus konularına gönderilmiştir. Bir ileti alındıktan sonra mobil uygulamaya bir bildirim oluşturulup gönderilir. Web Işiniz için [Azure Portal] Günlükler bağlantısına gittiğinizde işlemeyi onaylamak için WebJob günlüklerine bakabilirsiniz:
