Neo4j 1.9.2、SDN 2.3.0.M1、SpringFramework 3.2.3.RELEASE。
非同期処理を使用してメッセージを交換する 2 つのマイクロサービスで構成されるアプリケーションに対してストレス テストを実行しています。ソース サービスは Neo4J です。
一般的な流れ store~>message->process~>message~>retrieve
保存中は、startnode、endnode、およびプロパティ ベースの関係を 1 つのトランザクション内で保持します。すべて良い。メッセージの受け渡しは非同期です。
上記のフローを、スレッド化されていない JUnit テストで発生した最大 1000 のリクエストでテストしています。
取得ステップ中に、1 回か 2 回、またはまったくない場合もありますが、次のスタック トレースが表示されます。
Caused by: org.neo4j.graphdb.NotFoundException: '__type__' property not found for RelationshipImpl #3027 of type 9 between Node[1009] and Node[1516].
at org.neo4j.kernel.impl.core.Primitive.newPropertyNotFoundException(Primitive.java:193)
at org.neo4j.kernel.impl.core.Primitive.getProperty(Primitive.java:188)
at org.neo4j.kernel.impl.core.RelationshipImpl.getProperty(RelationshipImpl.java:29)
at org.neo4j.kernel.impl.core.RelationshipProxy.getProperty(RelationshipProxy.java:114)
at org.springframework.data.neo4j.support.typerepresentation.AbstractIndexingTypeRepresentationStrategy.readAliasFrom(AbstractIndexingTypeRepresentationStrategy.java:107)
at org.springframework.data.neo4j.support.mapping.TRSTypeAliasAccessor.readAliasFrom(TRSTypeAliasAccessor.java:36)
at org.springframework.data.neo4j.support.mapping.TRSTypeAliasAccessor.readAliasFrom(TRSTypeAliasAccessor.java:26)
at org.springframework.data.convert.DefaultTypeMapper.readType(DefaultTypeMapper.java:101)
at org.springframework.data.convert.DefaultTypeMapper.getDefaultedTypeToBeUsed(DefaultTypeMapper.java:164)
at org.springframework.data.convert.DefaultTypeMapper.readType(DefaultTypeMapper.java:141)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityConverterImpl.read(Neo4jEntityConverterImpl.java:76)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister$CachedConverter.read(Neo4jEntityPersister.java:170)
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.createEntityFromState(Neo4jEntityPersister.java:192)
at org.springframework.data.neo4j.support.Neo4jTemplate.findOne(Neo4jTemplate.java:155)
at com.auditbucket.engine.repo.neo4j.dao.AuditDaoNeo.getChange(AuditDaoNeo.java:239)
at com.auditbucket.engine.service.AuditService.handleSearchResult(AuditService.java:411)
at sun.reflect.GeneratedMethodAccessor78.invoke(Unknown Source)
SDN/Neo4J ライブラリと関係があると確信しています。リレーションシップが作成され、ID がメッセージ Q で送信されるため、リレーションシップが存在しないことはありません。トランザクションがコミットされていないことを確認するのは困難です。とにかく完全を期すためにコードブロックが含まれています
....
AuditChange change = auditDAO.save(fUser, input, txRef);
AuditLog log = auditDAO.addLog(header, change, fortressWhen);
input.setStatus(AuditLogInputBean.LogStatus.OK);
if (searchActive) {
// Used to reconcile that the change was actually indexed
sd.setLogId(log.getId());
searchGateway.makeChangeSearchable(sd);
}
return input;