在 Cloud PubSub 中发布非字符串消息

Par*_*ari 5 google-cloud-platform google-cloud-pubsub

几乎所有可通过网络获得的发布/订阅示例都使用字符串消息。

如何将 Java Object、JSON 或 AVRO 等文本消息以外的消息发布到主题,然后通过订阅使用它。

非常感谢帕里

Jav*_*ñoz 7

以下代码允许您使用 JSON 在 Pub/Sub 中发布消息:

topic_path = 'your-topic-id'

publisher = pubsub_v1.PublisherClient()

record = {
    'Key1': 'Value1',
    'Key2': 'Value2',
    'Key3': 'Value3',
    'Key4': 'Value4'
}

data = json.dumps(record).encode("utf-8")
future = publisher.publish(topic_path, data)
print(f'published message id {future.result()}')
Run Code Online (Sandbox Code Playgroud)

我希望它对你有帮助。


Lef*_*s S 6

您实际上无法直接执行此操作,正如您在此处此处所看到的,发布的消息必须是字节串。您可以做的是加载文件,对其进行编码utf-8,然后发布。之后,在拉取时,您可以将消息数据转储到文件中。例如,使用 python 处理 json,您需要像这样发布:

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project, topic_name)

with open(json_path) as f:
    data = str(json.load(f))

data = data.encode('utf-8')
publisher.publish(topic_path, data=data)
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样拉取和转储:

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(
    project, subscription_name)

def callback(message):
    with open('received_message.json', 'w') as outfile:
        json.dump(message.data, outfile)

subscriber.subscribe(subscription_path, callback=callback)
Run Code Online (Sandbox Code Playgroud)