Ci-dessous, l'image de l'architecture de cette époque.
・ Deux sujets dans Pub / Sub ┗ Nommez-les "topic_1" et "topic_2"
・ Cloud Scheduler ┗ Réglez le sujet sur "topic_1" et la charge utile sur "bonjour"
・ Deux fonctions avec des fonctions cloud ┗ Nommez-les "function_1" et "function_2" Le déclencheur de "function_1" définit "topic_1" de Pub / Sub Le déclencheur de "function_2" définit "topic_2" de Pub / Sub
Dans le message "event_message" suivant, une chaîne de caractères telle que la charge utile "hello" définie par Cloud Scheduler via topic_1 est stockée.
Si N Cloud Schedulers ne sont modifiés que dans la charge utile et que les autres paramètres sont identiques, event_message peut être évalué dans function_1 et le traitement ultérieur peut être effectué.
def main(event, context):
event_message = base64.b64decode(event['data']).decode('utf-8')
Ensuite, supposons que vous passiez une liste à function_2 Pub / Sub ne peut transmettre que du texte, vous devez donc l'encoder
from google.cloud import pubsub_v1
PROJECT_ID = os.getenv('GCP_PROJECT')
client = pubsub_v1.PublisherClient()
topic_id = "topic_2" #Définissez le sujet à suivre
topic_path = client.topic_path(PROJECT_ID, topic_id)
pub_text = ["pomme", "gorille", "rap"]
data = pub_text.encode() #Encodez ici
client.publish(topic_path, data=data) #C'est un sujet_2 au pub_le texte est poussé
Dans la dernière ligne ci-dessus, '["apple", "gorilla", "trumpet"]' est passé à topic_2 et function_2 est allumé.
Dans l'événement_message ci-dessous, '["apple", "gorilla", "trumpet"]' est inclus, alors évaluez-le dans la liste python. Quel est le traitement ultérieur?
def main(event, context):
event_message = base64.b64decode(event['data']).decode('utf-8')
fruit_lst = eval(event_message)
Cloud Functions peut être démarré en parallèle comme indiqué dans le document officiel ci-dessous. https://cloud.google.com/functions/quotas?hl=ja#scalability
Par conséquent, si vous publiez function_1 dans Pub / Sub en boucle comme suit, function_2 obtiendra 3 fruits.
function_1.py
from google.cloud import pubsub_v1
PROJECT_ID = os.getenv('GCP_PROJECT')
client = pubsub_v1.PublisherClient()
topic_id = "topic_2"
topic_path = client.topic_path(PROJECT_ID, topic_id)
fruit_lst = ["pomme", "gorille", "rap"]
for fruit in fruit_lst:
data = fruit.encode()
client.publish(topic_path, data=data)
https://cloud.google.com/solutions/streaming-data-from-cloud-storage-into-bigquery-using-cloud-functions?hl=ja https://cloud.google.com/functions/quotas?hl=ja#scalability
Si vous encodez également () la liste et le dict, passez-les à Pub / Sub et évaluez-les du côté de la réception, ils seront restaurés, donc c'était pratique lorsque vous souhaitiez effectuer plusieurs processus légers sur une base régulière.