Open ganhb opened 6 years ago
你好 @ganhb : janusgraph运行时, 启的是WebSocket, 而不是Http. 你可参考一下http://docs.janusgraph.org/latest/server.html中的7.2. JanusGraph Server as a WebSocket Endpoint部分. 尝试一下, 如果不可以, 再告诉我, 我把我这的配置信息发出来.
谢谢回答,确实是我的疏忽造成的; 我还发现一个问题,我运行测试类
Connection connection = new Connection.ClientConnection(path_, false);
Execute execute = new Execute(connection);
Long count = execute.getLong("c.V().has('age',lt(30)).count()", null);
会有如下异常:
java.util.concurrent.ExecutionException: org.apache.tinkerpop.gremlin.driver.exception.ResponseException: No such property: c for class: Script7
at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
at com.xyshzh.gremlin.execute.Execute.getResults(Execute.java:47)
at com.xyshzh.gremlin.execute.Execute.getResult(Execute.java:61)
at com.xyshzh.gremlin.execute.Execute.getLong(Execute.java:90)
at com.xyshzh.gremlin.test.Test.getLong(Test.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
我把它改成g就问题了,应该是可以在哪里定义这个traversal()吧; 顺便在问一个,gremlin-driver.yaml能指定表名吗,还是必须在socket下面socket-janusgraph-hbase-server.properties配置
你好 @ganhb :
不好意思, 到现在才回复你.
Connection connection = new Connection.ClientConnection(path_, false);
Execute execute = new Execute(connection);
String query = "c.V().has('age',lt(30)).count()";
Long count = execute.getLong(query, null);
上面这段代码是和你的代码一样的, 只是把query提取出来了, 如果没问题, 继续下面走:
在你的回复中, 在query中, 由一"c"出发, 用这个c执行的话, 报No such property: c for class: Script7, 换成由一"g"出发, 可正常运行, 是这个意思吗?
下面按照我理解的这个意思, 说一下我的思路, 你参考一下:
解决方式(以下内容均在${JANUSGRAPH_HOME}/目录下):
查看文件: vim ./conf/gremlin-server/gremlin-server.yaml
host: 0.0.0.0
port: 8182
scriptEvaluationTimeout: 30000
channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
graphs: {
graph: conf/gremlin-server/janusgraph-cassandra-es-server.properties
}
plugins:
- janusgraph.imports
scriptEngines: {
gremlin-groovy: {
imports: [java.lang.Math],
staticImports: [java.lang.Math.PI],
scripts: [scripts/empty-sample.groovy]}}
......
此文件, 是引导janusgraph server 正常运行的一下文件, channelizer决定了运行方式是http, ws. graphs决定了自己的配置文件所在位置, 也决定了取名名称(名称比较随意, 记得就好). scriptEngines->gremlin-groovy->scripts, 这个配置比较重要, 决定了是用"g" or "c" or "...". 这个配置可参考下一步. 如果想配置不同的表, 可修改为如下内容, graph1, graph2指定不同的配置文件,文件中指定不同的表:
......
graphs: {
graph1: conf/gremlin-server/janusgraph-cassandra-es-server1.properties,
graph2: conf/gremlin-server/janusgraph-cassandra-es-server2.properties
}
......
查看文件: vim ./scripts/empty-sample.groovy
......
globals << [g : graph.traversal()]
此文件, 决定了是用"g" or "c" or "..."查询内容. 上面内容中的配置的是g则用g执行, 如果如下所示, 则用c:
......
globals << [c : graph.traversal()]
如果你指定了不同的表, 由第一步配置了两个graphs的子项. 此处可以修改为:
......
globals << [g : graph1.traversal()]
globals << [c : graph2.traversal()]
如此在driver端可以通过"g" or "c"区别查询的表.
如果通过同一组配置, 指定不同的表, 我暂时也没了解到. 如果你有所发现, 可共享一下, 谢谢.
以上内容, 希望对你有所帮助.
您好, 我这边出了点异常
这个明显是配置不对导致连不上,在gremlin-driver.yaml中,我只修改了hosts信息
并且在运行janusgraph中的bin/gremlin-server.sh ./conf/gremlin-server/http-gremlin-server.yaml 请问有其他的配置信息吗,十分感谢