ضبط Eventarc لتشغيل سير العمل الذي تتكامل مع GKE Autopilot وPub/Sub

ضبط Eventarc لتشغيل سير العمل الذي تتكامل مع GKE Autopilot وPub/Sub

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: فبراير 2, 2023
account_circleتأليف: Andrey Shakirov, Christopher Grant

1. نظرة عامة

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

6c0606022b76f79d.png

ما هو GKE Autopilot؟

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

باستخدام إصدار GKE Standard، يتحمّل المستخدمون مسؤولية إدارة عُقد العاملين وتكوين مجموعة العُقد، بينما يتولى GKE تولي إدارة باقي العُقد.

مسؤوليات العميل مقابل Google عند استخدام وضع GKE العادي

85500aad65f87437.png

باستخدام GKE Autopilot، تقع مسؤولية ضبط مجموعة العُقد وإدارتها على عاتق Google. ويتيح لك ذلك التركيز على التطبيقات والخدمات التي تعمل في أعلى المجموعة.

ما هي Eventarc؟

تتيح لك منصة Eventarc إنشاء بُنى تستند إلى الأحداث بدون الحاجة إلى تنفيذ البنية الأساسية الأساسية أو تخصيصها أو صيانتها. توفّر منصة Eventarc حلاً موحّدًا لإدارة تدفق تغييرات الحالة، والذي يُطلق عليه اسم الأحداث، بين الخدمات المصغّرة المنفصلة. عند تفعيل منصة Eventarc، توجّه هذه الأحداث من خلال اشتراكات النشر/الاشتراك إلى وجهات مختلفة (على سبيل المثال، Workflows، وCloud Run) أثناء إدارة التسليم والأمان والتفويض وإمكانية الملاحظة ومعالجة الأخطاء نيابةً عنك.

موفّرو فعاليات Google

  • أكثر من 90 مقدّم خدمة Google Cloud ويُرسل موفّرو الخدمات هؤلاء الأحداث إما مباشرةً من المصدر (على سبيل المثال، Cloud Storage) أو من خلال إدخالات سجلّات التدقيق في Cloud.
  • مقدّمو خدمة النشر/الاشتراك يرسل موفّرو الخدمات هؤلاء الأحداث إلى Eventarc باستخدام رسائل Pub/Sub.

مقدّمو الخدمات التابعون لجهات خارجية

مقدّمو الخدمات التابعون لجهات خارجية هم كيانات غير تابعة لشركة Google توفّر مصدر Eventarc.

مشغِّلات Eventarc

  • أحداث Cloud Pub/Sub: يمكن تشغيل Eventarc من خلال الرسائل المنشورة في مواضيع Pub/Sub.
  • أحداث سجلات تدقيق Cloud (CAL) توفّر سجلّات التدقيق في السحابة الإلكترونية سجلّات تدقيق "نشاط المشرف" و"الوصول إلى البيانات" لكل مشروع ومجلد ومؤسسة على السحابة الإلكترونية.
  • الأحداث المباشرة: يمكن تشغيل Eventarc بواسطة أحداث مباشرة متنوعة مثل تعديل حزمة Cloud Storage أو تعديل نموذج "الإعداد عن بُعد في Firebase".

وجهات الأحداث

c7ca054200edf1b3.png

ما هي سير العمل؟

Workflows هي خدمة مُدارة بالكامل تتيح لك دمج الخدمات المصغّرة والمهام وواجهات برمجة التطبيقات. سير العمل هو خدمة بدون خادم وسيتم توسيع نطاقه لتلبية طلبك.

حالات استخدام سير العمل:

  • يتم تنفيذ عمليات سير العمل المستندة إلى حدث على عوامل تشغيل محدّدة. على سبيل المثال، عندما يتم إرسال طلب جديد وتريد احتساب نقاط ولاء العملاء. أو عند إلغاء طلب، يمكن نشر الحدث وستعالج كل الخدمات المهتمة الحدث.
  • يتم تنفيذ مهام سير العمل المجمّعة للمهام بشكلٍ منتظم باستخدام Cloud Scheduler. على سبيل المثال، وظيفة ليلية للبحث عن عناصر القائمة في حالة "فشل" وحذفها.

تُعد سير العمل مثالية لمهام سير العمل التي تنظم الخدمات. يمكنك برمجة العمليات التي تشمل الانتظار وإعادة المحاولة لمدة تصل إلى عام.

