Spring数据Neo4J不会为HAProxy集群创建节点的所有属性

时间:2015-01-11 02:38:19

标签: amazon-ec2 neo4j tomcat7 spring-data-neo4j haproxy

我们创建了一个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)

1 个答案:

答案 0 :(得分:0)

您必须提供有关代码,路由设置等的更多详细信息。

路由如何影响代码(请求)执行。

此外,如果您在写入后进行读取,则必须确保这些请求也会路由到您写入的服务器。

您可能还想尝试使用新的SpringCypherRestGraphDatabase尝试SDN 3.3.M1,它使用事务端点以事务方式通过线路创建数据。只是为了看它是否更好。