代码之家  ›  专栏  ›  技术社区  ›  Dr. Strangelove

Neo4J:在30000毫秒内重试6次后失败。请确保您的数据库处于联机状态,然后重试

  •  0
  • Dr. Strangelove  · 技术社区  · 3 年前

    我正在尝试使用Neo4j的.NET驱动程序从C#代码连接到Neo4j数据库。我的C#桌面应用程序和Neo4j在通过docker compose编排的独立docker容器上运行。提交查询时,驱动程序会抛出一个异常,并显示以下消息。

    引发异常:System.Private.CoreLib.dll中的“Neo4j.Driver.ServiceUnavailable Exception” 引发异常:System.Private.CoreLib.dll中的“System.AggregateException” 出现一个或多个错误。(在30000毫秒内重试6次后失败。请确保数据库处于联机状态,然后重试。)

    docker-compose.yml :

    version: '3.8'
    
    services:
      myConsoleApp:
        image: ${DOCKER_REGISTRY-}myConsoleApp
        build:
          context: .
          dockerfile: MyConsoleApp/Dockerfile
    
      neo4j:
        image: neo4j:latest
        network_mode: "bridge"
        ports:
          - "7474:7474" # HTTP
          - "7687:7687" # Bolt
        environment:
          - NEO4J_dbms_security_procedures_unrestricted=apoc.*
          - NEO4J_apoc_import_file_enabled=true
          - NEO4J_dbms_shell_enabled=true
          - NEO4J_dbms_memory_pagecache_size=1G
          - NEO4J_dbms.memory.heap.initial_size=1G
          - NEO4J_dbms_memory_heap_max__size=1G
          - NEO4J_AUTH=neo4j/password
        volumes:
          - ./plugins:/plugins
          - ./data:/data
          - ./import:/import
    

    我在C#控制台应用程序中访问它的方式:

    var driver = GraphDatabase.Driver(
        "bolt://localhost:7687", 
        AuthTokens.Basic("neo4j", "password"));
    
    using (var session = driver.AsyncSession())
    {
        var x = session.WriteTransactionAsync(async tx =>
        {
            var result = await tx.RunAsync(
                "CREATE (a:Person:Employee)");
        });
    
        await x;
    }
    

    等待时引发异常 x

    我可以通过上面的设置确认,Neo4j容器已经启动并正确地侦听HTTP端口,至少因为我可以通过 http://localhost:7474/browser/ 。所以,我怀疑我错过了司机的东西。

    0 回复  |  直到 3 年前
        1
  •  2
  •   just_another_dotnet_dev    3 年前

    您的控制台应用程序似乎正在使用`bolt://localhost:7687',但这是在容器中运行的,所以localhost将引用容器的localhost。 我想您应该使用neo4j服务名称,而不是localhost。 bolt://neo4j:7687

    推荐文章