在 Java 中添加边缘后,我收到以下错误:
16:40:44.267 [gremlin-driver-loop-1] WARN org.apache.tinkerpop.gremlin.driver.MessageSerializer - 响应 [PooledUnsafeDirectByteBuf(ridx: 98, widx: 98, cap: 98)] 无法被组织反序列化.apache.tinkerpop.gremlin.driver.ser.AbstractGryoMessageSerializerV3d0。org.apache.tinkerpop.shaded.kryo.KryoException:遇到未注册的类 ID:65536 序列化跟踪:id (org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge) 在 org.apache.tinkerpop.gremlin.structure。 io.gryo.AbstractGryoClassResolver.readClass(AbstractGryoClassResolver.java:148)
Janusgraph 版本为 0.3.0,Tinkerpop 版本为 3.3.3,Janusgraph 序列化配置如下:
> 序列化程序:- { 类名:org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0,配置:{ ioRegistries:[org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }} - { 类名:org.apache.tinkerpop.gremlin .driver.ser.GryoMessageSerializerV3d0, 配置: { serializeResultToString: true }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, 配置: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] } } # 向后兼容的旧序列化版本: - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }} - { className: org .apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0,配置:{ioRegistries:[org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }} - { className: org.apache.tinkerpop.gremlin.driver.ser. GraphSONMessageSerializerGremlinV2d0, 配置: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, 配置: { ioRegistries: [org.org.db. tinkerpop.JanusGraphIoRegistryV1d0] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}{ serializeResultToString: true }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }} - { className: org.apache. tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerconfigiesV1d0, : [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}{ serializeResultToString: true }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }} - { className: org.apache. tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }} - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerconfigiesV1d0, : [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}GraphSONMessageSerializerGremlinV1d0,配置:{ioRegistries:[org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0]}} - { className:org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0,配置:{ioRegistries:[org.org.janus. tinkerpop.JanusGraphIoRegistryV1d0] }}GraphSONMessageSerializerGremlinV1d0,配置:{ioRegistries:[org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0]}} - { className:org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0,配置:{ioRegistries:[org.org.janus. tinkerpop.JanusGraphIoRegistryV1d0] }}
大约在同一时间,服务器上记录了以下错误并且似乎是相关的:
> 105869 2018-11-08 06:10:44,659 [gremlin-server-worker-1] 警告 io.netty.channel.DefaultChannelPipeline - 一个 exceptionCaught() 事件被触发,它到达管道的尾部。这通常意味着管道中的最后一个处理程序没有处理异常。java.io.IOException: 连接由 sun.nio.ch.FileDispatcherImpl.read0(Native Method) 处的对等方重置
据我所知,我的鸭子在匹配的序列化器版本方面排成一列,但显然一定错过了一些东西。非常感谢任何帮助!
代码可以在这里看到:https : //gist.github.com/ptclarke/45472fa5c268a6e8441e4c35615194aa
我认为您需要JanusGraphIoRegistry在客户端注册:
GryoMapper.Builder builder = GryoMapper.build().
addRegistry(JanusGraphIoRegistry.getInstance());
GryoMessageSerializerV3d0 serializer = new GryoMessageSerializerV3d0(builder);
Cluster cluster = Cluster.build().
addContactPoint(host).
port(port).
serializer(serializer).
create();
Run Code Online (Sandbox Code Playgroud)
作为对您的代码的一些额外建议。考虑避免大量这样的小更新:
public void updateVertex(Vertex v, Map<Object, Object> propertyMap) {
for(Entry<Object, Object> e : propertyMap.entrySet()) {
g.V(v).property(e.getKey(), e.getValue()).next();
}
}
Run Code Online (Sandbox Code Playgroud)
而是这样做:
public void updateVertex(Vertex v, Map<Object, Object> propertyMap) {
GraphTraversal<Vertex,Vertex> t = g.V(v);
for(Entry<Object, Object> e : propertyMap.entrySet()) {
t = t.property(e.getKey(), e.getValue());
}
t.iterate();
}
Run Code Online (Sandbox Code Playgroud)
您还可以简化“添加边缘”代码:
public Edge addEdge(String label, Vertex from, Vertex to) {
return g.V(from).addE(label).to(to).next();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
776 次 |
| 最近记录: |