Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务器流的Akka流(gRPC、Scala)_Scala_Akka_Grpc_Akka Stream_Akka Grpc - Fatal编程技术网

服务器流的Akka流(gRPC、Scala)

服务器流的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)

我是Akka Streams和gRPC的新手,我正在尝试构建一个端点,客户端发送一个请求,服务器发送多个响应

这是我的原型

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")
  }
}

非常感谢你的帮助。