2017-10-18 3 views
3

기본적으로 클라우드 pubsub 항목의 메시지에서 트리거되는 Cloud 함수 (Node.js 코드 작성)를 작성하고 해당 데이터를 Bigquery 테이블에로드합니다.Node.js를 사용하여 Cloud PubSub에서 수신 확인을 제어하는 ​​방법

주제에있는 메시지는 클라우드 기능으로 읽은 후에 삭제됩니다. 구독자가 내부적으로 응답을 보내면 메시지가 항목에서 삭제된다는 사실을 알고 있습니다.

게시자에게 보낸 승인을 제어하려고합니다. 그것이 어떻게 성취 될 수 있으며 이것에 대한 어떠한 문서도 찾지 못했습니다.

+0

수동으로 하시겠습니까? 아니면 Googels 클라이언트 라이브러리 중 하나를 사용하고 있습니까? 클라이언트 라이브러리는 ack 자체를 반환하도록 설계되었습니다. 나는 이것을 해제하는 방법이 있는지 알아야만합니다. – DaImTo

답변

0

Google Cloud 기능을 사용하면 Cloud Pub/Sub 메시지의 수신 확인을 제어 할 수 없습니다. 기능이 완료되면 메시지는 구독에 대해 확인 응답을받습니다. 확인을보다 세밀하게 제어하려면 Google Cloud Pub/Sub를 직접 사용해야합니다. Node.js client library이 있습니다.

수신 확인에 대한 몇 가지 명확한 메모 : 단일 가입에 대한 메시지를 확인한다고해서 가입에 대해서만 메시지가 삭제 된 것은 아닙니다. 다른 독립 구독은 여전히 ​​메시지를 수신하고이를 확인해야합니다. 이는 게시자에게 보낸 승인과도 독립적입니다. Google Cloud Pub/Sub 메시지가 게시되면 Google Cloud Pub/Sub가 메시지를 저장하고 구독에 전달된다는 보장을 받으면 공개 호출이 승인 (즉, 응답이 게시자에게 전송 됨)됩니다. 이것은 비동기 메시지 전달 시스템의 주요 이점 중 하나입니다. 게시자로부터 메시지를 수신하고 게시를 인정하는 것은 구독을 통해 메시지를 전달하는 것과 별개입니다 (구독자가 별도로 확인 함).

+0

설명을 주셔서 감사합니다. 승인에 대한 노트와 관련하여 : 내가 주제에 대한 3 개의 가입을 가지고 있고 가입자 중 하나가 승인을 보내지 않았다면 (당신이 한 의견대로 메시지는 주제에서 삭제되지 않을 것입니다) 그러면 다른 두 가입자는 다시 그 주제에서 동일한 메시지를 읽을 수 있습니까? – Shawn

+0

단일 구독으로 메시지를 확인하지 않은 경우 해당 구독 만 메시지를 다시 가져와야합니다 (Pub/Sub가 일반적으로 한 번 배달되었음을 나타내는 경고와 함께). 메시지의 수신 확인은 _ 구독입니다. –

+0

@kamal 우리는 [node.js pubsub 클라이언트] (https://github.com/googleapis/nodejs-pubsub)가 백그라운드에서 확인을 보내므로 클라우드 기능을 제대로 수행하지 못한다는 것을 알게되었습니다 ([클라우드 기능을위한 금기] (https://cloud.google.com/functions/docs/bestpractices/tips#do_not_start_background_activities)) 연결을 다시 시도합니다. [내 질문에] (https://stackoverflow.com/q/48623991/880509) 참조. – codyzu

0

메시지가 수신 확인되고 클라우드 기능에없는 메시지를 확실하게 제어하는 ​​유일한 방법은 REST Service APIs입니다.

이것은 node.js pubsub client 서비스가 수신 확인을 처리하고 백그라운드에서 연결을 관리하기 때문입니다. 이것은 clearly forbidden in a cloud function입니다.

그러나 REST API는 사용하기가 쉽고 수신 확인 메시지를 미세하게 제어 할 수 있습니다.