مزايا سير العمل:

  • الضبط على الترميز: يمكنك تقليل الديون التقنية عن طريق نقل المنطق إلى عملية الإعداد بدلاً من كتابة الرمز.
  • تبسيط البنية الأساسية: تتيح لك إجراءات سير العمل ذات الحالة الحالة عرض عمليات دمج الخدمات المعقدة ومراقبتها بدون اعتماديات إضافية.
  • يتضمن الموثوقية وتقبُّل الأخطاء. يمكنك التحكّم في الأعطال من خلال منطق إعادة المحاولة التلقائي أو المخصّص ومعالجة الأخطاء حتى في حال تعذُّر الأنظمة الأخرى، وذلك من خلال الإشارة في كل خطوة إلى 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. الإعداد والمتطلبات

إعداد مشروع Cloud

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

إعداد البيئة

يمكنك تفعيل Cloud Shell من خلال النقر على الرمز على يسار شريط البحث.

8613854df02635a3.png

استنسِخ المستودع وانتقِل إلى الدليل، وانسخ الأمر أدناه والصقه في الوحدة الطرفية وانقر على Enter:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

نشر الموارد التابعة المطلوبة من خلال تنفيذ gke-lab-setup.sh

سيتم إنشاء المراجع التالية:

  • المجموعة والمثيل في AlloyDB
  • مجموعة التوجيه التلقائي في GKE
./gke-lab-setup.sh

إذا طُلب منك التفويض، انقر على "تفويض". للمتابعة.

6356559df3eccdda.png

سيستغرق الإعداد حوالى 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

مراجعة مجموعة 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

عينة الناتج:

772db9dd58172e0c.png

شغّل الأمر لتخزين بيانات الاعتماد للمجموعة:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

نشر تطبيق

ستقوم بعد ذلك بنشر تطبيق خدمة العملاء. هذه خدمة مصغّرة مستندة إلى جافا وتستخدم إطار عمل 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 في ملف Publishing.yaml:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

شغّل الأمر لنشر التطبيق:

kubectl apply -f customer-service-deployment.yaml

سيستغرق انتقال التطبيق إلى الحالة "قيد التشغيل" بضع لحظات.

مراجعة ملف مواصفات النشر:

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

عينة الناتج:

179a23bd33793924.png

4. مراجعة سير العمل

المفاهيم الأساسية لسير العمل

يتكوّن سير العمل من سلسلة من الخطوات الموضَّحة باستخدام بنية Workflows( YAML أو JSON).

بعد إنشاء سير عمل، يتم نشره، ما يجعله جاهزًا للتنفيذ.

التنفيذ هو عملية تشغيل واحدة للمنطق المضمّن في تعريف سير العمل. لا يؤدي سير العمل الذي لم يتم تنفيذه إلى تحصيل أي رسوم. جميع عمليات تنفيذ سير العمل مستقلة، ويتيح التوسّع السريع للمنتج عددًا كبيرًا من عمليات التنفيذ المتزامنة.

عناصر التحكّم في التنفيذ

  • الخطوات: لإنشاء سير عمل، يمكنك تحديد steps المطلوب وترتيب التنفيذ باستخدام بنية Workflows. يجب أن يتضمن كل سير عمل خطوة واحدة على الأقل.
  • الشروط - يمكنك استخدام مجموعة switch كآلية اختيار تسمح لقيمة التعبير بالتحكّم في مسار تنفيذ سير العمل.
  • التكرارات - يمكنك استخدام التكرار الحلقي for لتكرار تسلسل أرقام أو خلال مجموعة من البيانات، مثل قائمة أو خريطة.
  • سير العمل الفرعي: يعمل سير العمل الفرعي بشكل مشابه للروتين اليومي أو الوظيفة في لغة برمجة، ما يسمح لك بتغليف خطوة أو مجموعة خطوات سيتكررها سير العمل عدة مرات.

شغِّل عمليات التنفيذ

  • يدوي: يمكنك إدارة مهام سير العمل من وحدة تحكُّم Google Cloud أو من سطر الأوامر باستخدام واجهة سطر الأوامر في Google Cloud.
  • برمجة: يمكن استخدام Cloud Client Libraries لواجهة برمجة تطبيقات Workflows أو REST API لإدارة مهام سير العمل.
  • مجدوَل - يمكنك استخدام "أداة جدولة المهام في السحابة الإلكترونية" لتنفيذ سير عمل وفقًا لجدول زمني معيَّن.

وسيطات وقت التشغيل

يمكن الوصول إلى البيانات التي تم تمريرها في وقت التشغيل من خلال إضافة حقل "params" إلى سير العمل الرئيسي (الموضوع في مجموعة رئيسية). تقبل المجموعة الرئيسية وسيطة واحدة تمثّل أي نوع صالح من بيانات JSON. يسمي حقل المَعلمات المتغيّر الذي يستخدمه سير العمل لتخزين البيانات التي تمرِّرها.

