我们创建了一个Neo4J集群,它使用HAProxy作为负载均衡器,使用http://neo4j.com/docs/stable/ha-haproxy.html提供的文档。 我们在应用服务器中使用Spring Data Neo4J图形存储库在Neo4J集群上创建节点。
我们将读取和写入Neo4J服务器分开并尝试在Neo4J写入服务器上创建节点但是当应用程序服务器向Neo4J写入服务器发送请求时,它只创建只有一个属性的节点并抛出异常。我们是向Neo4j主站发送写请求,并从所有实例读取。
使用的基础设施 - E2服务器上的Neo4j实例。 用于在Neo4j服务器之上进行负载平衡的HA代理。
Neo4j没有公共IP,因此只能通过app服务器访问。
java.lang.IllegalStateException: error adding labels, received org.neo4j.rest.graphdb.RequestResult@31ccc77f
at org.neo4j.rest.graphdb.ExecutingRestAPI.addLabels(ExecutingRestAPI.java:303)
at org.neo4j.rest.graphdb.RestAPIFacade.addLabels(RestAPIFacade.java:319)
at org.springframework.data.neo4j.rest.SpringRestGraphDatabase.createNode(SpringRestGraphDatabase.java:71)
at org.springframework.data.neo4j.support.mapping.EntityStateHandler.createNode(EntityStateHandler.java:151)
at org.springframework.data.neo4j.support.mapping.EntityStateHandler.useOrCreateState(EntityStateHandler.java:142)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityConverterImpl.write(Neo4jEntityConverterImpl.java:163)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister$CachedConverter.write(Neo4jEntityPersister.java:179)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.persist(Neo4jEntityPersister.java:243)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.persist(Neo4jEntityPersister.java:231)
at org.springframework.data.neo4j.support.Neo4jTemplate.save(Neo4jTemplate.java:357)
at org.springframework.data.neo4j.support.Neo4jTemplate.save(Neo4jTemplate.java:351)
at org.springframework.data.neo4j.repository.AbstractGraphRepository.save(AbstractGraphRepository.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:442)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:427)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:381)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
答案 0 :(得分:0)
您必须提供有关代码,路由设置等的更多详细信息。
路由如何影响代码(请求)执行。
此外,如果您在写入后进行读取,则必须确保这些请求也会路由到您写入的服务器。
您可能还想尝试使用新的SpringCypherRestGraphDatabase尝试SDN 3.3.M1,它使用事务端点以事务方式通过线路创建数据。只是为了看它是否更好。