2017-12-06 14 views
1

메시지 처리를 위해 python 클라이언트 (Google 클라우드 0.30.0의 일부로 제공됨)를 사용하고 있습니다. 내 메시지가 중복되는 경우가 있습니다 (약 10 %). 나는 같은 메시지를 몇 시간 안에 50 개까지 반복해서 얻을 것이다. 내 가입 설정은 600 초의 확인 시간이지만 메시지는 이전 시간보다 1 분 후에 재전송 될 수 있습니다.Google PubSub 메시지 중복

실행 중일 때 가끔 503 개의 오류가 발생합니다 (policy_class로 기록) 아무도 그 동작을 경험하지 않았습니까? 어떤 아이디어?

c = pubsub_v1.SubscriberClient(policy_class)  
subscription = c.subscribe(c.subscription_path(my_proj ,my_topic) 
res = subscription.open(callback=callback_func) 
res.result() 

def callback_func(msg) 
    try: 
    log.info('got %s', msg.data) 
    ... 
    finally: 
    ms.ack() 

답변

0

같은 내 코드보기는 사용중인 클라이언트 라이브러리는 StreamingPull 전화 가입하는 새로운 펍/하위 API를 사용합니다. 이것의 한 가지 효과는 설정 한 구독 기한이 더 이상 사용되지 않고 대신 클라이언트 라이브러리에 의해 계산 된 구독 기한입니다. 클라이언트 라이브러리는 자동으로 메시지 마감 시간을 연장합니다.

이 중복 메시지를 받았을 때 - 재전송 될 때 이미 메시지를 확인 했습니까? 아니면 여전히 메시지를 처리하는 중입니까? 이미 ack'd했다면, 당신이 피하지 못한 메시지가 있습니까? 일부 메일은 중복되었지만 동일한 일괄 처리의 메일을 다시 보내야하는 경우 중복 될 수 있습니다.

메시지를 처리하는 데 30 분 이상 소요되는 경우 현재 일부 중복이 예상됩니다.

이 구글 클라우드-pubsub 파이썬 클라이언트에 문제가 될 것으로 보인다
+0

감사 맥스, 이것은 일반적으로 나는 모든 메시지를 ACK 것이다 (관련이있을 수를 예상대로 작동 도서관에서 포장되지 않은 것으로 간주 할 수 있도록 라이브러리를 확인하는 데는 시간이 걸립니다.) 배치 크기를 제어 할 수있는 곳의 문서를 찾지 못했거나 한 번에 모든 배치를 확인하십시오. –

0

, 나는) 버전 0.29.4 및 ACK (업그레이드

+0

차갑다. 또한 Google은 동일한 메시지를 두 번 이상받을 수 있다고 말합니다. _ 일반적으로 Pub/Sub는 각 메시지를 게시 된 순서대로 한 번만 전달합니다. 그러나 때때로 메시지가 순서가 틀리거나 두 번 이상 전달 될 수 있습니다. 일반적으로 메시지를 처리 ​​할 때 가입자가 멱등환이 필요합니다. [구독자 문서] (https://cloud.google.com/pubsub/docs/subscriber) –