《Apache Dubbo微服务开发从入门到精通》——通信协议——二、 HTTP/2(Triple)协议(4) https://developer.aliyun.com/article/1224945
c) Streaming 方式
• 编写 Java 接口

• 编写实现类
public class IStreamGreeterImpl implements IStreamGreeter {
@Override
public StreamObserver<HelloRequest>
sayHello(StreamObserver<HelloReply> replyObserver) {
return new StreamObserver<HelloRequest>() {
private List<HelloReply> replyList = new ArrayList<>();
@Override
public void onNext(HelloRequest helloRequest) {
System.out.println("onNext receive request name:" +
helloRequest.getName());
replyList.add(HelloReply.newBuilder()
.setMessage("receive name:" +
helloRequest.getName())
.build());
}
@Override
public void onError(Throwable cause) {
System.out.println("onError");
replyObserver.onError(cause);
}
@Override
public void onCompleted() {
System.out.println("onComplete receive request size:"
+ replyList.size());
for (HelloReply reply : replyList) {
replyObserver.onNext(reply);
}
replyObserver.onCompleted();
}
};
}
}
• 创建 Provider

• 创建 Consumer
public class StreamConsumer {
public static void main(String[] args) throws
InterruptedException, IOException {
ReferenceConfig<IStreamGreeter> ref = new
ReferenceConfig<>();
ref.setInterface(IStreamGreeter.class);
ref.setCheck(false);
ref.setProtocol(CommonConstants.TRIPLE);
ref.setLazy(true);
ref.setTimeout(100000);
ref.setApplication(new ApplicationConfig("streamconsumer"));
ref.setRegistry(new RegistryConfig("zookeeper://mse-
6e9fda00-p.zk.mse.aliyuncs.com:2181"));
final IStreamGreeter iStreamGreeter = ref.get();
System.out.println("dubbo ref started");
try {
StreamObserver<HelloRequest> streamObserver =
iStreamGreeter.sayHello(new StreamObserver<HelloReply>() {
@Override
public void onNext(HelloReply reply) {
System.out.println("onNext");
System.out.println(reply.getMessage());
}
@Override
public void onError(Throwable throwable) {
System.out.println("onError:" +
throwable.getMessage());
}
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
});
streamObserver.onNext(HelloRequest.newBuilder()
.setName("tony")
.build());
streamObserver.onNext(HelloRequest.newBuilder()
.setName("nick")
.build());
streamObserver.onCompleted();
} catch (Throwable t) {
t.printStackTrace();
}
System.in.read();
}
}
• 运行 Provider 和 Consumer,可以看到请求正常返回了

注:
本文的示例可以在 triple-samples 找到
《Apache Dubbo微服务开发从入门到精通》——通信协议——二、 HTTP/2(Triple)协议(6) https://developer.aliyun.com/article/1224940