Google cloud platform 云计算次慢速轮询速率

Google cloud platform 云计算次慢速轮询速率,google-cloud-platform,gcloud,google-cloud-pubsub,Google Cloud Platform,Gcloud,Google Cloud Pubsub,我有一个pubsub主题,有一个订阅,两个不同的订阅方正在从中获取信息。 使用stackdriver,我可以看到订阅有约1000条消息。 每个订阅服务器运行以下轮询循环: client = pubsub.Client() topic = client.topic(topic_name) subscription = pubsub.Subscription(subscription_name) while True: messages = subscription.pull(return

我有一个pubsub主题,有一个订阅,两个不同的订阅方正在从中获取信息。 使用stackdriver,我可以看到订阅有约1000条消息。 每个订阅服务器运行以下轮询循环:

client = pubsub.Client()
topic = client.topic(topic_name)
subscription = pubsub.Subscription(subscription_name)

while True:
    messages = subscription.pull(return_immediately=True, max_messages=100, client=client)
    print len(messages)
    # put messages in local queue for later processing. Those processes will ack the subsription
我的问题是投票率很低——尽管我有很多消息等待投票,但每次我只收到几条消息。而且,很多回复都没有回复任何消息。根据stackdriver的说法,我的消息提取率约为1.5条消息/秒

我尝试使用
return\u instally=False
,它稍微改进了一点-拉取速率增加到每秒约2.5条消息,但仍然不是我期望的速率


有没有办法提高拉速?是否有pubsub民意测验最佳实践?

为了提高拉取率,您需要一次有多个未完成的拉取请求。数量取决于发布速度和发布地点。你需要在任何时候都至少有一些优秀的。一旦其中一个返回,就创建另一个请求。这样,每当云发布/订阅准备好向您的订阅者发送消息时,您都会收到等待接收消息的请求。

这正是我要做的。当我得到一条pubsub消息时,我会在本地redis/rabitmq中发布它。其他过程将从那里开始。我有几台机器(目前有两台,因为它们可以处理大约1000条消息)。每个请求都从订阅中提取消息,传递消息,并创建一个新的请求请求。此外,订阅有约1000条消息。为什么使用
max_messages=200
的拉取操作只返回几条消息,而使用
return_immediate=False的拉取操作甚至可能根本不返回消息?您仍然需要同时执行多个未完成的拉取请求。拥有两台机器并不一定能保证这一点;他们可能会同时返回,现在你的状态没有任何未完成的请求。当你说1000条消息时,这是总数还是每秒的消息数?发布速率约为10条消息/秒。由于拉取率较低,消息在订阅中挂起的时间很长,并且它聚合到1000多条消息