Couchbase Lite 2.0 Replication - PullRequest
       7

Couchbase Lite 2.0 Replication

0 голосов
/ 25 апреля 2018

Я обновляю наши системы с couchbase lite 1.5 до 2.0 и столкнулся с проблемой репликации. Я создаю непрерывный репликатор «push and pull», который извлекает изменения при запуске приложения, но не продолжает синхронизацию в течение всего срока службы приложения.

Вот мой код создания репликатора:

public void StartSync(Uri syncEndpoint, string username, ISecureString password)
        {
            if (_database == null)
            {
                throw new DataHandlerException(DataHandlerError.DatabaseDoesntExist);
            }

            var endpoint = new URLEndpoint(syncEndpoint);
            var config = new ReplicatorConfiguration(_database, endpoint)
            {
                Authenticator = new BasicAuthenticator(username, password.ToString()),
                Continuous = true
            };

            _replicator = new Replicator(config);
            _replicator.AddChangeListener((s, a) =>
            {
                OnSyncChange(a.Status);
            });

            _replicator.Start();
        }

У меня также есть несколько живых запросов, настроенных с использованием нового синтаксиса:

var token = query.AddChangeListener(OnQueryUpdated); // start live query

Живой обратный вызов запроса никогда не вызывается, но я предполагаю, что это потому, что репликация не работает.

Кто-нибудь сталкивался с этой проблемой или есть примеры наилучшей практики с Couchbase Lite 2.0?

UPDATE:

Я обнаружил, что эта проблема была вызвана проблемой с веб-сокетами, которая сейчас используется протоколом Couchbase sync gateway. Мне пришлось проверить мои настройки nginx и перезапустить все мои службы, чтобы исправить эту проблему.

1 Ответ

0 голосов
/ 07 мая 2018

Проблема заключалась в том, что nginx необходимо было правильно настроить для работы с новым протоколом веб-сокетов, используемым шлюзом синхронизации в версии 2.0.0

Настройки можно найти в файле /etc/nginx/sites-available/default иОфициальные настройки в соответствии с документами шлюза синхронизации:

location / {
    proxy_pass              http://sync_gateway;
    proxy_pass_header       Accept;
    proxy_pass_header       Server;
    proxy_http_version      1.1;
    keepalive_requests      1000;
    keepalive_timeout       360s;
    proxy_read_timeout      360s;
    proxy_set_header        Upgrade $http_upgrade;
    proxy_set_header        Connection "upgrade";
}

Однако я обнаружил, что это работает, когда приложение, запускающее couchbase lite, сначала открывает соединение, но непрерывная репликация все еще может быть проблемой.Возможный обходной путь - направить клиента непосредственно на синхронизирующий шлюз и вообще не использовать nginx.Это требует дополнительного расследования.

...