【问题标题】:how to get this finagle example to work?如何让这个 finagle 示例工作?
【发布时间】:2016-02-03 12:23:24
【问题描述】:

我一直在看一些 finagle 教程。我为一个简单的服务器找到了这段代码,但我无法让它工作。是否应该使用类型指定服务以便可以找到服务的类型?

代码:

import com.twitter.finagle.{Http, Service}
import org.jboss.netty.handler.codec.http.{HttpRequest, HttpResponse, DefaultHttpResponse}
import org.jboss.netty.handler.codec.http.HttpVersion._
import org.jboss.netty.handler.codec.http.HttpResponseStatus._
import com.twitter.util.{Future, Await}
object Server{
  def main(args: Array[String]) {
    val service = new Service[HttpRequest, HttpResponse] {
    def apply(req: HttpRequest) =
        Future.value(new DefaultHttpResponse(HTTP_1_1, OK))
    }
    val server = Http.serve(":8080", service)
    Await.ready(server)
 }
}  

错误:

Error message:
Error:(25, 23) overloaded method value serve with alternatives:
  (addr: java.net.SocketAddress,service: com.twitter.finagle.ServiceFactory[com.twitter.finagle.http.Request,com.twitter.finagle.http.Response])com.twitter.finagle.ListeningServer <and>
  (addr: String,service: com.twitter.finagle.Service[com.twitter.finagle.http.Request,com.twitter.finagle.http.Response])com.twitter.finagle.ListeningServer <and>
  (addr: String,service: com.twitter.finagle.ServiceFactory[com.twitter.finagle.http.Request,com.twitter.finagle.http.Response])com.twitter.finagle.ListeningServer <and>
  (addr: java.net.SocketAddress,service: com.twitter.finagle.Service[com.twitter.finagle.http.Request,com.twitter.finagle.http.Response])com.twitter.finagle.ListeningServer
 cannot be applied to (String, com.twitter.finagle.Service[org.jboss.netty.handler.codec.http.HttpRequest,org.jboss.netty.handler.codec.http.HttpResponse]{def apply(req: org.jboss.netty.handler.codec.http.HttpRequest): com.twitter.util.Future[org.jboss.netty.handler.codec.http.DefaultHttpResponse]})
    val server = Http.serve(":8080", service)
                      ^

链接:https://twitter.github.io/finagle/docs/#com.twitter.finagle.package

我的评论中提到的 scala 学校代码链接:https://twitter.github.io/scala_school/finagle.html#server

这是我的 build.sbt:

name := "finagle"

version := "1.0"

scalaVersion := "2.11.7"

libraryDependencies ++=  Seq(
  "com.twitter" %% "finagle-http" % "6.31.0",
)

【问题讨论】:

  • 我在使用 finagle 上的几个可用代码时遇到了问题,例如 scala school 上的服务器代码,这给了我一个错误,基于使用替代方法构建的重载方法值。
  • 您使用netty 包有什么特别的原因吗?能否提供教程链接?
  • @TNW。不,只是复制他们展示的内容。顺便说一句,我正在使用 sbt 来包含 libraryDependencies。
  • 这正是示例的代码(我在页面上找不到)?因为您的 serviceHttp.serve 调用所期望的类型不同(netty 而不是 finagle)。我怀疑 import 语句导致诸如 Service 之类的东西解析为不同的东西
  • @保罗。我在线程中显示的代码应从顶部链接复制和粘贴。单击链接,我立即看到代码被剪断(“因此,一个简单的 HTTP 服务器是这样构建的:..)。我做的唯一不同的事情是将它包装成一个单例(带有 main 的对象)。

标签: scala finagle


【解决方案1】:

问题是在 finagle 6.30.x 中,Httpx 包被重命名回 Http 并且原来的 Http(包含 netty http 类型)被删除了。您应该使用 c.t.f.h.Request c.t.f.h.Response 类型构建服务

【讨论】:

  • 谢谢 - 我会试试的。
  • 我已经更新了 finaglers 邮件列表中的答案。你需要做更多的工作才能让它发挥作用。
猜你喜欢
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
相关资源
最近更新 更多