This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 710ed13  import tri stream (#809)
710ed13 is described below

commit 710ed131512850c5ada32b3405ee75f6689231eb
Author: panxiaojun233 <[email protected]>
AuthorDate: Mon May 31 10:22:24 2021 +0800

    import tri stream (#809)
---
 content/zh/docs/v3.0/references/tri.md | 139 +++++++++++++++++++++++++++++++++
 1 file changed, 139 insertions(+)

diff --git a/content/zh/docs/v3.0/references/tri.md 
b/content/zh/docs/v3.0/references/tri.md
index f7a4093..11da1e1 100644
--- a/content/zh/docs/v3.0/references/tri.md
+++ b/content/zh/docs/v3.0/references/tri.md
@@ -10,6 +10,8 @@ Triple 协议是 Dubbo3 的主力协议,完整兼容 gRPC over HTTP/2,并在
 
 在开始前,需要决定服务使用的序列化方式,如果为新服务,推荐使用 protobuf 
作为默认序列化,在性能和跨语言上的效果都会更好。如果是原有服务想进行协议升级,Triple 协议也已经支持其他序列化方式,如 Hessian / JSON 等
 
+
+
 ### Protobuf 
 
 1. 编写 IDL 文件
@@ -70,6 +72,8 @@ Triple 协议是 Dubbo3 的主力协议,完整兼容 gRPC over HTTP/2,并在
     $ mvn clean install
     ```
 
+### Unary 方式
+
 4.  编写 Java 接口
     ```java
     import org.apache.dubbo.hello.HelloReply;
@@ -137,9 +141,144 @@ Triple 协议是 Dubbo3 的主力协议,完整兼容 gRPC over HTTP/2,并在
 7. 运行 Provider 和 Consumer ,可以看到请求正常返回了
     > Reply:message: "name"
 
+### stream 方式
+
+8.  编写 Java 接口
+    ```java
+    import org.apache.dubbo.hello.HelloReply;
+    import org.apache.dubbo.hello.HelloRequest;
+
+    public interface IGreeter {
+        /**
+       * <pre>
+       *  Sends greeting by stream
+       * </pre>
+        */
+           StreamObserver<HelloRequest> sayHello(StreamObserver<HelloReply> 
replyObserver);
+
+    }
+    ```
+
+9. 编写实现类
+    ```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();
+                   }
+               };
+           }
+       }
+    ```
+
+10. 创建 Provider
+
+    ```java
+       public class StreamProvider {
+           public static void main(String[] args) throws InterruptedException {
+               ServiceConfig<IStreamGreeter> service = new ServiceConfig<>();
+               service.setInterface(IStreamGreeter.class);
+               service.setRef(new IStreamGreeterImpl());
+               service.setProtocol(new ProtocolConfig(CommonConstants.TRIPLE, 
50051));
+               service.setApplication(new 
ApplicationConfig("stream-provider"));
+               service.setRegistry(new 
RegistryConfig("zookeeper://127.0.0.1:2181"));
+               service.export();
+               System.out.println("dubbo service started");
+               new CountDownLatch(1).await();
+           }
+       }
+    ```
+
+11. 创建 Consumer
+
+    ```java
+       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("stream-consumer"));
+               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();
+           }
+       }
+    ```
+
+12. 运行 Provider 和 Consumer ,可以看到请求正常返回了
+    > onNext\
+    > receive name:tony\
+    > onNext\
+    > receive name:nick\
+    > onCompleted
 
 ### 其他序列化方式
 省略上文中的 1-3 步,指定 Provider 和 Consumer 使用的协议即可完成协议升级。
 
 ### 示例程序
 本文的示例程序可以在 
[triple-samples](https://github.com/apache/dubbo-samples/tree/master/dubbo-samples-triple)
 找到
+
+
+   
\ No newline at end of file

Reply via email to