نشر تطبيقات Java بلا خادم باستخدام Quarkus على Azure Functions
في هذه المقالة، ستقوم بتطوير وبناء ونشر تطبيق Java بلا خادم إلى Azure Functions باستخدام Quarkus. تستخدم هذه المقالة Quarkus Funqy ودعمه المضمن لمشغل HTTP وظائف Azure ل Java. يمنحك استخدام Quarkus مع Azure Functions قوة نموذج برمجة Quarkus مع مقياس ومرونة Azure Functions. عند الانتهاء، ستقوم بتشغيل تطبيقات Quarkus بلا خادم على Azure Functions وتستمر في مراقبة تطبيقك على Azure.
المتطلبات الأساسية
- تم تثبيت Azure CLI على الكمبيوتر الخاص بك.
- حساب Azure. إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.
- Java JDK 17 مع
JAVA_HOME
تكوين بشكل مناسب. تمت كتابة هذه المقالة مع Java 17 في الاعتبار، ولكن Azure Functions وQuarkus يدعمان أيضا الإصدارات القديمة من Java. - Apache Maven 3.8.1+.
إنشاء مشروع التطبيق
استخدم الأمر التالي لاستنساخ نموذج مشروع Java لهذه المقالة. العينة متاحة على GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus
إذا رأيت رسالة حول وجودك في حالة HEAD منفصلة، فهذه الرسالة آمنة للتجاهل. نظرا لأن هذه المقالة لا تتطلب أي تثبيتات، فإن حالة HEAD المنفصلة مناسبة.
استكشف نموذج الدالة. افتح الملف functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java .
قم بتشغيل الأمر التالي. @Funq
يجعل التعليق التوضيحي الأسلوب الخاص بك (في هذه الحالة، funqyHello
) دالة بلا خادم.
@Funq
public String funqyHello() {
return "hello funqy";
}
تحتوي Azure Functions Java على مجموعة خاصة بها من التعليقات التوضيحية الخاصة ب Azure، ولكن هذه التعليقات التوضيحية ليست ضرورية عند استخدام Quarkus على Azure Functions بسعة بسيطة كما نفعل هنا. لمزيد من المعلومات حول التعليقات التوضيحية ل Azure Functions Java، راجع دليل مطور Azure Functions Java.
ما لم تحدد خلاف ذلك، يكون اسم الدالة هو نفس اسم الأسلوب. يمكنك أيضا استخدام الأمر التالي لتعريف اسم الدالة مع معلمة إلى التعليق التوضيحي:
@Funq("alternateName")
public String funqyHello() {
return "hello funqy";
}
الاسم مهم. يصبح جزءا من REST URI لاستدعاء الدالة، كما هو موضح لاحقا في المقالة.
اختبِر الدالة محليًا
استخدم mvn
لتشغيل وضع تطوير Quarkus على المحطة الطرفية المحلية. يتيح تشغيل Quarkus بهذه الطريقة إعادة التحميل المباشر مع التحويل البرمجي للخلفية. عند تعديل ملفات Java و/أو ملفات الموارد وتحديث المستعرض الخاص بك، ستصبح هذه التغييرات سارية المفعول تلقائيا.
يؤدي تحديث المستعرض إلى إجراء مسح ضوئي لمساحة العمل. إذا اكتشف الفحص أي تغييرات، تتم إعادة تحويل ملفات Java وإعادة نشر التطبيق. خدمات التطبيق المعاد توزيعها الطلب. إذا كانت هناك أي مشاكل في التحويل البرمجي أو النشر، فستعلمك صفحة الخطأ.
في الإجراء التالي، استبدل yourResourceGroupName
باسم مجموعة موارد. يجب أن تكون أسماء تطبيقات الوظائف فريدة عالميا عبر جميع Azure. يجب أن تكون أسماء مجموعة الموارد فريدة عالميا داخل الاشتراك. تحقق هذه المقالة التفرد الضروري عن طريق إلحاق اسم مجموعة الموارد باسم الدالة. ضع في اعتبارك إلحاق معرف فريد بأي أسماء تقوم بإنشائها يجب أن تكون فريدة. ومن التقنيات المفيدة استخدام الأحرف الأولى من اسمك متبوعا بتاريخ اليوم بالتنسيق mmdd
.
مجموعة الموارد ليست ضرورية لهذا الجزء من الإرشادات، ولكنها مطلوبة لاحقا. للتبسيط، يتطلب منك مشروع Maven تحديد الخاصية .
استدعاء وضع تطوير Quarkus:
cd functions-azure mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
يجب أن يبدو الإخراج كما يلي:
... --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ INFO [io.quarkus] (Quarkus Main Thread) quarkus-azure-function 1.0-SNAPSHOT on JVM (powered by Quarkus xx.xx.xx.) started in 1.290s. Listening on: http://localhost:8080 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, funqy-http, smallrye-context-propagation, vertx] -- Tests paused Press [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
الوصول إلى الدالة باستخدام الأمر على
CURL
المحطة الطرفية المحلية:curl localhost:8080/api/funqyHello
يجب أن يبدو الإخراج كما يلي:
"hello funqy"
إضافة إدخال التبعية إلى الدالة
توفر التقنية المفتوحة القياسية Jakarta EE Contexts and Dependency Injection (CDI) حقن التبعية في Quarkus. للحصول على نظرة عامة عالية المستوى على الحقن بشكل عام، وCDI على وجه التحديد، راجع البرنامج التعليمي Jakarta EE.
إضافة دالة جديدة تستخدم إدخال التبعية.
إنشاء ملف GreetingService.java في الدليل functions-quarkus/src/main/java/io/quarkus. استخدم التعليمات البرمجية التالية كتعلم برمجية المصدر للملف:
package io.quarkus; import javax.enterprise.context.ApplicationScoped; @ApplicationScoped public class GreetingService { public String greeting(String name) { return "Welcome to build Serverless Java with Quarkus on Azure Functions, " + name; } }
حفظ الملف.
GreetingService
هو منتقاة قابلة للحقن تنفذ أسلوباgreeting()
. يقوم الأسلوب بإرجاع رسالة سلسلةWelcome...
مع معلمةname
.افتح ملف functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java الموجود. استبدل الفئة بالتعليمات البرمجية التالية لإضافة حقل جديد
gService
والأسلوبgreeting
:package io.quarkus; import javax.inject.Inject; import io.quarkus.funqy.Funq; public class GreetingFunction { @Inject GreetingService gService; @Funq public String greeting(String name) { return gService.greeting(name); } @Funq public String funqyHello() { return "hello funqy"; } }
حفظ الملف.
الوصول إلى الدالة الجديدة
greeting
باستخدام الأمر علىcurl
المحطة الطرفية المحلية:curl -d '"Dan"' -X POST localhost:8080/api/greeting
يجب أن يبدو الإخراج كما يلي:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
هام
يسمح لك Live Coding (يسمى أيضا وضع التطوير) بتشغيل التطبيق وإجراء تغييرات بسرعة. سيقوم Quarkus تلقائيا بإعادة التحويل البرمجي وإعادة تحميل التطبيق عند إجراء التغييرات. هذا نمط قوي وفعال لتطوير ستستخدمه خلال هذه المقالة.
قبل الانتقال إلى الخطوة التالية، أوقف وضع تطوير Quarkus عن طريق تحديد Ctrl+C.
توزيع التطبيق على Azure
إذا لم تكن قد قمت بتسجيل الدخول بالفعل، فسجل الدخول إلى اشتراك Azure باستخدام الأمر التالي az login واتبع التوجيهات التي تظهر على الشاشة:
az login
إشعار
إذا كان العديد من مستأجري Azure مقترنين ببيانات اعتماد Azure، فيجب عليك تحديد المستأجر الذي تريد تسجيل الدخول إليه. يمكنك القيام بذلك باستخدام
--tenant
الخيار . على سبيل المثال:az login --tenant contoso.onmicrosoft.com
.متابعة العملية في مستعرض الويب. إذا لم يتوفر مستعرض ويب أو إذا فشل فتح مستعرض الويب، فاستخدم تدفق التعليمات البرمجية للجهاز مع
az login --use-device-code
.بعد تسجيل الدخول بنجاح، يجب أن يبدو الإخراج على المحطة الطرفية المحلية مشابها للآتي:
xxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxx 'Microsoft' [ { "cloudName": "AzureCloud", "homeTenantId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxx", "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "isDefault": true, "managedByTenants": [], "name": "Contoso account services", "state": "Enabled", "tenantId": "xxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxx", "user": { "name": "user@contoso.com", "type": "user" } } ]
إنشاء الوظائف ونشرها إلى Azure.
يستخدم
azure-functions-maven-plugin
ملف pom.xml الذي أنشأته في الخطوة السابقة . يؤدي التشغيلmvn install
إلى إنشاء ملفات التكوين ودليل التقسيم المرحلي الذيazure-functions-maven-plugin
يتطلبه. بالنسبة إلىyourResourceGroupName
، استخدم القيمة التي استخدمتها سابقا.mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
أثناء النشر، سجل الدخول إلى Azure.
azure-functions-maven-plugin
يتم تكوين المكون الإضافي لمطالبة تسجيل الدخول إلى Azure في كل مرة يتم فيها نشر المشروع. أثناء الإنشاء، يظهر إخراج مشابه للآتي:[INFO] Auth type: DEVICE_CODE To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AXCWTLGMP to authenticate.
قم بما يقوله الإخراج وقم بالمصادقة على Azure باستخدام المتصفح ورمز الجهاز المتوفر. تتوفر العديد من خيارات المصادقة والتكوين الأخرى. تتوفر الوثائق المرجعية الكاملة ل
azure-functions-maven-plugin
في وظائف Azure: تفاصيل التكوين.بعد المصادقة، يجب أن يستمر البناء وينتهي. تأكد من أن الإخراج يتضمن
BUILD SUCCESS
بالقرب من النهاية.Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
يمكنك أيضا العثور على عنوان URL لتشغيل دالتك على Azure في سجل الإخراج:
[INFO] HTTP Trigger Urls: [INFO] quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
سيستغرق النشر بعض الوقت حتى ينتهي. في هذه الأثناء، دعنا نستكشف Azure Functions في مدخل Microsoft Azure.
الوصول إلى الدالة بلا خادم ومراقبتها على Azure
سجل الدخول إلى المدخل وتأكد من تحديد نفس المستأجر والاشتراك الذي استخدمته في Azure CLI.
اكتب تطبيق الوظائف على شريط البحث في أعلى مدخل Microsoft Azure وحدد مفتاح الإدخال Enter. يجب نشر تطبيق الوظائف الخاص بك وعرضه بالاسم
<yourResourceGroupName>-function-quarkus
.حدد تطبيق الوظائف لعرض معلومات مفصلة، مثل الموقع والاشتراك وعنوان URL والمقاييس وخطة خدمة التطبيقات. ثم حدد قيمة URL .
تأكد من أن صفحة الترحيب تشير إلى أن تطبيق الوظائف الخاص بك "قيد التشغيل".
استدعاء الدالة
greeting
باستخدام الأمر التاليcurl
على المحطة الطرفية المحلية.هام
استبدل
YOUR_HTTP_TRIGGER_URL
بعنوان URL للدالة الخاصة بك التي تجدها في مدخل Azure أو الإخراج.curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
يجب أن يبدو الإخراج مشابهًا لما يلي:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
يمكنك أيضا الوصول إلى الدالة الأخرى (
funqyHello
) باستخدام الأمر التاليcurl
:curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
يجب أن يكون الإخراج هو نفسه ما لاحظته سابقا:
"hello funqy"
إذا كنت ترغب في ممارسة إمكانية المقاييس الأساسية في مدخل Microsoft Azure، فحاول استدعاء الدالة ضمن حلقة shell
for
:for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
بعد فترة من الوقت، سترى بعض بيانات المقاييس في المدخل.
الآن بعد أن فتحت دالة Azure في المدخل، إليك المزيد من الميزات التي يمكنك الوصول إليها من المدخل:
- مراقبة أداء دالة Azure. لمزيد من المعلومات، راجع مراقبة وظائف Azure.
- استكشاف بيانات تتبع الاستخدام. لمزيد من المعلومات، راجع تحليل بيانات تتبع الاستخدام لوظائف Azure في Application Insights.
- إعداد التسجيل. لمزيد من المعلومات، راجع تمكين سجلات تنفيذ الدفق في Azure Functions.
تنظيف الموارد
إذا لم تكن بحاجة إلى هذه الموارد، يمكنك حذفها عن طريق تشغيل الأمر التالي:
az group delete --name <yourResourceGroupName> --yes
الخطوات التالية
في هذا المقال، ستتعلم كيفية إجراء ما يلي:
- تشغيل وضع تطوير Quarkus.
- نشر تطبيق Funqy إلى وظائف Azure باستخدام
azure-functions-maven-plugin
. - فحص أداء الدالة في المدخل.
لمعرفة المزيد حول Azure Functions و Quarkus، راجع المقالات والمراجع التالية: