1. نظرة عامة
في هذا الدرس التطبيقي، ستنشئ مشغّلاً في Eventarc يربط موضوعًا في Pub/Sub بخدمة Workflows. تتيح لك خدمة Eventarc فصل الاتصال بين الخدمات، ما يجعل الحلّ أكثر قابلية للتوسيع ويعتمد على الأحداث. ستنشئ سير عمل يتضمّن خطوات متعددة لتنفيذ عملية تجارية تهدف إلى احتساب نقاط المكافآت للعملاء مقابل الطلب في Cymbal Eats. سترسل "مهام سير العمل" طلبات متعددة إلى تطبيق يعمل على GKE Autopilot وستنشر رسالة في موضوع Pub/Sub لإعلام تطبيق "خدمة الطلبات" بنقاط المكافآت التي تم احتسابها.

ما هو وضع التشغيل الآلي في GKE؟
GKE Autopilot هو وضع تشغيل في GKE تدير فيه Google إعدادات مجموعتك، بما في ذلك العُقد والتوسيع والأمان والإعدادات الأخرى المُسبَقة الإعداد. تم تحسين مجموعات Autopilot لتشغيل معظم أحمال العمل في مرحلة الإنتاج، وتوفير موارد الحوسبة استنادًا إلى بيانات Kubernetes. يتّبع الإعداد المبسّط أفضل الممارسات والاقتراحات في GKE بشأن إعداد المجموعات وأحجام العمل وقابلية التوسّع والأمان. للاطّلاع على قائمة بالإعدادات المضمّنة، يُرجى الرجوع إلى جدول المقارنة بين "الطيار الآلي" و"الإعدادات العادية".
في GKE Standard، يتحمّل المستخدمون مسؤولية إدارة عُقد العاملين وإعدادات مجموعة أجهزة ذات التخصيص نفسه، بينما يتولّى GKE بقية المهام.
مسؤوليات العميل مقابل مسؤوليات Google عند التشغيل في وضع GKE العادي

