簡體   English   中英

如何使用不同的數據庫動態地重新加載Spring Data Neo4j圖形數據庫服務

[英]How to Dynamically reload Spring Data Neo4j graph database service with different databases

我已經將項目配置為使用一個圖形數據庫,並且該數據庫處於嵌入式模式。 這是我的配置類。

@Configuration
@EnableNeo4jRepositories(basePackages = "com.comp")
@EnableTransactionManagement
static class ApplicationConfig {

    @Value("${application.neo4j.db.path}")
    private String dbPath;

    public ApplicationConfig() {
    }

    @Configuration
    static class Neo4jMoreConfig extends Neo4jConfiguration {
        Neo4jMoreConfig() {
            setBasePackage("com.comp");
        }

    }

    @Bean
    public GraphDatabaseService graphDatabaseService() {
        return new GraphDatabaseFactory().newEmbeddedDatabase(new File(dbPath));
    }

}

當應用程序部署時,將根據我在application.yml中配置的名稱創建數據庫。 但是我需要為不同的場景創建多個數據庫。 為此,我需要重新加載/刷新我的graphDatabaseService以包括新的數據庫路徑。 我怎樣才能做到這一點 ?

在HA環境中配置Spring Data Neo4j 4.1

高可用性模式下的事務綁定

典型的Neo4j HA群集將由一個主節點和幾個從節點組成,以提供故障轉移功能並可選地用於處理讀取。 (盡管可以寫從屬設備,但這並不常見,因為需要付出額外的努力才能使從屬設備與主節點同步) 在此處輸入圖片說明

典型的HA群集

在高可用性模式下運行時, Neo4j does not make open transactions available across all nodes in the cluster 這意味着我們必須將特定事務中的每個請求綁定到群集中的同一節點,否則提交將失敗並顯示404 Not Found。

只讀交易

從版本4開始,Spring Data Neo4j不會區分WRITE事務和READ-ONLY事務。 因此,我們不能將只讀事務綁定到從屬設備,而不能將事務寫入到主服務器。 將來的版本將解決此缺陷,但是與此同時,確保一切正常工作的唯一方法是將每筆交易引導到主交易。 有兩種方法可以實現此目的。

靜態綁定到指定的母版

集群示例:

  1. 主人:192.168.0.55
  2. slave1:192.168.0.56
  3. slave2:192.168.0.67

SDN4綁定到主IP地址

Components.driver().setURI("http://192.168.0.55:7474");

除了測試目的和非關鍵部署之外,我們實際上不建議使用此方法。 首先,只有在始終先啟動指定的主服務器后,它才能工作;其次,如果主服務器關閉,所有后續事務將失敗,直到重新啟動為止。 在HA模式下,發生這種情況時,集群可以選擇一個新的主服務器,但是從Spring Data Neo4j版本4開始,沒有用於查詢集群以標識當前主服務器的機制。 在這種情況下,解決方案是使用可以為我們完成此任務的負載平衡器(例如HAProxy)。 下一節將對此進行描述。

通過負載均衡器進行動態綁定

在Neo4j HA體系結構中,群集通常位於負載平衡器的前面。 以下示例顯示了如何配置應用程序並將HAProxy設置為負載平衡器,以將所有請求路由到群集中當前標識為主服務器的任何計算機。 由於只有一台計算機可以成為當選的主機,因此這應該可以完全按照我們的意願工作。 此外,如果當選的主服務器發生故障,將從集群中選出一個新服務器作為主服務器,並且HAProxy將自動將事務路由到該服務器。

HAProxy面向的示例集群

  1. happroxy:10.0.2.200
  2. neo4j-server1:10.0.1.10
  3. neo4j-server2:10.0.1.11
  4. neo4j-server3:10.0.1.12

通過HAProxy進行Spring Data Neo4j 4綁定

Components.driver().setURI("http://10.0.2.200");

示例haproxy.cfg

global
    daemon
    maxconn 256

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    bind *:80
    default_backend neo4j

backend neo4j
    option httpchk GET /db/manage/server/ha/master
    server s1 10.0.1.10:7474 maxconn 32
    server s2 10.0.1.11:7474 maxconn 32
    server s3 10.0.1.12:7474 maxconn 32

listen admin
    bind *:8080
    stats enable

資源鏈接:

  1. 良好的關系:Spring Data Neo4j指導書

有關使用Java的完整教程,請點擊此處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM