You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by gi...@apache.org on 2019/11/08 05:13:03 UTC
[dubbo-website] branch asf-site updated: Automated deployment: Fri
Nov 8 05:12:52 UTC 2019 7877c75f07390d543693b51c120ccb3795da81d9
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 698ed48 Automated deployment: Fri Nov 8 05:12:52 UTC 2019 7877c75f07390d543693b51c120ccb3795da81d9
698ed48 is described below
commit 698ed48d5594049e41b4030c98c1ea19803d7b37
Author: lexburner <le...@users.noreply.github.com>
AuthorDate: Fri Nov 8 05:12:52 2019 +0000
Automated deployment: Fri Nov 8 05:12:52 UTC 2019 7877c75f07390d543693b51c120ccb3795da81d9
---
md_json/docs.json | 5 +
.../user/demos/GooglePb-generic-reference.html | 106 +++++++++++++++++++++
.../user/demos/GooglePb-generic-reference.json | 6 ++
3 files changed, 117 insertions(+)
diff --git a/md_json/docs.json b/md_json/docs.json
index ba40b8b..1cb3865 100644
--- a/md_json/docs.json
+++ b/md_json/docs.json
@@ -1594,6 +1594,11 @@
"meta": {}
},
{
+ "filename": "GooglePb-generic-reference.md",
+ "link": "/zh-cn/docs/user/demos/GooglePb-generic-reference.html",
+ "meta": {}
+ },
+ {
"filename": "accesslog.md",
"link": "/zh-cn/docs/user/demos/accesslog.html",
"meta": {}
diff --git a/zh-cn/docs/user/demos/GooglePb-generic-reference.html b/zh-cn/docs/user/demos/GooglePb-generic-reference.html
new file mode 100644
index 0000000..e7a82e8
--- /dev/null
+++ b/zh-cn/docs/user/demos/GooglePb-generic-reference.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+ <meta name="keywords" content="GooglePb-generic-reference" />
+ <meta name="description" content="GooglePb-generic-reference" />
+ <!-- 网页标签标题 -->
+ <title>GooglePb-generic-reference</title>
+ <link rel="shortcut icon" href="/img/dubbo.ico"/>
+ <link rel="stylesheet" href="/build/documentation.css" />
+</head>
+<body>
+ <div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="/img/dubbo_colorful.png"/></a><div class="search search-normal"><span class="icon-search"></span></div><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a [...]
+<p>泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参考 <a href="http://dubbo.apache.org/zh-cn/docs/user/demos/group-merger.html">泛化调用</a>。
+一般泛化调用只能用于生成的服务参数为POJO的情况,而GoogleProtobuf的对象是基于Builder生成的非正常POJO,可以通过protobuf-json泛化调用。<br>
+GoogleProtobuf序列化相关的Demo可以参考<a href="https://github.com/vio-lin/dubbo-samples/tree/protobuf-demo">protobuf-demo</a></p>
+<h1>通过Spring对Goolgle Protobuf对象泛化调用</h1>
+<p>在Spring中配置声明generic = "protobuf-json"</p>
+<pre><code><dubbo:reference id="barService" interface="com.foo.BarService" generic="protobuf-json" />
+</code></pre>
+<p>在 Java 代码获取 barService 并开始泛化调用:</p>
+<pre><code>GenericService barService = (GenericService) applicationContext.getBean("barService");
+Object result = barService.$invoke("sayHello",new String[]{"org.apache.dubbo.protobuf.GooglePbBasic$CDubboGooglePBRequestType"}, new Object[]{"{\"double\":0.0,\"float\":0.0,\"bytesType\":\"Base64String\",\"int32\":0}"});
+</code></pre>
+<h1>通过 API 方式对Goolgle Protobuf对象泛化调用</h1>
+<pre><code>ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
+// 弱类型接口名
+reference.setInterface(GenericService.class.getName());
+reference.setInterface("com.xxx.XxxService");
+// 声明为Protobuf-json
+reference.setGeneric(Constants.GENERIC_SERIALIZATION_PROTOBUF);
+
+GenericService genericService = reference.get();
+Map<String, Object> person = new HashMap<String, Object>();
+person.put("fixed64", "0");
+person.put("int64", "0");
+// 参考google官方的protobuf 3 的语法,服务的每个方法中只传输一个POJO对象
+// protobuf的泛化调用只允许传递一个类型为String的json对象来代表请求参数
+String requestString = new Gson().toJson(person);
+// 返回对象是GoolgeProtobuf响应对象的json字符串。
+Object result = genericService.$invoke("sayHello", new String[] {
+ "com.xxx.XxxService.GooglePbBasic$CDubboGooglePBRequestType"},
+ new Object[] {requestString});
+</code></pre>
+<h1>有关GoogleProtobuf对象的处理</h1>
+<p>GoogleProtobuf对象是由Protocol契约生成,相关知识请参考<a href="https://developers.google.com/protocol-buffers/?hl=zh-CN">ProtocolBuffers文档</a>。
+假如有如下Protobuf 契约</p>
+<pre><code>syntax = "proto3";
+package com.xxx.XxxService.GooglePbBasic.basic;
+message CDubboGooglePBRequestType {
+ double double = 1;
+ float float = 2;
+ int32 int32 = 3;
+ bool bool = 13;
+ string string = 14;
+ bytes bytesType = 15;
+}
+
+message CDubboGooglePBResponseType {
+ string msg = 1;
+}
+
+service CDubboGooglePBService {
+ rpc sayHello (CDubboGooglePBRequestType) returns (CDubboGooglePBResponseType);
+}
+</code></pre>
+<p>则对应请求按照如下方法构造</p>
+<pre><code>Map<String, Object> person = new HashMap<>();
+person.put("double", "1.000");
+person.put("float", "1.00");
+person.put("int32","1" );
+person.put("bool","false" );
+//String 的对象需要经过base64编码
+person.put("string","someBaseString");
+person.put("bytesType","150");
+</code></pre>
+<h1>GoogleProtobuf服务元数据解析</h1>
+<p>Google Protobuf对象缺少标准的JSON格式,生成的服务元数据信息存在错误。
+请添加如下依赖元数据解析的依赖。</p>
+<pre><code><dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-metadata-definition-protobuf</artifactId>
+ <version>${dubbo.version}</version>
+</dependency>
+</code></pre>
+<p>从服务元数据中也可以比较容易构建泛化调用对象。</p>
+</div></section><footer class="footer-container"><div class="footer-body"><img src="/img/dubbo_gray.png"/><img class="apache" src="/img/apache_logo.png"/><div class="cols-container"><div class="col col-12"><h3></h3><p></p></div><div class="col col-4"><dl><dt>ASF</dt><dd><a href="http://www.apache.org" target="_self">基金会</a></dd><dd><a href="http://www.apache.org/licenses/" target="_self">证书</a></dd><dd><a href="http://www.apache.org/events/current-event" target="_self">事件</a></dd><dd><a [...]
+ <script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
+ <script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
+ <script>
+ window.rootPath = '';
+ </script>
+ <script src="/build/documentation.js"></script>
+ <!-- Global site tag (gtag.js) - Google Analytics -->
+ <script async src="https://www.googletagmanager.com/gtag/js?id=UA-112489517-1"></script>
+ <script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+
+ gtag('config', 'UA-112489517-1');
+ </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/zh-cn/docs/user/demos/GooglePb-generic-reference.json b/zh-cn/docs/user/demos/GooglePb-generic-reference.json
new file mode 100644
index 0000000..a64ca84
--- /dev/null
+++ b/zh-cn/docs/user/demos/GooglePb-generic-reference.json
@@ -0,0 +1,6 @@
+{
+ "filename": "GooglePb-generic-reference.md",
+ "__html": "<h1>GoogleProtobuf对象泛化调用</h1>\n<p>泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参考 <a href=\"http://dubbo.apache.org/zh-cn/docs/user/demos/group-merger.html\">泛化调用</a>。\n一般泛化调用只能用于生成的服务参数为POJO的情况,而GoogleProtobuf的对象是基于Builder生成的非正常POJO,可以通过protobuf-json泛化调用。<br>\nGoogleProtobuf序列化相关的Demo可以参考<a href=\"https://github.com/vio-lin/dubbo-samples/tree/protobuf-demo\">protobuf-demo</a></p>\n<h1>通过Spring对Goolgle Protobuf对象泛化调用</h1>\n<p>在Spring中配置声明generic = "protobuf-json"</p>\n<pre><co [...]
+ "link": "/zh-cn/docs/user/demos/GooglePb-generic-reference.html",
+ "meta": {}
+}
\ No newline at end of file