باستخدام GKE Autopilot، تتحمّل Google مسؤولية إعداد مجموعات أجهزة ذات التخصيص نفسه وإدارتها. يتيح لك ذلك التركيز على التطبيقات والخدمات التي تعمل فوق المجموعة.
ما هي خدمة Eventarc؟
تتيح لك خدمة Eventarc إنشاء بنى مستندة إلى الأحداث بدون الحاجة إلى تنفيذ البنية الأساسية أو تخصيصها أو صيانتها. تقدّم Eventarc حلاً موحّدًا لإدارة تدفّق تغييرات الحالة، المعروفة باسم الأحداث، بين الخدمات المصغّرة المنفصلة. عند تشغيلها، توجّه Eventarc هذه الأحداث من خلال اشتراكات Pub/Sub إلى وجهات مختلفة (مثل (Workflows وCloud Run) مع إدارة عمليات التسليم والأمان والتفويض والمراقبة ومعالجة الأخطاء نيابةً عنك.
موفّرو الأحداث على Google
- أكثر من 90 مقدّم خدمة Google Cloud يرسل هؤلاء الموفّرون الأحداث إما مباشرةً من المصدر (مثل Cloud Storage) أو من خلال إدخالات Cloud Audit Logs.
- موفّرو Pub/Sub يرسل هؤلاء الموفّرون الأحداث إلى Eventarc باستخدام رسائل Pub/Sub.
موفّرو الخدمات الخارجيون
موفّرو الروابط التابعون لجهات خارجية هم جهات غير تابعة لـ Google تقدّم مصدر Eventarc.
مشغّلات Eventarc
- أحداث Cloud Pub/Sub يمكن أن يتم تشغيل Eventarc من خلال الرسائل المنشورة في مواضيع Pub/Sub.
- أحداث Cloud Audit Logs (CAL): توفّر "سجلّات تدقيق Cloud" سجلّات تدقيق "نشاط المشرف" و"الوصول إلى البيانات" لكل مشروع على السحابة الإلكترونية ومجلد ومؤسسة.
- الأحداث المباشرة: يمكن أن يتم تشغيل Eventarc من خلال أحداث مباشرة مختلفة، مثل تعديل في حزمة Cloud Storage أو تعديل في نموذج الإعداد عن بُعد عبر Firebase.
وجهات الأحداث
- Workflows
- Cloud Run
- GKE
- Cloud Functions( الجيل الثاني)

ما هي "مهام سير العمل"؟
Workflows هي خدمة مُدارة بالكامل تتيح لك دمج الخدمات المصغّرة والمهام وواجهات برمجة التطبيقات. Workflows هي خدمة بدون خادم وسيتم توسيع نطاقها لتلبية طلبك.
حالات استخدام Workflows:
- يتم تنفيذ مهام سير العمل المستندة إلى الأحداث عند تشغيل عوامل مشغِّلة محدّدة. على سبيل المثال، عند إرسال طلب جديد وتريد احتساب نقاط ولاء العملاء. أو عند إلغاء طلب، يمكن نشر الحدث وستعالج جميع الخدمات المهتمة الحدث.
- تنفّذ سير عمل المهام المجمّعة المهام بشكل منتظم باستخدام Cloud Scheduler. على سبيل المثال، مهمة ليلية للتحقّق من عناصر القائمة التي تعذّر عرضها وحذفها.
تُعدّ Workflows مثالية لسير العمل الذي ينظّم الخدمات. يمكنك تشغيل العمليات التي تتضمّن الانتظار وإعادة المحاولة آليًا لمدة تصل إلى عام واحد.
مزايا سير العمل:
- الإعدادات بدلاً من الرمز البرمجي: يمكنك تقليل الديون الفنية من خلال نقل المنطق إلى الإعدادات بدلاً من كتابة الرمز البرمجي.
- تبسيط البنية الهندسية: تتيح لك "سير العمل ذات الحالة" عرض عمليات دمج الخدمات المعقّدة ومراقبتها بدون تبعيات إضافية.
- تضمين الموثوقية والتسامح مع الأخطاء: التحكّم في حالات تعذُّر التنفيذ باستخدام منطق إعادة المحاولة التلقائي أو المخصّص ومعالجة الأخطاء حتى في حال تعذُّر عمل الأنظمة الأخرى، مع حفظ نقاط التحقّق في كل خطوة في Cloud Spanner لمساعدتك في تتبُّع مستوى التقدّم
- لا يحتاج إلى صيانة: التوسّع حسب الحاجة: لا يلزم تصحيح أي برامج أو صيانتها. يمكنك الدفع فقط عند تشغيل سير العمل، بدون أي تكلفة أثناء الانتظار أو عدم النشاط.
في هذا التمرين العملي، ستضبط سير عمل مستندًا إلى الأحداث.
ما ستتعلمه
في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ ما يلي:
- ضبط موضوع Pub/Sub وEventarc لتنفيذ مهام سير العمل
- ضبط Workflow لإجراء طلبات من واجهة برمجة التطبيقات إلى تطبيق يعمل على GKE Autopilot
- ضبط Workflow لنشر الرسائل في Pub/Sub
- كيفية طلب البحث عن السجلّات المنظَّمة في Workflows في Cloud Logging وباستخدام gcloud CLI
المتطلبات الأساسية
- يفترض هذا التمرين العملي معرفة بيئتَي Cloud Console وCloud Shell.
- يُفضّل توفّر خبرة سابقة في GKE وCloud Pub/Sub، ولكنّها ليست شرطًا مطلوبًا.
2. الإعداد والمتطلبات
إعداد مشروع على السحابة الإلكترونية
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
إعداد البيئة
فعِّل Cloud Shell من خلال النقر على الرمز على يسار شريط البحث.

استنسِخ المستودع وانتقِل إلى الدليل، ثم انسَخ الأمر أدناه والصِقه في الوحدة الطرفية واضغط على Enter:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
نشر العناصر التابعة المطلوبة من خلال تنفيذ gke-lab-setup.sh
سيتم إنشاء الموارد التالية:
- مجموعة ومثيل AlloyDB
- مجموعة GKE Autopilot
./gke-lab-setup.sh
إذا طُلب منك منح الإذن، انقر على "منح الإذن" للمتابعة.

ستستغرق عملية الإعداد حوالي 10 دقائق.
انتظِر إلى أن ينتهي النص البرمجي ويظهر الناتج أدناه قبل تنفيذ خطوات أخرى.
NAME: client-instance ZONE: us-central1-c MACHINE_TYPE: e2-medium PREEMPTIBLE: INTERNAL_IP: 10.128.0.9 EXTERNAL_IP: 35.232.109.233 STATUS: RUNNING
3- مجموعة GKE Autopilot
مراجعة مجموعة GKE Autopilot
اضبط متغيّرات بيئة المشروع:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
كجزء من عملية الإعداد الأوّلية، تم إنشاء المجموعة باستخدام الأمر أدناه (لست بحاجة إلى تنفيذ هذا الأمر):
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
نفِّذ الأمر التالي لعرض مجموعة GKE Autopilot التي تم إنشاؤها:
gcloud container clusters list
مثال على الناتج:

نفِّذ الأمر التالي لتخزين بيانات اعتماد المجموعة:
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
نشر تطبيق
بعد ذلك، ستنشئ تطبيق "خدمة العملاء". هذه خدمة مصغّرة مستندة إلى Java تستخدم إطار عمل Quarkus.
انتقِل إلى المجلد cymbal-eats/customer-service وشغِّل الأوامر أدناه لإنشاء صورة الحاوية وتحميلها:
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
اضبط عنوان IP الخاص لخدمة AlloyDB:
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
نفِّذ الأوامر أدناه لإنشاء عنصر أسرار Kubernetes لتخزين بيانات اعتماد قاعدة البيانات التي سيستخدمها تطبيق "خدمة العملاء" للاتصال بقاعدة البيانات:
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
نفِّذ الأمر لاستبدال CUSTOMER_SERVICE_IMAGE في ملف deployment.yaml:
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
نفِّذ الأمر التالي لنشر التطبيق:
kubectl apply -f customer-service-deployment.yaml
سيستغرق انتقال التطبيق إلى حالة RUNNING بضع لحظات.
راجِع ملف مواصفات النشر:
deployment.yaml.tmpl
في ما يلي جزء من الإعدادات التي تحدّد الموارد المطلوبة لتشغيل هذا التطبيق.
spec:
containers:
- name: customer-service
image: CUSTOMER_SERVICE_IMAGE
resources:
requests:
cpu: 250m
memory: 512Mi
ephemeral-storage: 512Mi
limits:
cpu: 500m
memory: 1024Mi
ephemeral-storage: 1Gi
نفِّذ الأمر لإنشاء عنوان IP خارجي سيتم استخدامه في سير العمل:
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
نفِّذ الأمر للتحقّق من الموارد التي تم إنشاؤها:
kubectl get all
مثال على الناتج:

4. مراجعة سير العمل
المفاهيم الأساسية لسير العمل
يتألف سير العمل من سلسلة من الخطوات الموضّحة باستخدام بنية Workflows( YAML أو JSON).
بعد إنشاء سير عمل، يتم نشره، ما يجعله جاهزًا للتنفيذ.
التنفيذ هو تشغيل واحد للمنطق الوارد في تعريف سير العمل. لا يؤدي سير العمل الذي لم يتم تنفيذه إلى فرض أي رسوم. تكون جميع عمليات تنفيذ سير العمل مستقلة، ويتيح التوسّع السريع للمنتج تنفيذ عدد كبير من العمليات المتزامنة.
عناصر التحكّم في التنفيذ
- الخطوات: لإنشاء سير عمل، عليك تحديد
stepsوترتيب التنفيذ المطلوبَين باستخدام بنية "مهام سير العمل". يجب أن تتضمّن كل سير عمل خطوة واحدة على الأقل. - الشروط: يمكنك استخدام كتلة
switchكآلية اختيار تسمح لقيمة تعبير بالتحكّم في سير تنفيذ سير العمل. - التكرارات: يمكنك استخدام حلقة
forللتكرار على سلسلة من الأرقام أو من خلال مجموعة من البيانات، مثل قائمة أو خريطة. - سير العمل الفرعي: يعمل سير العمل الفرعي بشكل مشابه للروتين أو الوظيفة في لغة البرمجة، ما يتيح لك تضمين خطوة أو مجموعة من الخطوات التي سيكرّرها سير العمل عدة مرات.
تشغيل عمليات التنفيذ
- يدوي: يمكنك إدارة سير العمل من Google Cloud Console أو من سطر الأوامر باستخدام Google Cloud CLI.
- آلية: يمكن استخدام "مكتبات برامج Cloud" لواجهة برمجة تطبيقات Workflows أو واجهة REST API لإدارة مهام سير العمل.
- مجدوَلة: يمكنك استخدام Cloud Scheduler لتشغيل سير عمل وفقًا لجدول زمني معيّن.
وسيطات وقت التشغيل
يمكن الوصول إلى البيانات التي يتم تمريرها في وقت التشغيل عن طريق إضافة حقل params إلى سير العمل الرئيسي (الموضوع في كتلة رئيسية). يقبل الحظر الرئيسي وسيطة واحدة تكون أي نوع بيانات JSON صالح. يسمّي الحقل params المتغيّر الذي يستخدمه سير العمل لتخزين البيانات التي تُدخلها.
منطق سير العمل
إذا لم يكن هناك عميل، سينفّذ سير العمل طلب بيانات من واجهة برمجة التطبيقات لإنشاء عميل أولاً ثم تعديل نقاط المكافآت. استنادًا إلى المبلغ الإجمالي للطلب، سيختار سير العمل مضاعفًا لاحتساب نقاط المكافآت للعميل. اطّلِع على النموذج أدناه لمعرفة التفاصيل.
- calculate_multiplier:
switch:
- condition: ${totalAmount < 10}
steps:
- set_multiplier1:
assign:
- multiplier: 2
- condition: ${totalAmount >= 10 and totalAmount < 25}
steps:
- set_multiplier2:
assign:
- multiplier: 3
- condition: ${totalAmount >= 25}
steps:
- set_multiplier3:
assign:
- multiplier: 5
- calculate_rewards:
assign:
- rewardPoints: ${customerRecord.rewardPoints + multiplier}

5- ضبط "سير العمل" ونشره
نفِّذ الأمر التالي لعرض عنوان IP الخارجي للخدمة:
kubectl get svc
مثال على الناتج:

اضبط متغيّر البيئة أدناه باستخدام قيمة عنوان IP الخارجي من الناتج السابق.
CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
استبدِل عنوان URL لتطبيق "خدمة العملاء" في نموذج سير العمل:
sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" gkeRewardsWorkflow.yaml.tmpl > gkeRewardsWorkflow.yaml
اضبط الموقع الجغرافي لخدمة Workflows ومتغيّرات بيئة المشروع:
gcloud config set workflows/location ${REGION}
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
أنشئ حساب خدمة مخصّصًا لسير العمل مع الأذونات التالية:
- واجهات برمجة التطبيقات لتسجيل المكالمات
- نشر الرسائل إلى موضوع PubSub
export WORKFLOW_SERVICE_ACCOUNT=workflows-sa
gcloud iam service-accounts create ${WORKFLOW_SERVICE_ACCOUNT}
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/pubsub.publisher"
نشر سير العمل تم ضبط سير العمل لاستخدام حساب الخدمة الذي تم إنشاؤه في الخطوة السابقة:
export WORKFLOW_NAME=rewardsWorkflow
gcloud workflows deploy ${WORKFLOW_NAME} \
--source=gkeRewardsWorkflow.yaml \
--service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com
راجِع مصدر سير العمل والتفاصيل الأخرى(علامة التبويب "المشغّلات"). في الوقت الحالي، لم يتم إعداد أي مشغّلات لتنفيذ سير العمل هذا. يمكنك إعدادها في الخطوة التالية.

6. ضبط مواضيع Pub/Sub ومشغّل Eventarc
بعد ذلك، ستنشئ موضوعَين في Pub/Sub وتضبط مشغّلاً واحدًا في Eventarc.
سينشر تطبيق Order Service رسائل إلى order-topic تتضمّن معلومات عن الطلبات الجديدة.
سينشر سير العمل رسائل إلى order-points-topic تتضمّن معلومات عن نقاط مكافآت الطلبات وإجمالي المبلغ. تعرض خدمة الطلبات(لم يتم نشرها كجزء من هذا المختبر) نقطة نهاية تستخدمها خدمة "الاشتراك في الإشعارات" في order-points-topic, لتعديل نقاط المكافآت والمبلغ الإجمالي لكل طلب.
إنشاء مواضيع جديدة في Pub/Sub:
export TOPIC_ID=order-topic
export ORDER_POINTS_TOPIC_ID=order-points-topic
gcloud pubsub topics create $TOPIC_ID --project=$PROJECT_ID
gcloud pubsub topics create $ORDER_POINTS_TOPIC_ID --project=$PROJECT_ID
اضبط الموقع الجغرافي لخدمة Eventarc:
gcloud config set eventarc/location ${REGION}
أنشئ حساب خدمة مخصّصًا سيتم استخدامه بواسطة مشغّل Eventarc لتنفيذ مهام سير العمل.
export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa
gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}
منح حساب الخدمة إذنًا بتنفيذ سير العمل
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/workflows.invoker"
أنشئ مشغّلاً في Eventarc للاستماع إلى رسائل Pub/Sub وتسليمها إلى Workflows.
gcloud eventarc triggers create new-orders-trigger \
--destination-workflow=${WORKFLOW_NAME} \
--destination-workflow-location=${REGION} \
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
--service-account="${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--transport-topic=$TOPIC_ID
مثال على الناتج:
Creating trigger [new-orders-trigger] in project [qwiklabs-gcp-01-1a990bfcadb3], location [us-east1]...done. Publish to Pub/Sub topic [projects/qwiklabs-gcp-01-1a990bfcadb3/topics/order-topic] to receive events in Workflow [rewardsWorkflow]. WARNING: It may take up to 2 minutes for the new trigger to become active.
راجِع مشغّل Eventarc الذي تم إنشاؤه.

