什么是当前版本的scrooge-sbt-plugin的存储库?或者设置说明是否过时?
根据文档,我将其添加到Play Framework项目中:
在project/plugins.sbt中
addSbtPlugin("com.twitter" %% "scrooge-sbt-plugin" % "3.3.2")
Run Code Online (Sandbox Code Playgroud)
在build.sbt中:
com.twitter.scrooge.ScroogeSBT.newSettings
libraryDependencies ++= Seq(
"org.apache.thrift" % "libthrift" % "0.8.0",
"com.twitter" %% "scrooge-core" % "3.3.2",
"com.twitter" %% "finagle-thrift" % "6.5.0"
)
Run Code Online (Sandbox Code Playgroud)
经过play clean-all和play-compile我得到的输出:
[warn] module not found: com.twitter#scrooge-sbt-plugin;3.3.2
[warn] ==== typesafe-ivy-releases: tried
[warn] http://repo.typesafe.com/typesafe/ivy-releases/com.twitter/scrooge-sbt-plugin/scala_2.10/sbt_0.13/3.3.2/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn] http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.twitter/scrooge-sbt-plugin/scala_2.10/sbt_0.13/3.3.2/ivys/ivy.xml
[warn] ==== local: tried
[warn] /opt/play-2.2.0/repository/local/com.twitter/scrooge-sbt-plugin/scala_2.10/sbt_0.13/3.3.2/ivys/ivy.xml
[warn] ==== Maven2 Local: tried
[warn] file:/home/fernando/.m2/repository/com/twitter/scrooge-sbt-plugin_2.10_0.13/3.3.2/scrooge-sbt-plugin-3.3.2.pom
[warn] ==== sonatype-oss-snapshots: tried
[warn] http://oss.sonatype.org/content/repositories/snapshots/com/twitter/scrooge-sbt-plugin_2.10_0.13/3.3.2/scrooge-sbt-plugin-3.3.2.pom
[warn] ==== public: tried
[warn] http://repo1.maven.org/maven2/com/twitter/scrooge-sbt-plugin_2.10_0.13/3.3.2/scrooge-sbt-plugin-3.3.2.pom …Run Code Online (Sandbox Code Playgroud) 我想用Scrooge编写一个Thrift服务.
Thrift几乎没有文档,Scrooge甚至更少.
如何在Ubuntu或OSX机器上安装Scrooge?
安装完成后,我创建了一个.thrift,如何使用Scrooge生成服务器代码和客户端代码?
我的 plugins.sbt 是
addSbtPlugin("com.twitter" % "scrooge-sbt-plugin" % "4.8.0")
Run Code Online (Sandbox Code Playgroud)
我的 build.sbt 是
val finagleVersion = "6.45.0"
lazy val myProject = Project("FinagleTest", file("."))
.settings(
name := "FinagleTest",
version := "1.0",
scalaVersion := "2.12.2",
libraryDependencies ++= Seq(
"org.apache.thrift" % "libthrift" % "0.9.2",
"com.twitter" %% "scrooge-core" % "4.18.0" exclude("com.twitter", "libthrift"),
"com.twitter" %% "finagle-thrift" % finagleVersion exclude("com.twitter", "libthrift"),
"com.twitter" %% "finagle-http" % finagleVersion,
"com.twitter" %% "finagle-core" % finagleVersion
),
scroogeThriftSourceFolder in Compile := {
val base = baseDirectory.value
base / "src/main/thrift"
}
)
Run Code Online (Sandbox Code Playgroud)
在src/main/thrift …
我想在Scala中编写一个thrift服务实现(使用Scrooge)但不使用Finagle,因为我无法为Finagle服务器编写ruby/python客户端.问题是,使用scrooge服务似乎没有实现"处理器"类.
假设我有这样的节俭定义:
service TestService {
void testFunction(1: string message);
}
Run Code Online (Sandbox Code Playgroud)
我使用scrooge生成scala文件,当我尝试使用thrift的标准实现来scala运行服务器:
val st = new TServerSocket(9999)
val processor = new TestService.Processor(new TestServiceImpl)
val arg = new TThreadPoolServer.Args(st)
arg.processor(processor)
val server = new TThreadPoolServer(arg)
server.serve()
Run Code Online (Sandbox Code Playgroud)
生成的TestService对象似乎没有Processor内部类.不知道如何在没有Finagle的情况下做到这一点?或者作为另一种解决方案,如何将一个python或ruby客户端写入finagle thrift服务器?
我正在使用scrooge + thrift来生成我的服务器和客户端代码.到目前为止一切正常.
这是我如何使用客户端的简化示例:
private lazy val client =
Thrift.newIface[MyPingService[Future]](s"$host:$port")
def main(args: Array[String]): Unit = {
logger.info("ping!")
client.ping().foreach { _ =>
logger.info("pong!")
// TODO: close client
sys.exit(0)
}
}
Run Code Online (Sandbox Code Playgroud)
一切都工作正常,但服务器抱怨程序退出未关闭的连接.我看了一遍,但我似乎无法弄清楚如何关闭client实例.
所以我的问题是,你如何关闭Finagle的节俭客户?我觉得我错过了一些明显的东西.