我想用Alpakka处理S3上传和Akka Steams下载。但是,我在Akka Http路由中使用S3Client生成的源代码时遇到了问题。我得到的错误消息是:
[error] found : akka.stream.scaladsl.Source[akka.util.ByteString,_$1] where type _$1
[error] required: akka.http.scaladsl.marshalling.ToResponseMarshallable
[error] complete(source)
我认为这是一些烦人的琐事,比如缺少隐式导入,但我无法确定我缺少了什么。
我创建了一些最小的例子来说明这个问题:
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.Source
import akka.util.ByteString
import scala.concurrent.ExecutionContext
class Test {
implicit val actorSystem: ActorSystem = ActorSystem()
implicit val materializer: ActorMaterializer = ActorMaterializer()
implicit val executionContext: ExecutionContext = actorSystem.dispatcher
val route = (path("test") & get) {
def source: Source[ByteString, _] = ??? // just assume that I am able to get that value
complete(source) // here error happens
}
Http().bindAndHandle(route, "localhost", 8000)
}
你有什么建议吗,我可以试试什么?我正在使用
libraryDependencies += "com.typesafe.akka"%% "akka-http" % "10.0.5"
您需要从源代码处创建HttpEntity
,并给它一个Content-Type。
complete(HttpEntity(ContentTypes.`application/json`, source))
我的服务代码如下所示, 在我的AKKA HTTP路由中,我尝试从返回的未来构建,如下所示, 我不确定如何提交给响应。被传递的未来实质上是一系列预期按顺序执行的平面映射的未来。但是,我不相信这会作为分块字节流返回到客户端。 然而,我只得到最后一个未来的结果如下, 亲切地问候Meeraj
我正在开发一个使用Akka Http和Akka流的客户机-服务器应用程序。主要思想是服务器必须使用来自Akka Streams的源来提供http响应。 问题是服务器在向客户机发送第一条消息之前积累了一些元素。但是,我需要服务器在源生成新元素时立即发送元素到元素。 我同时获得所有元素,而不是每2秒接收一个元素。 有什么想法可以“强制”服务器发送每个元素,因为它是从源头出来的吗?
我经常发现自己使用一个“主”角色,为子任务创建许多子角色。当子任务完成时,主角也应该停止自己。所以当时,我观察子角色并停止主角色context.children.is。 我经常使用这种模式,但因为我从未读过这方面的文章。我不确定,这是一个好主意还是失败的演员有问题。。。? 我已经读过Akka 2中的关机模式,但是这种方法在Java中似乎比我的解决方案更复杂? 以下是我针对具有两个子任务的主要参与者
我确实尝试实现了这两种解决方案,但在实现的每个阶段都有许多设计选择,因此即使在一条“正确”的道路上,似乎也很容易搞砸。 1虽然我相信它是可以忽略不计的,而且是akka-http服务器运行的相同方式。
我正在尝试写一个简单的路线系列,下面是我想要发生的事情: 我几乎什么都试过了,却不知道该怎么办。这方面的文档很难理解。 谁能给我指点一下吗?