【发布时间】:2018-03-11 07:53:24
【问题描述】:
我正在尝试使用 Python 应用程序连接到 Janusgraph 0.2.0。我按照所有设置说明进行操作,并且能够在图表中创建元素并成功遍历它们。
import asyncio
from goblin import Goblin
from quart import jsonify, Quart, serving
from app.models import Person, Knows
loop = asyncio.get_event_loop()
goblin_app = loop.run_until_complete(Goblin.open(loop,
hosts = ['localhost'],
port = '8182',
scheme = 'ws'))
goblin_app.register(Person, Knows)
print("Initialized all the goblin stuff")
quart_app = Quart(name)
async def create(app, data):
session = await app.session()
session.add(data)
await session.flush()
return data
leif = Person()
leif.name = 'Leif'
leif.age = 28
leif = loop.run_until_complete(create(goblin_app, leif))
jon = Person()
jon.name = 'Jon'
jon.age = 32
jon = loop.run_until_complete(create(goblin_app, jon))
works_with = Knows(leif, jon)
works_with = loop.run_until_complete(goblin_app, works_with)
但是,当我尝试从我的应用程序连接并发送 session.flush() 来创建一个元素时,应用程序冻结并且没有其他任何事情发生。 在 gremlin-server.log 我看到以下错误:
1109015 [gremlin-server-worker-1] 警告 org.apache.tinkerpop.gremlin.server.handler.WsGremlinBinaryRequestDecoder - Gremlin 服务器没有为请求的 mime 类型配置序列化程序 [application/vnd.gremlin-v3.0+json] - 使用 org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0 默认情况下 1109035 [gremlin-server-worker-1] WARN org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV1d0 - 请求 [PooledUnsafeDirectByteBuf(ridx: 558, widx: 558, cap: 592)] 无法反序列化 org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV1d0。 1109039 [gremlin-server-worker-1] 警告 org.apache.tinkerpop.gremlin.server.handler.OpSelectorHandler - 请求的 OpProcessor 无效 [null] org.apache.tinkerpop.gremlin.server.op.OpProcessorException:无效 OpProcessor 请求 [null] 在 org.apache.tinkerpop.gremlin.server.handler.OpSelectorHandler.decode(OpSelectorHandler.java:95) 在 org.apache.tinkerpop.gremlin.server.handler.OpSelectorHandler.decode(OpSelectorHandler.java:50) 在 io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler$1.channelRead(WebSocketServerProtocolHandler.java:159) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:312) 在 io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:286) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1302) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) 在 io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) 在 io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:646) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:581) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:498) 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460) 在 io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131) 在 java.lang.Thread.run(Thread.java:745) ~
我在 gremlin-server.yaml 文件中找到了一些关于替换 GraphSON 版本以添加 gremlin-v3.0+json 缺少的序列化程序的信息,我这样做了,但是当我添加时我得到了一个错误关于无法找到配置的序列化程序类: 10348 [main] WARN org.apache.tinkerpop.gremlin.server.AbstractChannelizer - 找不到配置的序列化程序类 - org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0 - 它将不可用 1
所以我的问题是:
- 有没有一种方法可以将我的应用程序发送到 Gremlin 服务器的序列化程序版本更改为兼容版本之一
- 如果我下载 GraphSON 3.0 版并将其放在服务器中,它会起作用吗?这意味着我必须升级与 Janusgraph 打包的 Gremlin Server 的版本,这似乎太多了......
有没有人遇到过类似的问题并有什么建议?
【问题讨论】:
-
你的 Python 代码是否拉入
gremlinpython?如果是这样,请检查并确保它与 JanusGraph 0.2.0 使用的 Apache TinkerPop 版本 3.2.6 一致。 -
谢谢 Jason Plurad,这解决了这个问题。我安装了更新版本的 gremlinpython,一旦我降级到 3.2.6,错误就消失了。
标签: gremlin tinkerpop3 janusgraph gremlin-server goblin