راجِع الاشتراك الذي تم إنشاؤه لعبارة التشغيل.

راجِع التغييرات على جانب سير العمل. تمت إضافة مشغّل جديد.

7. سير عمل الاختبار

لمحاكاة "خدمة الطلبات"، سترسل رسائل إلى موضوع Pub/Sub من Cloud Shell وتتحقّق من سجلّات "خدمة العملاء" في Cloud Console.
export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'
مثال على الناتج:
messageIds: - '5063709859203105'
راجِع تفاصيل تنفيذ سير العمل والسجلّات.


8. تسجيل البيانات المنظَّمة لسير العمل
تم ضبط سير العمل لكتابة السجلّات المنظَّمة بتنسيق JSON. تتم كتابة السجلّات باستخدام Cloud Logging API والمورد workflows.googleapis.com/Workflow وضمن اسم السجلّ projects/${PROJECT_ID}/logs/Workflows.
راجِع إعدادات تسجيل البيانات أدناه.
- log_totalAmount:
call: sys.log
args:
json:
orderNumber: ${order.orderNumber}
totalAmount: ${totalAmount}
multiplier: ${multiplier}
totalRewardPoints: ${rewardPoints}
orderRewardPoints: ${orderRewardPoints}
severity: INFO
افتح مستكشف السجلات في Cloud Console ونفِّذ طلب بحث للعثور على الطلبات التي تمت معالجتها والتي يزيد إجمالي مبلغها عن دولارَين أمريكيَّين.
لعرض حقل طلب البحث، انقر على "عرض طلب البحث".

