如何从Embedded RavenDB启用复制

时间:2013-11-11 21:04:27

标签: ravendb

我有简单的嵌入式ravenDB的asp.net mvc应用程序。

我的global.asax.cs:

        DocumentStore = new EmbeddableDocumentStore
        {
            DataDirectory = "App_Data",
        }.Initialize();

        using (var session = DocumentStore.OpenSession())
        {
            session.Store(new ReplicationDocument
            {
                Destinations =
                {
                    new ReplicationDestination
                    {
                        Url = "http://localhost:8080",
                        Database = "TestDB"
                    }
                }
            });

            session.SaveChanges();
        }

我已经在8080端口上运行了RavenDB服务,数据库是TestDB。已启用复制。

除复制外,应用程序工作正常。我的网站上的TestDB(http://localhost:8080)上没有文档。

如何检查复制状态? 或者是否有任何文档如何设置复制?

我认为

http://ravendb.net/docs/server/scaling-out/replication/from-embedded-server已经过时了。

提前致谢。

1 个答案:

答案 0 :(得分:0)

以下是我在嵌入式RavenDB 2.5中启用它的大致内容:

var dataStore = new EmbeddableDocumentStore
{
    DataDirectory = "mydatadir",
    UseEmbeddedHttpServer = true,
};

dataStore.Configuration.Port = 4222;

dataStore.Configuration.Settings.Add("Raven/ActiveBundles", "Replication");

dataStore.initialize()

using (var session = dataStore.OpenSession())
{
    var apiKey = new ApiKeyDefinition
    {
        Id = "Raven/ApiKeys/Replication",
        Name = "Replication",
        Secret = "MySecretAPIKey",
        Enabled = true,
        Databases = new List<DatabaseAccess>
        {
            new DatabaseAccess
            {
                TenantId = "<system>",
                Admin = true,
                ReadOnly = false
            }
        }
    };

    session.Store(apiKey);

    var nodes = new string[] { };
    var nodeSetting = "http://server1.example.com:4222, http://server2.example.com:4222";
    if (!string.IsNullOrEmpty(nodeSetting))
    {
       nodes = nodeSetting.Split(',').Select(n => n.Trim()).ToArray();
    }

    var machineName = System.Web.HttpContext.Current.Server.MachineName;
    var replication = new ReplicationDocument();

    foreach (var node in nodes)
    {
        if (node.IndexOf("://" + machineName.ToLower() + ".", StringComparison.Ordinal) < 0)
        {
            replication.Destinations.Add(new ReplicationDestination
            {
                Url = node,
                ApiKey = apiKey.FullApiKey
            });
        }
    }

    session.Store(replication);
    session.SaveChanges();
}
相关问题