Как Google Cloud Pub / Sub работает с несколькими экземплярами App Engine - PullRequest
0 голосов
/ 22 марта 2020

Читая эту страницу, https://cloud.google.com/appengine/docs/flexible/nodejs/writing-and-responding-to-pub-sub-messages, я вижу, что pub / sub отправляет сообщение на URL, который вы указываете, когда появляется новое сообщение.

Причина, по которой я хотел использовать pub / sub должен был соединить мои экземпляры App Engine вместе (если App Engine масштабируется на несколько серверов, я хочу, чтобы серверы знали некоторую информацию). При использовании Google Cloud Pub / Sub все сообщения моего App Engine получат сообщение, или только один экземпляр получит сообщение, и есть ли способ убедиться, что все экземпляры получат одно и то же сообщение?

Я также зарегистрировался в Pull, https://cloud.google.com/pubsub/docs/pull, и похоже, что это будет работать, но я не понимаю, как сообщения отправляются без использования конечной точки URL.

1 Ответ

0 голосов
/ 26 марта 2020

PubSub имеет два механизма доставки сообщения:

  • Pu sh Абонент . PubSub автоматически доставляет в конечную точку сообщение, как только оно приходит, как описано в документации, которую вы уже проверили.

  • Абонент Pull . PubSub доставляет сообщения подписчику после явного выполнения запроса на получение. Вы даже можете иметь более одного подписчика, который тянет сообщения. Вытягивание означает, что клиентское приложение подключается к определенной c подписке и запрашивает сообщения.

Оба варианта могут работать в вашем случае использования чата, позвольте мне рассмотреть его следующим способом:

1. Не подтверждать сообщения.

В сферу действия PubSub входит доставка сообщений хотя бы один раз . Это означает, что как только экземпляр AppEngine прочитает сообщение и подтвердит его, такое сообщение будет удалено из PubSub. Ваши экземпляры могут читать сообщения и не подтверждать их, таким образом PubSub может повторить доставку (сообщения останутся в PubSub в течение периода хранения по умолчанию, равного 7 дням.

В определенный момент все экземпляры будут нужно прочитать то же сообщение, но вам нужно будет внедрить механизм идентификации уже прочитанных сообщений для предотвращения дублирования, это может быть не лучшим решением.

2. Интегрировать приложение Publisher , и каждое новое сообщение чата может быть опубликовано в Pubsub .

. Вам необходимо иметь издателя на каждом сервере, от которого зависит ваше приложение чата. Все ваши серверы (экземпляры) будут иметь клиента, который публикует sh сообщение, как только оно приходит. После получения цель pubsub состоит в том, чтобы доставить каждое сообщение хотя бы один раз, поэтому вам необходимо иметь другое приложение с именем Subscriber (Pu sh или Потяните), чтобы прочитать эти сообщения, и его ответственность состоит в том, чтобы отправить каждое сообщение на все ваши серверы (PL Легко заметить, что даже когда они могут быть одинаковыми экземплярами, другой процесс должен иметь роль подписчика).

После того, как подписчик отправит сообщение на все серверы, его можно будет подтвердить и удалить из PubSub. Поскольку у вас может быть несколько подписчиков, вам все равно придется иметь дело с дубликатами, чтобы ваши клиенты дважды не получали одно и то же сообщение

...