Google Cloud PubSub - 列出自定义属性的更好方法?

Posted

技术标签:

【中文标题】Google Cloud PubSub - 列出自定义属性的更好方法?【英文标题】:Google Cloud PubSub - better way to list custom attributes? 【发布时间】:2021-08-31 22:20:50 【问题描述】:

我正在尝试简化将数据发布到 PubSub 的 Python 代码。这有效:

import os
from google.cloud import pubsub_v1
import json

credentials_path = '/path/to/my/service.account.privateKey.json'
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_path

publisher = pubsub_v1.PublisherClient()
# topic_path = publisher.topic_path(project_id, topic_id)         # this is the same as writing the string 'projects/projectId/topics/topicId'
topic_path = 'projects/MY_PROJECT/topics/MY_TOPIC'

data = 'Sensor data ready!'
data = data.encode('utf-8')                                     # data needs to be a bytestring
future = publisher.publish(topic_path, data, sensorName='garden', temperature='75.0', humidity='88.8')            # when you publish a message, the client returns a future
print(f'published message id future.result()')

但我希望有一种更优雅的方式来传递我的自定义属性。而不是像这样一一列出:

future = publisher.publish(topic_path, data, sensorName='garden', temperature='75.0', humidity='88.8')

...有没有办法按照以下方式做某事:

attributes = 
    'sensorName': 'garden',
    'temperature': '75.0',
    'humidity': '60'

future = publisher.publish(topic_path, data, attributes)

谢谢, 瑞恩

【问题讨论】:

使用**解压字典publish(..., **attributes) 我想知道为什么不在data中将其全部作为JSON字符串发送 完美,谢谢! 我最初使用 json.dumps() 和 json.loads() 将 json 对象推送到“数据”中,然后我意识到他们允许自定义属性字段并想尝试使用它来制作代码更短,更易读。再次感谢! 嗨,瑞安,弗拉斯,如果我的回答是这样的话;我建议将其作为完整答案发布,以便社区的其他用户可以从中受益!谢谢 【参考方案1】:

正如@furas 上面提到的,只需解压attributes 对象,因为它被传递到publish(...)

attributes = 
    'sensorName': 'garden',
    'temperature': '75.0',
    'humidity': '60'

future = publisher.publish(topic_path, data, **attributes)

谢谢, 瑞恩

【讨论】:

以上是关于Google Cloud PubSub - 列出自定义属性的更好方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Google PubSub 确认 (@google-cloud/pubsub)

Google Cloud Function - ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub”

使用 Google Cloud PubSub 不断收到“向 Cloud PubSub 发送测试消息时出错...”

如何在 Google.Cloud.PubSub.V1 SubscriberServiceApiClientBuilder 中配置频道选项

为 Google PubSub 暂停 Spring Cloud StreamListener

google cloud pubsub ImportError:无法导入名称类型