منطق سير العمل

وإذا لم يكن العميل متوفّرًا، سيجري سير العمل طلب بيانات من واجهة برمجة التطبيقات لإنشاء عميل أولاً، ثم تعديل نقاط المكافآت. استنادًا إلى إجمالي مبلغ الطلب، سيختار سير العمل مضاعِفًا لحساب نقاط المكافآت للعميل. راجِع النموذج أدناه للحصول على التفاصيل.

    - 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}

99f9cf1076c03fb6.png

5. إعداد Workflow ونشره

شغِّل الأمر لعرض عنوان IP الخارجي للخدمة:

kubectl get svc

عينة الناتج:

fe5cfec2bc836a5f.png

عليك ضبط متغيّر البيئة أدناه باستخدام قيمة عنوان 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

ضبط الموقع لمتغيّرات خدمة سير العمل وبيئة المشروع:

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

راجِع مصدر سير العمل والتفاصيل الأخرى(علامة التبويب "العوامل المُشغِّلة"). في الوقت الحالي، لم يتم ضبط أي مشغِّلات لتنفيذ سير العمل هذا. ستقوم بإعداد هذه الميزة في الخطوة التالية.

66ba7ebbde76d5a6.png

6. ضبط مواضيع النشر/الاشتراك ومشغّل Eventarc

بعد ذلك، ستقوم بإنشاء موضوعين للنشر/الاشتراك وإعداد مشغل Eventarc واحد.

سينشر تطبيق Order Service رسائل إلى order-topic تحتوي على معلومات حول الطلبات الجديدة.

سينشر سير العمل رسائل إلى "order-points-topic" تتضمّن معلومات حول نقاط مكافأة الطلب والمبلغ الإجمالي. تعرض خدمة Order Service(notالميزات الخاصة بالميزة الاختبارية) نقطة نهاية يستخدمها اشتراك Push في order-points-topic, لتعديل نقاط المكافآت وإجمالي المبلغ لكل طلب.

إنشاء مواضيع جديدة للنشر/الاشتراك:

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.

راجِع نوع Eventarctrigger الذي تم إنشاؤه.

bda445561ad5f4.png

مراجعة الاشتراك الذي تم إنشاؤه لمعرفة عامل التفعيل

3fccdda7d5526597.png

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

23d338abc16eaac8.png

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

6c0606022b76f79d.png

لمحاكاة خدمة الطلب، عليك إرسال رسائل إلى موضوع النشر/الاشتراك من 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'

مراجعة تفاصيل تنفيذ سير العمل والسجلات.

1e802826c700cc3e.png

57ff9705bf507fb0.png

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 ونفِّذ طلب بحث للعثور على الطلبات التي تمت معالجتها بمبلغ إجمالي يزيد عن دولارين أمريكيين.

لإظهار حقل طلب البحث، انقر على "إظهار طلب البحث".

f0a57ff3d10bad2.png

resource.type="workflows.googleapis.com/Workflow" AND 
jsonPayload.totalAmount > 2 AND
timestamp >= "2023-01-01T00:00:00Z" AND
timestamp <= "2024-12-31T23:59:59Z"

عينة الناتج:

9093f87159f1b928.png

افتح 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:

35d5fd851ecde60.png

شغِّل الأمر أدناه لعرض السجلات بتنسيق 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:

ac7421548ea9a9f2.png

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 لتشغيل سير العمل
  • كيفية ضبط Workflow لإجراء طلبات البيانات من واجهة برمجة التطبيقات إلى تطبيق يعمل على GKE Autopilot
  • طريقة ضبط سير العمل لنشر الرسائل على خدمة Pub/Sub
  • كيفية طلب البحث عن سجلّات Workflows المنظَّمة في Cloud Logging واستخدام gcloud CLI

الخطوة التالية:

اطّلع على الدروس التطبيقية الأخرى حول الترميز في Cymbal Eats:

تَنظيم

لتجنُّب تحمُّل الرسوم المفروضة على حسابك على Google Cloud مقابل الموارد المُستخدَمة في هذا الدليل التوجيهي، يمكنك إما حذف المشروع الذي يحتوي على الموارد أو الاحتفاظ بالمشروع وحذف الموارد الفردية.

حذف المشروع

أسهل طريقة لإزالة الفوترة هي حذف المشروع الذي أنشأته للبرنامج التعليمي.