如何在 couchbase 同步网关中设置同步 URL 以连接到 couchbase 服务器

How to setup sync URL in couchbase sync gateway to connect to couchbase server

我正在尝试将 CouchBase Lite 用于我的移动应用程序。我在 couchbase 教程中看到过,但它显示了如何为 walrus 服务器而不是 couchbase 服务器添加同步 URL。如何为 couchbase 服务器设置同步 URL。

以下是我正在使用但无法从 couchbase 服务器放置或获取数据的代码

private URL createSyncURL(boolean isEncrypted){ URL syncURL = null; String host = "https://127.0.0.1"; String port = "4986"; bucketName = "sync_gateway"; try { syncURL = new URL(host + ":" + port + "/" + bucketName); } catch (MalformedURLException me) { me.printStackTrace(); } return syncURL; }

config.json 同步网关文件如下

{
    "log":["CRUD+", "REST+", "Changes+", "Attach+"],
    "interface":":4986",
   "adminInterface":":14985",
    "databases": {
    "sync_gateway": {
        "server":"http://localhost:8091",
        "bucket":"sync_gateway",
        "sync":`
            function (doc) {
            channel (doc.channels);
        }`,
        "users": {
            "GUEST": {
                "disabled": false,
                "admin_channels": ["*"]
            }
        }
    }
    }
}

下面是 android 应用程序代码

package com.couchbase.examples.couchbaseevents;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.util.Log;

import com.couchbase.lite.CouchbaseLiteException;
import com.couchbase.lite.Database;
import com.couchbase.lite.Document;
import com.couchbase.lite.Manager;
import com.couchbase.lite.android.AndroidContext;
import com.couchbase.lite.replicator.Replication;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    public static final String DB_NAME = "couchbaseevents";
    final String TAG = "CouchbaseEvents";
    Database database = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(TAG, "Begin Couchbase Events App");
    Manager manager = null;
    try {
        manager = new Manager(new AndroidContext(this), Manager.DEFAULT_OPTIONS);
        database = manager.getDatabase(DB_NAME);
    } catch (Exception e) {
        Log.d(TAG, "Error getting database", e);
        return;
    }
    Document createdDocument = createDocument(database);
    Log.d(TAG, "createdDocument=" + String.valueOf(createdDocument.getProperties()));
    // retrieve the document from the database
    Document retrievedDocument = database.getDocument(createdDocument.getId());
// display the retrieved document
    Log.d(TAG, "retrievedDocument=" + String.valueOf(retrievedDocument.getProperties()));
    updateDoc(database, createdDocument.getId());
    Document updatedDocument = database.getDocument(createdDocument.getId());
    Log.d(TAG, "updatedDocument=" + String.valueOf(updatedDocument.getProperties()));
    try {
        startReplications();
    } catch (CouchbaseLiteException e) {
        e.printStackTrace();
    }
    Log.d(TAG, "End Couchbase Events App");
    }
    private void updateDoc(Database database, String documentId) {
    Document document = database.getDocument(documentId);
    try {
        // Update the document with more data
        Map<String, Object> updatedProperties = new HashMap<String, Object>();
        updatedProperties.putAll(document.getProperties());
        updatedProperties.put("eventDescription", "Everyone is invited!");
        updatedProperties.put("address", "123 Elm St.");
        // Save to the Couchbase local Couchbase Lite DB
        document.putProperties(updatedProperties);
    } catch (CouchbaseLiteException e) {
        Log.e(TAG, "Error putting", e);
    }
    }
    private Document createDocument(Database database) {
    // Create a new document and add data
    Document document = database.createDocument();
    String documentId = document.getId();
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("name", "Big Party");
    map.put("location", "My House");
    try {
        // Save the properties to the document
        document.putProperties(map);
    } catch (CouchbaseLiteException e) {
        Log.e(TAG, "Error putting", e);
    }
    Document document1 = database.createDocument();
    documentId = document1.getId();
    Map<String, Object> map1 = new HashMap<String, Object>();
    map1.put("name", "Yagyank");
    map1.put("location", "GGn");
    try {
        // Save the properties to the document
        document1.putProperties(map1);
    } catch (CouchbaseLiteException e) {
        Log.e(TAG, "Error putting", e);
    }
    Document document2 = database.createDocument();
    documentId = document2.getId();
    Map<String, Object> map2 = new HashMap<String, Object>();
    map2.put("name", "Farheen");
    map2.put("location", "GGn");
    try {
        // Save the properties to the document
        document2.putProperties(map2);
    } catch (CouchbaseLiteException e) {
        Log.e(TAG, "Error putting", e);
    }
    return document2;
    }
    private URL createSyncURL(boolean isEncrypted){
    URL syncURL = null;
    String host = "127.0.0.1";
    String port = "4986";
    String dbName = "sync_gateway";
    try {
        syncURL = new URL("http://127.0.0.1:4986/sync_gateway");
        //syncURL = new URL(host + ":" + port + "/" + dbName);
    } catch (Exception me) {
        me.printStackTrace();
    }
    Log.d(syncURL.toString(),"URL");
    return syncURL;
    }
    private void startReplications() throws CouchbaseLiteException {
    Replication pull = database.createPullReplication(this.createSyncURL(false));
    Replication push = database.createPushReplication(this.createSyncURL(false));
    pull.setContinuous(true);
    push.setContinuous(true);
    pull.start();
    push.start();
    if(!pull.isRunning()){
        Log.d(TAG, "MyBad");
    }
    /*if(!push.isRunning()) {
        Log.d(TAG, "Replication is not running due to " +push.getLastError().getMessage());
        Log.d(TAG, "Replication is not running due to " +push.getLastError().getCause());
        Log.d(TAG, "Replication is not running due to " +push.getLastError().getStackTrace());
        Log.d(TAG, "Replication is not running due to " +push.getLastError().toString());
    }*/
    }

}

您无法直接同步到 Couchbase 服务器。您必须与同步网关同步。 Sync Gateway 可以有两个后端:Walrus(内存后端)和 Couchbase Server。

从您的移动应用程序的角度来看,后端并不重要。你需要给同步网关URL。假设 Sync Gateway 在您的本地计算机上是 运行,并且您正在使用 android 模拟器来测试您的应用程序,URL 应该是 http://10.0.2.2:5984/sync_gateway