服务器流的Akka流(gRPC、Scala)
我是Akka Streams和gRPC的新手,我正在尝试构建一个端点,客户端发送一个请求,服务器发送多个响应 这是我的原型服务器流的Akka流(gRPC、Scala),scala,akka,grpc,akka-stream,akka-grpc,Scala,Akka,Grpc,Akka Stream,Akka Grpc,我是Akka Streams和gRPC的新手,我正在尝试构建一个端点,客户端发送一个请求,服务器发送多个响应 这是我的原型 syntax = "proto3"; option java_multiple_files = true; option java_package = "customer.service.proto"; service CustomerService { rpc CreateCustomer(CustomerRequest)
syntax = "proto3";
option java_multiple_files = true;
option java_package = "customer.service.proto";
service CustomerService {
rpc CreateCustomer(CustomerRequest) returns (stream CustomerResponse) {}
}
message CustomerRequest {
string customerId = 1;
string customerName = 2;
}
message CustomerResponse {
enum Status {
No_Customer = 0;
Creating_Customer = 1;
Customer_Created = 2;
}
string customerId = 1;
Status status = 2;
}
我试图通过发送客户请求来实现这一点,然后服务器将首先检查并响应No_customer,然后发送Creating_customer,最后服务器将显示customer_Created
我不知道从哪里开始实施it,找了好几个小时,但仍然一窍不通,如果有人能给我指出正确的方向,我将非常感激。开始的地方是服务,尤其是服务。让样本在干净的项目中工作非常简单
相关的服务器示例方法如下:
override def itKeepsReplying(in: HelloRequest): Source[HelloReply, NotUsed] = {
println(s"sayHello to ${in.name} with stream of chars...")
Source(s"Hello, ${in.name}".toList).map(character => HelloReply(character.toString))
}
现在的问题是创建一个返回正确结果的源代码,但这取决于您计划如何实现服务器,因此很难回答。检查以获取各种选项
客户端代码更简单,只需在CreateCustomer
返回的源代码上调用runForeach
,如示例所示:
def runStreamingReplyExample(): Unit = {
val responseStream = client.itKeepsReplying(HelloRequest("Alice"))
val done: Future[Done] =
responseStream.runForeach(reply => println(s"got streaming reply: ${reply.message}"))
done.onComplete {
case Success(_) =>
println("streamingReply done")
case Failure(e) =>
println(s"Error streamingReply: $e")
}
}
非常感谢你的帮助。