하나의 구독으로 pubsub 주제가 있는데 두 명의 다른 구독자가 여기에서 빠져 나오고 있습니다. stackdriver를 사용하여 구독에 ~ 1000 개의 메시지가 있음을 알 수 있습니다. 각 가입자는 다음과 같은 설문 조사 루프를 실행합니다클라우드 pubsub 저속 폴링 속도
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_immediately=False
을 사용하려고 시도했는데, 그 속도가 약간 빨라 졌는데, 풀링 속도는 ~ 2.5 메시지/초로 증가했지만 여전히 예상했던 속도는 아니었다.
아이디어를 끌어 올리는 방법을 알려주세요. 어떤 pubsub 설문 조사 모범 사례?
그게 바로 내가하고있는 일입니다. pubsub 메시지를 받으면 로컬 redis/rabitmq에 게시합니다. 다른 프로세스가 거기에서 가져옵니다. 나는 여러 대의 기계를 가지고있다. (현재 두 개는 ~ 1000 개의 메시지를 처리해야하기 때문에). 각자 구독에서 메시지를 가져 와서 전달하고 새로운 끌어 오기 요청을 만듭니다 – sagie
게다가 구독에는 ~ 1000 개의 메시지가 있습니다. 왜'max_messages = 200'을 가진 pull 연산은 몇 개의 메시지만을 반환하고,'return_immediate = False'는 전혀 메시지를 반환하지 않을 수도 있습니다. – sagie
한 번에 여러 개의 풀 요청을 처리해야합니다. 두 대의 기계가 있다고해서 반드시 보장되는 것은 아닙니다. 그들은 동시에 반환 할 수 있고 지금 당신은 어떤 현저한 요구도없는 상태에 있습니다. 당신이 1000 개의 메시지를 말할 때, 이것은 총입니까? 아니면 초당 메시지의 개수입니까? –