4

코드에서 구독을 신청하려면 자바 라이브러리를 사용하고 있습니다. 사용 SBT : 그것은 위대한 작품을 https://cloud.google.com/pubsub/docs/pullGoogle Pubsub : UNAVAILABLE : 서비스가 요청을 수행하지 못했습니다.

val projectId = "test-topic" 
val subscriptionId = "test-sub" 

def main(args: Array[String]): Unit = { 
val subscriptionName = SubscriptionName.create(projectId, subscriptionId) 
val subscriber = Subscriber.defaultBuilder(subscriptionName, new PastEventMessageReceiver()).build() 
subscriber.startAsync() 
System.in.read() 
} 


class PastEventMessageReceiver extends MessageReceiver { 
    override def receiveMessage(message: PubsubMessage, consumer: AckReplyConsumer): Unit = { 
    println(message) 
    consumer.ack() 
} 

, 내가 쪽지 출판 당길 수 있어요하지만 난 내 로그에 분당 여러 번이 오류를보고 계속 : "com.google.cloud" % "google-cloud-pubsub" % "0.24.0-beta"

나는 가입자를 작성하는이 가이드를 따라 .

com.google.cloud.pubsub.v1.StreamingSubscriberConnection$1 onFailure 
WARNING: Terminated streaming with exception 
io.grpc.StatusRuntimeException: UNAVAILABLE: The service was unable to fulfill your request. Please try again. [code=8a75] 
    at io.grpc.Status.asRuntimeException(Status.java:526) 
    at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:385) 
    at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:422) 
    at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:61) 
    at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.close(ClientCallImpl.java:504) 
    at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.access$600(ClientCallImpl.java:425) 
    at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:536) 
    at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) 
    at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:102) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

내가 먼저 내가 분당 여러 번 볼 지연 후, 그 오류가 표시되지 않는 약간의 지연 (1-2 주위 분)가이 응용 프로그램을 실행합니다. 내 응용 프로그램은 여전히 ​​힘든 메시지를 끌어낼 수 있습니다.

답변

1

이 메시지는 Pub/Sub 서버로 전송 된 요청에 연결이 끊어 지거나 다시 시도 할 수있는 오류가 발생하면 Google Cloud Pub/Sub 라이브러리의 내부 오류입니다. 클라이언트 라이브러리는 연결을 원활하게 재 작성하고 이러한 오류에 대한 요청을 다시 시도해야합니다. 버전 0.26.0-beta 이상에서 클라이언트 라이브러리의 have the log level set to FINE을 제외하고 이러한 오류는 더 이상 로그에 출력되지 않습니다. 일반적으로이 오류가 발생한 후에도 MessageReceiver로 계속 메시지를 보내야합니다. 구독이 발견되지 않을 때와 같이 클라이언트 라이브러리 자체에서 다시 시도 할 수없는 오류는 발신자에게 다시 전달됩니다.

-1

그냥 서비스가 현재 귀하의 요청을 이행 할 수는 없지만 나중에 사용할 수 있으며 다시 시도 할 수 있습니다. 구독 코드는 나중에 어떤 시점에서 메시지를 가져올 수 있습니다.

그것은 메시지가 삭제되기 것을 의미하지 않는다 UNAVAILABLE

에 대한 오류 설명을 참조하십시오. 그래서 당신은 그 실수에 덜 신경을 쓰고 싶을지도 모릅니다.

추신 : 나는이 오류의 나쁜 영향이나이 오류를 처리 할 수있는 방법이 있다면 gcp 사람들로부터 더 많이 알고 싶습니다.

+0

"care less"라는 조언을 무시하고 싶을 수도 있습니다 ... 일단이 오류가 발생하면 응용 프로그램은 계속 실행되지만 더 이상 메시지를받지 않습니다. 응용 프로그램을 다시 시작하면 메시지를 다시 받기 시작하지만 결국 같은 오류가 발생합니다. – howMuchCheeseIsTooMuchCheese