פרסום הודעה בנושא Pub/Sub

אפשר להשתמש במחבר Workflows כדי לתמוך בפעולות Pub/Sub, כולל פרסום הודעות בנושא Pub/Sub.

נושא ב-Pub/Sub הוא משאב שמוציאים לאור שולחים אליו הודעות. מינוי מייצג את זרם ההודעות מנושא מסוים שצריך להימסר לאפליקציה שנרשמה למינוי. מידע נוסף על Pub/Sub

פרסום הודעות

אחרי שיוצרים נושא Pub/Sub ומינוי לנושא הזה, אפשר ליצור תהליך עבודה שמפרסם הודעה בנושא הזה:

YAML

- init:
    assign:
      - project: '${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}'
      - topic: TOPIC_ID
      - subscription: SUBSCRIPTION_ID
      - message:
          hello: world
      - base64Msg: '${base64.encode(json.encode(message))}'
- publish_message_to_topic:
    call: googleapis.pubsub.v1.projects.topics.publish
    args:
      topic: '${"projects/" + project + "/topics/" + topic}'
      body:
        messages:
          - data: '${base64Msg}'

JSON

[
{
  "init": {
    "assign": [
      {
        "project": "${sys.get_env(\"GOOGLE_CLOUD_PROJECT_ID\")}"
      },
      {
        "topic": "TOPIC_ID"
      },
      {
        "subscription": "SUBSCRIPTION_ID"
      },
      {
        "message": {
          "hello": "world"
        }
      },
      {
        "base64Msg": "${base64.encode(json.encode(message))}"
      }
    ]
  }
},
{
  "publish_message_to_topic": {
    "call": "googleapis.pubsub.v1.projects.topics.publish",
    "args": {
      "topic": "${\"projects/\" + project + \"/topics/\" + topic}",
      "body": {
        "messages": [
          {
            "data": "${base64Msg}"
          }
        ]
      }
    }
  }
}
]

מחליפים את מה שכתוב בשדות הבאים:

  • TOPIC_ID: המזהה או המזהה המוגדר במלואו של נושא ה-Pub/Sub.

  • SUBSCRIPTION_ID: המזהה או המזהה המוגדר במלואו של מינוי Pub/Sub.

שליפת הודעות

אפשר ליצור טריגר Eventarc שמקשר נושא Pub/Sub למקבל אירועים של Workflows. הודעה מתפרסמת בנושא ב-Pub/Sub כדי ליצור אירוע, והאירוע מועבר כארגומנט של זמן ריצה אל זרימת העבודה של היעד. מידע נוסף מופיע במאמר הפעלת תהליך עבודה באמצעות אירועים או הודעות Pub/Sub.

אפשר גם ליצור תהליך עבודה ששולף את ההודעה מ-Pub/Sub. בדוגמה הבאה, תהליך העבודה מחכה שההודעה תפורסם באמצעות polling.

YAML

- pullMessage:
    call: googleapis.pubsub.v1.projects.subscriptions.pull
    args:
        subscription: '${"projects/" + project + "/subscriptions/" + subscription}'
        body:
            maxMessages: 1
    result: m
- checkState:
    switch:
    - condition: ${m.receivedMessages[0].message.data != ""}
      next: outputMessage
- wait:
    call: sys.sleep
    args:
        seconds: 60
    next: pullMessage
- outputMessage:
    return: '${json.decode(base64.decode(m.receivedMessages[0].message.data))}'

JSON

  [
    {
      "pullMessage": {
        "call": "googleapis.pubsub.v1.projects.subscriptions.pull",
        "args": {
          "subscription": "${\"projects/\" + project + \"/subscriptions/\" + subscription}",
          "body": {
            "maxMessages": 1
          }
        },
        "result": "m"
      }
    },
    {
      "checkState": {
        "switch": [
          {
            "condition": "${m.receivedMessages[0].message.data != \"\"}",
            "next": "outputMessage"
          }
        ]
      }
    },
    {
      "wait": {
        "call": "sys.sleep",
        "args": {
          "seconds": 60
        },
        "next": "pullMessage"
      }
    },
    {
      "outputMessage": {
        "return": "${json.decode(base64.decode(m.receivedMessages[0].message.data))}"
      }
    }
  ]