Couchbase Lite 2.0 复制
Couchbase Lite 2.0 Replication
我正在将我们的系统从 couchbase lite 1.5 升级到 2.0,并且遇到了复制问题。我正在创建一个连续的推拉复制器,它会在应用程序启动时拉取更改,但不会在应用程序的整个生命周期内继续同步。
这是我的复制器创建代码:
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 的最佳实践示例?
更新:
我发现此问题是由网络套接字问题引起的,该协议是 Couchbase 同步网关现在使用的协议。我不得不检查我的 nginx 设置并重新启动我的所有服务来纠正这个问题。
问题是 nginx 需要正确配置才能使用 2.0.0 版同步网关使用的新 websockets 协议
设置可以在/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。这需要更多调查。
我正在将我们的系统从 couchbase lite 1.5 升级到 2.0,并且遇到了复制问题。我正在创建一个连续的推拉复制器,它会在应用程序启动时拉取更改,但不会在应用程序的整个生命周期内继续同步。
这是我的复制器创建代码:
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 的最佳实践示例?
更新:
我发现此问题是由网络套接字问题引起的,该协议是 Couchbase 同步网关现在使用的协议。我不得不检查我的 nginx 设置并重新启动我的所有服务来纠正这个问题。
问题是 nginx 需要正确配置才能使用 2.0.0 版同步网关使用的新 websockets 协议
设置可以在/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。这需要更多调查。