resource.type="workflows.googleapis.com/Workflow" AND
jsonPayload.totalAmount > 2 AND
timestamp >= "2023-01-01T00:00:00Z" AND
timestamp <= "2024-12-31T23:59:59Z"
مثال على الناتج:

افتح Cloud Shell واستخدِم gcloud CLI لقراءة السجلّات باستخدام الأوامر أدناه.
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
مثال على الناتج باستخدام التنسيق table:

نفِّذ الأمر أدناه لعرض السجلات بتنسيق JSON:
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format=json | jq
مثال على الناتج باستخدام التنسيق json:

9- مراجعة سجلّات العملاء
(خطوات اختيارية)
نفِّذ الأوامر أدناه لضبط متغيّر بيئة عنوان URL لخدمة العملاء.
CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
curl $CUSTOMER_SERVICE_URL/customer | jq
مثال على الناتج:
[
{
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2023-01-31T17:22:08.853644",
"email": "ajensen9090+eats@gmail.com",
"id": "id1",
"name": "Angela Jensen",
"rewardPoints": 4,
"state": "CA",
"updateDateTime": "2023-01-31T17:22:09.652117",
"zip": "94043"
}
]
نفِّذ الأمر لنشر طلب جديد عدة مرات وتحقّق من نقاط المكافآت الخاصة بالعميل باستخدام أمر curl.
نشر رسالة طلب جديد:
export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'
تحقَّق من نقاط مكافآت العميل:
curl $CUSTOMER_SERVICE_URL/customer | jq
شغِّل الأمر أدناه للتحقّق من أحدث السجلات:
gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"
10. تهانينا!
تهانينا، لقد أكملت درس البرمجة.
المواضيع التي تناولناها:
- كيفية ضبط موضوع Pub/Sub وEventarc لتشغيل Workflows
- كيفية ضبط Workflow لإجراء طلبات من واجهة برمجة التطبيقات إلى تطبيق يعمل على GKE Autopilot
- كيفية ضبط Workflow لنشر الرسائل إلى Pub/Sub
- كيفية طلب البحث عن السجلّات المنظَّمة في Workflows في Cloud Logging وباستخدام gcloud CLI
الخطوة التالية:
استكشِف دروسًا تطبيقية أخرى حول Cymbal Eats:
- تشغيل Cloud Workflows باستخدام Eventarc
- تفعيل معالجة الأحداث من Cloud Storage
- الاتصال بخدمة CloudSQL الخاصة من Cloud Run
- الاتصال بقواعد بيانات مُدارة بالكامل من Cloud Run
- تأمين التطبيقات بدون خادم باستخدام Identity Aware Proxy (IAP)
- تشغيل مهام Cloud Run باستخدام Cloud Scheduler
- النشر بأمان على Cloud Run
- تأمين حركة المرور الواردة إلى Cloud Run
تَنظيم
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، احذف المشروع الذي يحتوي على الموارد أو احتفظ بالمشروع واحذف الموارد الفردية.
حذف المشروع
أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته لتنفيذ البرنامج التعليمي.