You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2017/12/12 09:18:28 UTC

[31/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/faqs/index.html
----------------------------------------------------------------------
diff --git a/content/cn/faqs/index.html b/content/cn/faqs/index.html
new file mode 100644
index 0000000..c2f5923
--- /dev/null
+++ b/content/cn/faqs/index.html
@@ -0,0 +1,988 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>常见问题 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="常见问题">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="常见问题">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/faqs/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/faqs/">
+
+
+
+  <meta property="og:description" content="常见问题">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="常见问题">
+  <meta name="twitter:description" content="常见问题">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/faqs/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/faqs/"><span class="nav__sub-title nav__sub-title-with-url">常见问题</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/faqs/faqs-huawei-cloud/"><span class="nav__sub-title nav__sub-title-with-url">华为公有云常见问题</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="常见问题">
+    <meta itemprop="description" content="常见问题">
+    
+    <meta itemprop="dateModified" content="October 29, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">常见问题
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <ul>
+  <li>
+    <p><strong>Q: ServiceComb和SpringCloud是什么关系,具体的应用场景是什么?</strong></p>
+
+    <p>A: ServiceComb是华为基于内部多个大型IT系统实践提炼出来的一套微服务开发框架,在开发态基于最佳实践封装了一套微服务运行模型,这些能力对用户完全透明,可以通过配置引入功能和对其进行调整。在运维阶段充分考虑了微服务运维,提供了丰富的监控指标和动态治理能力。    <br />
+ B: ServiceComb的这套能力可以作为一个单独的开发框架,在需要轻量级微服务解决方案的的场景中单独使用,也可以建立在SpringCloud上,与SpringCloud提供的其他组件一起工作,在重量级场景中和SpringCloud一起产生 “1+1大于2”的效果。</p>
+  </li>
+  <li>
+    <p><strong>Q: 用IntelliJ的免费版开发,有什么问题?</strong></p>
+
+    <p>A: 没有问题,使用IntelliJ 开发,可参考 <a href="/cn/developers/setup-develop-environment/">Setup Developer Environment</a> 进行相应的环境配置。</p>
+  </li>
+  <li>
+    <p><strong>Q: 使用Java-Chassis这个框架时有什么需要注意的地方?</strong></p>
+
+    <p>A: 使用Java-Chassis有以下这些限制:
+ (1) 0.3.0-SNAPSHOT之前的版本不支持类似<code class="highlighter-rouge">@GetMapping</code>这样的标注。
+ (2) 所用到的HTTP请求方法一样时,如GET,则方法名不能重载。这是由于生成契约时方法名会作为其Operation ID,所以要保证其唯一性。
+ (3) 方法和类必须是public的。</p>
+  </li>
+  <li>
+    <p><strong>Q: 使用<em>spring-boot-starter-provider</em>这个依赖时,在<em>application.yml</em>文件中声明的<code class="highlighter-rouge">spring.main.web-application</code>属性并没有生效?</strong></p>
+
+    <p>A: 使用<em>starter-provider</em>这个依赖时,如果用到了servlet这种方式时,需要在<em>application.properties</em>这个文件引入<code class="highlighter-rouge">spring.main.web-application=true</code>这样的属性或者在<em>application.yml</em>文件中声明,但是此时需要新建一个<em>application.properties</em>的文件,其内容可以为空。</p>
+  </li>
+  <li>
+    <p><strong>Q: 网关依赖的jar和其他微服务的一样吗?</strong></p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+ <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+</code></pre>
+    </div>
+
+    <p>A: 网关除了要依赖<code class="highlighter-rouge">spring-boot-starter-provider</code>之外还要依赖<code class="highlighter-rouge">spring-boot-starter-discovery</code>,可以参考<a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">LinuxCon-Beijing-Workshop</a>中manager的实现。</p>
+  </li>
+  <li>
+    <p><strong>Q: 网关需要像其他微服务一样配置assembly吗?其中的/maven/gateway这个路径是docker maven plugin默认的吗?</strong></p>
+
+    <p>A: 需要,由于项目现在使用的是spring-boot的打包方式,docker maven plugin也是依赖打包生成的文件来生成docker镜像的。/maven这个路径是docker maven plugin指定的,而gateway这个路径是在assembly中指定的。</p>
+  </li>
+  <li>
+    <p><strong>Q: 服务接口的返回类型可以是任意类型吗?还是必须是responseEntity?</strong></p>
+
+    <p>A: 可以,具体可以参考java-chassis的<a href="https://github.com/ServiceComb/java-chassis/blob/master/integration-tests/springmvc-tests/src/test/java/io/servicecomb/demo/springmvc/tests/SpringMvcIntegrationTestBase.java#L145">integration-test的实现</a>。</p>
+  </li>
+  <li>
+    <p><strong>Q: 微服务启动后,无法正确调用接口,使用的代码为:</strong></p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@RestController</span>
+ <span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"worker"</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerController</span> <span class="o">{</span>
+   <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span><span class="o">=</span><span class="s">"/count"</span><span class="o">,</span> <span class="n">method</span><span class="o">=</span><span class="n">RequestMethod</span><span class="o">.</span><span class="na">GET</span><span class="o">)</span>
+   <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getWorkerNumbers</span><span class="o">()</span> <span class="o">{</span>
+     <span class="o">...</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>A: 在没有指明根路径的情况下,默认会使用类名作为其根路径,即上述代码中可访问的路径应为<code class="highlighter-rouge">/WorkerController/count</code>。如果想要实现<code class="highlighter-rouge">/count</code>这样的访问,则要指明根路径:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/"</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerController</span> <span class="o">{}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: 如果没有指定RequestMapping这个标注的value时,默认的基本路径是什么?</strong></p>
+
+    <p>A: 假设你的Controller类名为<em>HelloController</em>,那么基本路径就是/HelloController。</p>
+  </li>
+  <li>
+    <p><strong>Q: 在eclipse下修改了microservice.yaml配置文件下的端口号,启动程序后,端口号没生效?</strong></p>
+
+    <p>A: 需要单独导入sample项目,如果导入整个ServiceComb-Java-Chassis项目,由于sample目录不在ServiceComb-Java-Chassis模块中,IDE不会对sample进行编译,eclipse下并没有提示错误信息,IDEA下会有提示信息。因此eclipse启动sample的demo会发现修改了端口没有生效。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如何自定义某个Java方法对应的REST接口里的HTTP Status Code?</strong></p>
+
+    <p>A: 对于正常的返回值,可以通过SwaggerAnnotation实现,例如:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@ApiResponse</span><span class="o">(</span><span class="n">code</span> <span class="o">=</span> <span class="mi">300</span><span class="o">,</span> <span class="n">response</span> <span class="o">=</span> <span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">message</span> <span class="o">=</span> <span class="s">""</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kt">int</span> <span class="nf">test</span><span class="o">(</span><span class="kt">int</span> <span class="n">x</span><span class="o">)</span> <span class="o">{</span>
+   <span class="k">return</span> <span class="mi">100</span><span class="o">;</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>对于异常的返回值,可以通过抛出自定义的InvocationException实现,例如:、</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="n">String</span> <span class="nf">testException</span><span class="o">(</span><span class="kt">int</span> <span class="n">code</span><span class="o">)</span> <span class="o">{</span>
+   <span class="n">String</span> <span class="n">strCode</span> <span class="o">=</span> <span class="n">String</span><span class="o">.</span><span class="na">valueOf</span><span class="o">(</span><span class="n">code</span><span class="o">);</span>
+     <span class="k">switch</span> <span class="o">(</span><span class="n">code</span><span class="o">)</span> <span class="o">{</span>
+       <span class="k">case</span> <span class="mi">200</span><span class="o">:</span>
+         <span class="k">return</span> <span class="n">strCode</span><span class="o">;</span>
+       <span class="k">case</span> <span class="mi">456</span><span class="o">:</span>
+         <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">code</span><span class="o">,</span> <span class="n">strCode</span><span class="o">,</span> <span class="n">strCode</span> <span class="o">+</span> <span class="s">" error"</span><span class="o">);</span>
+       <span class="k">case</span> <span class="mi">556</span><span class="o">:</span>
+         <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">code</span><span class="o">,</span> <span class="n">strCode</span><span class="o">,</span> <span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="n">strCode</span> <span class="o">+</span> <span class="s">" error"</span><span class="o">));</span>
+       <span class="k">case</span> <span class="mi">557</span><span class="o">:</span>
+         <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">code</span><span class="o">,</span> <span class="n">strCode</span><span class="o">,</span> <span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="n">strCode</span> <span class="o">+</span> <span class="s">" error"</span><span class="o">)));</span>
+       <span class="k">default</span><span class="o">:</span>
+         <span class="k">break</span><span class="o">;</span>
+     <span class="o">}</span>
+   
+   <span class="k">return</span> <span class="s">"not expected"</span><span class="o">;</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: 如何定制自己微服务的日志配置?</strong></p>
+
+    <p>A: ServiceComb不绑定日志器,只是使用了slf4j,用户可以自由选择log4j/log4j2/logback等等。ServiceComb提供了一个log4j的扩展,在标准log4j的基础上,支持log4j的properties文件的增量配置。</p>
+    <ul>
+      <li>默认以规则:”classpath*:config/log4j.properties”加载配置文件</li>
+      <li>实际会搜索出classpath中所有的<code class="highlighter-rouge">config/log4j.properties和config/log4j.*.properties</code>, 从搜索出的文件中切出<code class="highlighter-rouge">\*</code>的部分,进行alpha排序,然后按顺序加载,最后合成的文件作为log4j的配置文件。</li>
+      <li>如果要使用ServiceComb的log4j扩展,则需要调用Log4jUtils.init,否则完全按标准的日志器的规则使用。</li>
+    </ul>
+  </li>
+  <li>
+    <p><strong>Q: 当服务配置了多个transport的时候,在运行时是怎么选择使用哪个transport的?</strong></p>
+
+    <p>A:</p>
+    <ul>
+      <li>
+        <p>ServiceComb的consumer、transport、handler、producer之间是解耦的,各功能之间通过契约定义联合在一起工作的,即:
+ consumer使用透明rpc,还是springmvc开发与使用highway,还是RESTful在网络上传输没有关系与producer是使用透明rpc,还是jaxrs,或者是springmvc开发,也没有关系handler也不感知,业务开发方式以及传输方式</p>
+      </li>
+      <li>
+        <p>consumer访问producer,在运行时的transport选择上,总规则为:
+ consumer的transport与producer的endpoint取交集,如果交集后,还有多个transport可选择,则轮流使用</p>
+
+        <p>分解开来,存在以下场景:</p>
+      </li>
+      <li>当一个微服务producer同时开放了highway以及RESTful的endpoint
+        <ul>
+          <li>consumer进程中只部署了highway transport jar,则只会访问producer的highway endpoint</li>
+          <li>consumer进程中只部署了RESTful transport jar,则只会访问producer的RESTful endpoint</li>
+          <li>consumer进程中,同时部署了highway和RESTful transport jar,则会轮流访问producer的highway、RESTful endpoint</li>
+        </ul>
+
+        <p>如果,此时consumer想固定使用某个transport访问producer,可以在consumer进程的microservice.yaml中配置,指定transport的名称:</p>
+
+        <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">servicecomb</span><span class="pi">:</span>
+   <span class="s">references</span><span class="pi">:</span>
+     <span class="s">&lt;service_name&gt;</span><span class="pi">:</span>
+       <span class="s">transport</span><span class="pi">:</span> <span class="s">highway</span>
+</code></pre>
+        </div>
+      </li>
+      <li>当一个微服务producer只开放了highway的endpoint
+        <ul>
+          <li>consumer进程只部署了highway transport jar,则正常使用highway访问</li>
+          <li>consumer进程只部署了RESTful transport jar,则无法访问</li>
+          <li>consumer进程同时部署了highway和RESTful transport jar,则正常使用highway访问</li>
+        </ul>
+      </li>
+      <li>当一个微服务producer只开放了RESTful的endpoint
+        <ul>
+          <li>consumer进程只部署了highway transport jar,则无法访问</li>
+          <li>consumer进程只部署了RESTful transport jar,则正常使用RESTful访问</li>
+          <li>consumer进程同时部署了highway和RESTful transport jar,则正常使用RESTful访问</li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+  <li>
+    <p><strong>Q: swagger body参数类型定义错误,导致服务中心注册的内容没有类型信息</strong></p>
+
+    <p><strong>现象描述:</strong></p>
+
+    <p>定义如下接口,将参数放到body传递</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">/testInherate</span><span class="pi">:</span>
+     <span class="s">post</span><span class="pi">:</span>
+       <span class="s">operationId</span><span class="pi">:</span> <span class="s2">"</span><span class="s">testInherate"</span>
+       <span class="s">parameters</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">in</span><span class="pi">:</span> <span class="s2">"</span><span class="s">body"</span>
+         <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">xxxxx"</span>
+         <span class="s">required</span><span class="pi">:</span> <span class="s">false</span>
+         <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+       <span class="s">responses</span><span class="pi">:</span>
+         <span class="s">200</span><span class="pi">:</span>
+           <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">response</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">200"</span>
+           <span class="s">schema</span><span class="pi">:</span>
+             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ReponseImpl"</span>
+</code></pre>
+    </div>
+
+    <p>采用上面方式定义接口。在服务注册以后,从服务中心查询下来的接口type: string 丢失,变成了:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">/testInherate</span><span class="pi">:</span>
+     <span class="s">post</span><span class="pi">:</span>
+       <span class="s">operationId</span><span class="pi">:</span> <span class="s2">"</span><span class="s">testInherate"</span>
+       <span class="s">parameters</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">in</span><span class="pi">:</span> <span class="s2">"</span><span class="s">body"</span>
+         <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">xxxxx"</span>
+         <span class="s">required</span><span class="pi">:</span> <span class="s">false</span>
+       <span class="s">responses</span><span class="pi">:</span>
+         <span class="s">200</span><span class="pi">:</span>
+           <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">response</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">200"</span>
+           <span class="s">schema</span><span class="pi">:</span>
+             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ReponseImpl"</span>
+</code></pre>
+    </div>
+
+    <p>如果客户端没有放置swagger,还会报告如下异常:</p>
+
+    <div class="language-text highlighter-rouge"><pre class="highlight"><code>    Caused by: java.lang.ClassFormatError: Method "testInherate" in class ? has illegal signature "
+</code></pre>
+    </div>
+
+    <p>A:定义body参数的类型的时候,需要使用schema,不能直接使用type。</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">/testInherate</span><span class="pi">:</span>
+     <span class="s">post</span><span class="pi">:</span>
+       <span class="s">operationId</span><span class="pi">:</span> <span class="s2">"</span><span class="s">testInherate"</span>
+       <span class="s">parameters</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">in</span><span class="pi">:</span> <span class="s2">"</span><span class="s">body"</span>
+         <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">request"</span>
+         <span class="s">required</span><span class="pi">:</span> <span class="s">false</span>
+         <span class="s">schema</span><span class="pi">:</span>
+           <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+       <span class="s">responses</span><span class="pi">:</span>
+         <span class="s">200</span><span class="pi">:</span>
+           <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">response</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">200"</span>
+           <span class="s">schema</span><span class="pi">:</span>
+             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ReponseImpl"</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb微服务框架服务调用是否使用长连接?</strong></p>
+
+    <p>A: http使用的是长连接(有超时时间),highway方式使用的是长连接(一直保持)。</p>
+  </li>
+  <li>
+    <p><strong>Q: 服务断连服务中心注册信息是否自动删除</strong></p>
+
+    <p>A: 服务中心心跳检测到服务实例不可用,只会移除服务实例信息,服务的静态数据不会移除。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如果使用tomcat方式集成ServiceComb微服务框架,如何实现服务注册</strong></p>
+
+    <p>A: 如果使用cse sdk servlet方式(使用transport-rest-servlet依赖)制作为war包部署到tomcat,需要保证,服务描述文件(microservice.yaml)中rest端口配置和外置容器一致才能实现该服务的正确注册。否则无法感知tomcat开放端口。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如果使用tomcat方式集成CSE微服务框架,服务注册的时候如何将war包部署的上下文注册到服务中心</strong></p>
+
+    <p>A: 发布服务接口的时候需要将war包部署的上下文(context)放在baseurl最前面,这样才能保证注册到服务中心的路径是完整的路径(包含了上下文)。实例:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@path</span><span class="o">(/{</span><span class="n">context</span><span class="o">}/</span><span class="n">xxx</span><span class="o">)</span>
+ <span class="kd">class</span> <span class="nc">ServiceA</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb微服务框架如何实现数据多个微服务间透传</strong></p>
+
+    <p>A:
+ 透传数据塞入:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">CseHttpEntity</span><span class="o">&lt;</span><span class="n">xxxx</span><span class="o">.</span><span class="na">class</span><span class="o">&gt;</span> <span class="n">httpEntity</span> <span class="o">=</span> <span class="k">new</span> <span class="n">CseHttpEntity</span><span class="o">&lt;&gt;(</span><span class="n">xxx</span><span class="o">);</span>
+ <span class="c1">//透传内容</span>
+ <span class="n">httpEntity</span><span class="o">.</span><span class="na">addContext</span><span class="o">(</span><span class="s">"contextKey"</span><span class="o">,</span><span class="s">"contextValue"</span><span class="o">);</span>
+ <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">responseEntity</span> <span class="o">=</span> <span class="n">RestTemplateBuilder</span><span class="o">.</span><span class="na">create</span><span class="o">().</span><span class="na">exchange</span><span class="o">(</span><span class="s">"cse://springmvc/springmvchello/sayhello"</span><span class="o">,</span><span class="n">HttpMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">,</span><span class="n">httpEntity</span><span class="o">,</span><span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+</code></pre>
+    </div>
+
+    <p>透传数据获取:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@Override</span>
+ <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span><span class="o">=</span><span class="s">"/sayhello"</span><span class="o">,</span><span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">Person</span> <span class="n">person</span><span class="o">,</span><span class="n">InvocationContext</span> <span class="n">context</span><span class="o">){</span>
+   <span class="c1">//透传数据获取</span>
+   <span class="n">context</span><span class="o">.</span><span class="na">getContext</span><span class="o">();</span>
+   <span class="k">return</span> <span class="s">"Hello person "</span> <span class="o">+</span> <span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb微服务框架服务如何自定义返回状态码?</strong></p>
+
+    <p>A:</p>
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@Override</span>
+ <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/sayhello"</span><span class="o">,</span><span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">Person</span> <span class="n">person</span><span class="o">){</span>
+   <span class="n">InvocationContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">ContextUtils</span><span class="o">.</span><span class="na">getInvocationContext</span><span class="o">();</span>
+   <span class="c1">//自定义状态码</span>
+   <span class="n">context</span><span class="o">.</span><span class="na">setStatus</span><span class="o">(</span><span class="n">Status</span><span class="o">.</span><span class="na">CREATED</span><span class="o">);</span>
+   <span class="k">return</span> <span class="s">"Hello person "</span><span class="o">+</span><span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb body Model部分暴露</strong></p>
+
+    <p>A: 一个接口对应的body对象中,可能有一些属性是内部的,不想开放出去,生成schema的时候不要带出去,使用:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@ApiModelProperty</span><span class="o">(</span><span class="n">hidden</span> <span class="o">=</span> <span class="kc">true</span><span class="o">)</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb框架获取远端consumer的地址</strong></p>
+
+    <p>A: 如果使用http rest方式(使用transport-rest-vertx依赖)可以用下面这种方式获取:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">AbstractProducerContextArgMapper</span> <span class="n">httpRequestCreator</span> <span class="o">=</span> <span class="o">(</span><span class="n">AbstractProducerContextArgMapper</span><span class="o">)</span><span class="n">invocation</span><span class="o">.</span><span class="na">getHandlerContext</span><span class="o">().</span><span class="na">get</span><span class="o">(</span><span class="n">RestConst</span><span class="o">.</span><span class="na">HTTP_REQUEST_CREATOR</span><span class="o">);</span>
+ <span class="k">if</span><span class="o">(</span><span class="n">httpRequestCreator</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">){</span>
+   <span class="n">HttpServletRequest</span> <span class="n">req</span> <span class="o">=</span> <span class="o">(</span><span class="n">HttpServletRequest</span><span class="o">)</span><span class="n">httpRequestCreator</span><span class="o">.</span><span class="na">createContextArg</span><span class="o">(</span><span class="n">invocation</span><span class="o">);</span>
+   <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getRemoteHost</span><span class="o">());</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>实际场景是拿最外层的地址,所以应该是LB传入到edgeservice,edgeService再放到context外下传递。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb不支持泛型</strong></p>
+
+    <p>A: 明确不支持,需要修改接口,接口修改后需要修改版本号,以免consumer还是使用旧的版本。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb对handler描述</strong></p>
+
+    <p>A: consumer默认的handler是simpleLB,没有配置的时候handler链会使用这个,如果配置了handler,里面一定要包含lb的handler,否则调用报错,需要在文档里面进行说明。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb日志替换</strong></p>
+
+    <p>A: CSE java-chassis日志推荐方式是在启动的时候使用Log4jUtils.init(),直接使用推荐的Log4j来做日志管理,但是有些场景不想用log4j,比如想使用log4j2或者logback,下面以log4j2为例简单介绍下步骤:</p>
+
+    <ol>
+      <li>在代码里面不要使用Log4jUtils.init();</li>
+      <li>去掉log4j的配置文件(不删掉也没关系,因为不会使用);</li>
+      <li>exclude掉CSE框架引入的log4j,例如:
+        <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+    <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>provider-springmvc<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;exclusions&gt;</span>
+        <span class="nt">&lt;exclusion&gt;</span>
+            <span class="nt">&lt;groupId&gt;</span>log4j<span class="nt">&lt;/groupId&gt;</span>
+            <span class="nt">&lt;artifactId&gt;</span>log4j<span class="nt">&lt;/artifactId&gt;</span>
+        <span class="nt">&lt;/exclusion&gt;</span>
+    <span class="nt">&lt;/exclusions&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+        </div>
+      </li>
+      <li>
+        <p>引入log4j2的依赖</p>
+
+        <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>    
+    <span class="nt">&lt;groupId&gt;</span>org.apache.logging.log4j<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>log4j-slf4j-impl<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+<span class="nt">&lt;dependency&gt;</span>
+    <span class="nt">&lt;groupId&gt;</span>org.apache.logging.log4j<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>log4j-api<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+<span class="nt">&lt;dependency&gt;</span>
+    <span class="nt">&lt;groupId&gt;</span>org.apache.logging.log4j<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>log4j-core<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+        </div>
+
+        <p>如果没有版本依赖管理,还需要填写上版本号。</p>
+      </li>
+      <li>
+        <p>加入log4j2的配置文件log4j2.xml,关于这个请查看官方说明,例如:</p>
+
+        <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+ <span class="c">&lt;!--日志级别以及优先级排序: OFF &gt; FATAL &gt; ERROR &gt; WARN &gt; INFO &gt; DEBUG &gt; TRACE &gt; ALL --&gt;</span>
+ <span class="c">&lt;!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--&gt;</span>
+ <span class="c">&lt;!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--&gt;</span>
+ <span class="nt">&lt;configuration</span> <span class="na">status=</span><span class="s">"WARN"</span> <span class="na">monitorInterval=</span><span class="s">"30"</span><span class="nt">&gt;</span>
+     <span class="c">&lt;!--先定义所有的appender--&gt;</span>
+     <span class="nt">&lt;appenders&gt;</span>
+     <span class="c">&lt;!--这个输出控制台的配置--&gt;</span>
+         <span class="nt">&lt;console</span> <span class="na">name=</span><span class="s">"Console"</span> <span class="na">target=</span><span class="s">"SYSTEM_OUT"</span><span class="nt">&gt;</span>
+         <span class="c">&lt;!--输出日志的格式--&gt;</span>
+             <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/&gt;</span>
+         <span class="nt">&lt;/console&gt;</span>
+         <span class="c">&lt;!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--&gt;</span>
+         <span class="nt">&lt;File</span> <span class="na">name=</span><span class="s">"log"</span> <span class="na">fileName=</span><span class="s">"log/test.log"</span> <span class="na">append=</span><span class="s">"false"</span><span class="nt">&gt;</span>
+            <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"</span><span class="nt">/&gt;</span>
+         <span class="nt">&lt;/File&gt;</span>
+         <span class="c">&lt;!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--&gt;</span>
+         <span class="nt">&lt;RollingFile</span> <span class="na">name=</span><span class="s">"RollingFileInfo"</span> <span class="na">fileName=</span><span class="s">"${sys:user.home}/logs/info.log"</span>
+                      <span class="na">filePattern=</span><span class="s">"${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"</span><span class="nt">&gt;</span>
+             <span class="c">&lt;!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--&gt;</span>
+             <span class="nt">&lt;ThresholdFilter</span> <span class="na">level=</span><span class="s">"info"</span> <span class="na">onMatch=</span><span class="s">"ACCEPT"</span> <span class="na">onMismatch=</span><span class="s">"DENY"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;Policies&gt;</span>
+                 <span class="nt">&lt;TimeBasedTriggeringPolicy/&gt;</span>
+                 <span class="nt">&lt;SizeBasedTriggeringPolicy</span> <span class="na">size=</span><span class="s">"100 MB"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;/Policies&gt;</span>
+         <span class="nt">&lt;/RollingFile&gt;</span>
+         <span class="nt">&lt;RollingFile</span> <span class="na">name=</span><span class="s">"RollingFileWarn"</span> <span class="na">fileName=</span><span class="s">"${sys:user.home}/logs/warn.log"</span>
+                      <span class="na">filePattern=</span><span class="s">"${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"</span><span class="nt">&gt;</span>
+             <span class="nt">&lt;ThresholdFilter</span> <span class="na">level=</span><span class="s">"warn"</span> <span class="na">onMatch=</span><span class="s">"ACCEPT"</span> <span class="na">onMismatch=</span><span class="s">"DENY"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;Policies&gt;</span>
+                 <span class="nt">&lt;TimeBasedTriggeringPolicy/&gt;</span>
+                 <span class="nt">&lt;SizeBasedTriggeringPolicy</span> <span class="na">size=</span><span class="s">"100 MB"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;/Policies&gt;</span>
+             <span class="c">&lt;!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --&gt;</span>
+             <span class="nt">&lt;DefaultRolloverStrategy</span> <span class="na">max=</span><span class="s">"20"</span><span class="nt">/&gt;</span>
+         <span class="nt">&lt;/RollingFile&gt;</span>
+         <span class="nt">&lt;RollingFile</span> <span class="na">name=</span><span class="s">"RollingFileError"</span> <span class="na">fileName=</span><span class="s">"${sys:user.home}/logs/error.log"</span>
+                      <span class="na">filePattern=</span><span class="s">"${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"</span><span class="nt">&gt;</span>
+             <span class="nt">&lt;ThresholdFilter</span> <span class="na">level=</span><span class="s">"error"</span> <span class="na">onMatch=</span><span class="s">"ACCEPT"</span> <span class="na">onMismatch=</span><span class="s">"DENY"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;Policies&gt;</span>
+                 <span class="nt">&lt;TimeBasedTriggeringPolicy/&gt;</span>
+                 <span class="nt">&lt;SizeBasedTriggeringPolicy</span> <span class="na">size=</span><span class="s">"100 MB"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;/Policies&gt;</span>
+         <span class="nt">&lt;/RollingFile&gt;</span>
+     <span class="nt">&lt;/appenders&gt;</span>
+     <span class="c">&lt;!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--&gt;</span>
+     <span class="nt">&lt;loggers&gt;</span>
+         <span class="c">&lt;!--过滤掉spring和mybatis的一些无用的DEBUG信息--&gt;</span>
+         <span class="nt">&lt;logger</span> <span class="na">name=</span><span class="s">"org.springframework"</span> <span class="na">level=</span><span class="s">"INFO"</span><span class="nt">&gt;&lt;/logger&gt;</span>
+         <span class="nt">&lt;logger</span> <span class="na">name=</span><span class="s">"org.mybatis"</span> <span class="na">level=</span><span class="s">"INFO"</span><span class="nt">&gt;&lt;/logger&gt;</span>
+         <span class="nt">&lt;root</span> <span class="na">level=</span><span class="s">"all"</span><span class="nt">&gt;</span>
+             <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">"Console"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">"RollingFileInfo"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">"RollingFileWarn"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">"RollingFileError"</span><span class="nt">/&gt;</span>
+         <span class="nt">&lt;/root&gt;</span>
+     <span class="nt">&lt;/loggers&gt;</span>
+ <span class="nt">&lt;/configuration&gt;</span>
+</code></pre>
+        </div>
+      </li>
+      <li>启动服务进行验证</li>
+    </ol>
+  </li>
+  <li>
+    <p><strong>Q: netty版本问题</strong></p>
+
+    <p>A: netty3和netty4是完全不同的三方件,因为坐标跟package都不相同,所以可以共存,但是要注意小版本问题,小版本必须使用CSE的版本。</p>
+  </li>
+  <li>
+    <p><strong>Q: 服务超时设置</strong></p>
+
+    <p>A: 在微服务描述文件(microservice.yaml)中添加如下配置:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">request</span><span class="pi">:</span>
+     <span class="s">timeout</span><span class="pi">:</span> <span class="s">30000</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: URL 地址就可以唯一定位,为什么要加上一个schema?</strong></p>
+
+    <p>A:</p>
+    <ol>
+      <li>schema 是用来匹配服务契约的,用来保证服务端和消费端契约兼容,每个契约需要一个唯一ID,在服务中心存储。</li>
+      <li>schema映射到java的interface概念,在consumer使用透明rpc模式开发时,可以找到是微服务里的哪个operation。schema之间的方法名是没有唯一性要求的。</li>
+      <li>operation qualified name是治理的key,而URL 因为path参数的存在,没办法直接查找,而qualified name是不会变的。治理是不区分传输的,如果治理按URL 走,那么highway调进来时,还得根据参数反向构造出url,再来正则表达式匹配,太折腾了。</li>
+      <li>http只是一种传输通道,还有别的传输通道不需要映射到URL的。</li>
+    </ol>
+  </li>
+  <li>
+    <p><strong>Q: rest客户端调用的时候,实际上只带上了服务名和URL,并不需要指定schema id的, 而实际上根据这个URL也能找到具体契约的,所以指定schema id作用何在?</strong></p>
+
+    <p>A: 由于透明rpc是接口式调用,并没有URL,内部实际都归一化到operation来描述的,这样就可以结合schema id唯一定位到具体的请求处理中。</p>
+  </li>
+  <li>
+    <p><strong>Q: Transport是个什么概念?用来干什么的?</strong></p>
+
+    <p>A: transport负责编解码,以及传输。通信模型有rest和highway两种,highway对应的是私有协议,使用protobuf编码,rest用的是json。hightway和rest都是基于vertx做的,vertx是基于netty的。</p>
+  </li>
+  <li>
+    <p><strong>Q: 框架中引入了vertx会有什么好处?</strong></p>
+
+    <p>A: 启用vertx的标准工作模式更强大,不过对业务人员要求就有些高了,目前还没开放业务接口出来。vertx标准的reactive工作模式,要求业务代码中不能有任何的block wait,sleep,大循环,总之,不能停下来。做到这一点,可以用少很多的CPU,提供更多的服务。</p>
+  </li>
+  <li>
+    <p><strong>Q: 一个服务提供者里面会有多个 appid 和微服务吗?什么场景会出现这种情况?</strong></p>
+
+    <p>A: 会,这里表达的是一个merge的概念。microservice.yaml文件,可能同时存在于jar,磁盘,命令行参数指定这几个地方,此时他们按优先级合并,是用于增加灵活性的。在jar里的是默认值,在此之外,还有环境变量,命令行参数,配置中心覆盖,提供多层定制。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb和服务中心是怎么交互的?</strong></p>
+
+    <p>A: 走rest,主要负责注册,取数据和心跳等;watch事件走websocket,watch事件是观察服务中心实例信息有没有变更。</p>
+  </li>
+  <li>
+    <p><strong>Q: 有类似dubbo那种治理中心吗?</strong></p>
+
+    <p>A: bizkeeper是一个handler,是治理的其中一个内容。治理可以通过handler扩展。</p>
+  </li>
+  <li>
+    <p><strong>Q: service path怎么理解?</strong></p>
+
+    <p>A: 每个微服务有一个servicePathManager,每一个schema将自己的path注册进去。</p>
+
+    <p><strong>Q: 这样浏览器能访问到吗?</strong></p>
+
+    <p>A: 可以,restful的URL路由,都是由service path搞定。</p>
+  </li>
+  <li>
+    <p><strong>Q: 契约生成时,需要强制带上版本号和语言吗?</strong></p>
+
+    <p>A: 契约是属于微服务的,微服务本来就有版本,但语言是不应该带上版本号的。应该契约要求与语言无关。契约“没有版本”,契约的版本体现在微服务上,实例能找到所属的微服务的版本,就能找到一个确定的契约。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceRegistry里的设计代码和Eureka很类似?</strong></p>
+
+    <p>A: 我们第一个版本就是在Spring Cloud的基础上做的 后来随着发展发现不够用了才逐渐自己做的一套,所以的确是在充分参考Eureka后设计的。</p>
+  </li>
+  <li>
+    <p><strong>Q: 有些rpc是netty调用redis实现,比直接netty转发优势在哪里?</strong></p>
+
+    <p>A: 可能是想用redis解决订阅发布吧。但这样意义也不大,之前也尝试过这么用,但后来都改成ServiceComb了。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如果同时引入了<code class="highlighter-rouge">transport-rest-servlet</code>和<code class="highlighter-rouge">transport-rest-vertx</code>的依赖,那么它怎么决定采用哪一个?</strong></p>
+
+    <p>A: 如果端口没被占用,就用vertx;如果被占用了,就用servlet。</p>
+  </li>
+  <li>
+    <p><strong>Q: qps流控设计时是出于什么场景考虑的?</strong></p>
+
+    <p>A: 限流有两个主要作用,第一通过给不同的消费者限流保证对一些重点服务的服务效果,第二防止雪崩效应。可根据服务的重要性来决定水管的粗细,ServiceComb是支持消费端限流和服务端限流两种限流方式的,消费端限流可以做到比较精细的控制。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如果服务端是链式调用,即类似a-&gt;b-&gt;c,那设置了qps 流控会不会造成水管粗细不均的事情?</strong></p>
+
+    <p>A: 一般采取的模式是先测量再设置。qps设置最终是结合整体业务需求来进行调控的,而不是就单个节点来进行设置。</p>
+  </li>
+  <li>
+    <p><strong>Q: 通过cse://serviceName/appPath调用服务失败,报错:java.lang.Error:not support def type:class io.swagger.models.properties xxx</strong></p>
+
+    <p>A: 检查consumer和provider依赖的java-chassis版本是否一致,如果不一致请修改并使用较新版本。</p>
+  </li>
+  <li>
+    <p><strong>Q: 发送rest请求时,出现如下报错:Bad Request,description:http:request body too large</strong></p>
+
+    <p>A: 检查Service Center是否老版本,如果是,则升级到最新版本。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如何在Json序列化忽略Bean中的指定属性</strong></p>
+
+    <p>A: 使用@JsonIgnore注解标记需要忽略的属性,注意修改完成后需重启Service Center。例如:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">OutputForTest</span><span class="o">{</span>
+<span class="nd">@JsonIgnore</span>
+<span class="kd">private</span> <span class="n">String</span> <span class="n">outputId</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
+<span class="kd">private</span> <span class="n">String</span> <span class="n">inputId</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
+<span class="o">...</span>
+<span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: 如何在用户自定义的handler中获取header中某个字段的值</strong></p>
+
+    <p>A: 在用户自定义的handler使用@ApiImplicitParams注解声明,使用invocation.getArgs()获取header的值。例如:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyHandler</span> <span class="kd">implements</span> <span class="n">Handler</span> <span class="o">{</span>
+  <span class="nd">@ApiImplicitParams</span><span class="o">({</span><span class="nd">@ApiImplicitParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"tester"</span><span class="o">,</span> <span class="n">dataType</span> <span class="o">=</span> <span class="s">"string"</span><span class="o">,</span> <span class="n">paramType</span> <span class="o">=</span> <span class="s">"header"</span><span class="o">)})</span>
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">handle</span><span class="o">(</span><span class="n">Invocation</span> <span class="n">invocation</span><span class="o">,</span> <span class="n">AsyncResponse</span> <span class="n">asyncResp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+    <span class="n">Object</span><span class="o">[]</span> <span class="n">args</span> <span class="o">=</span> <span class="n">invocation</span><span class="o">.</span><span class="na">getArgs</span><span class="o">();</span>
+    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _faqs/cn/faq.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_faqs/cn/faq.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/index.html
----------------------------------------------------------------------
diff --git a/content/cn/index.html b/content/cn/index.html
new file mode 100644
index 0000000..f5ab67e
--- /dev/null
+++ b/content/cn/index.html
@@ -0,0 +1,480 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。最新发布版本: Java开发包 v0.5.0 服务中心 v0.5.0 Saga v0.0.2 ">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Apache incubator ServiceComb">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/">
+
+
+
+  <meta property="og:description" content="ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。最新发布版本: Java开发包 v0.5.0 服务中心 v0.5.0 Saga v0.0.2 ">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Apache incubator ServiceComb">
+  <meta name="twitter:description" content="ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。最新发布版本: Java开发包 v0.5.0 服务中心 v0.5.0 Saga v0.0.2 ">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+  <meta property="og:image" content="/assets/images/servicecomb-banner-s.png">
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--splash">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+  
+
+
+
+
+
+
+
+<div class="page__hero--overlay"
+  style=" background-image: url('/assets/images/servicecomb-banner-s.png');"
+>
+  
+    <div class="wrapper">
+      <h1 class="page__title" itemprop="headline">
+        
+          Apache incubator ServiceComb
+
+        
+      </h1>
+      
+        <p class="page__lead">ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。
+
+<div class="excerpt-label">最新发布版本:</div>
+<div class="button-group"> <a href="https://github.com/ServiceComb/java-chassis/releases/tag/0.5.0" class="home-button btn--info">Java开发包 v0.5.0</a> <a href="https://github.com/ServiceComb/service-center/releases/tag/0.5.0" class="home-button btn--info">服务中心 v0.5.0</a> <a href="https://github.com/ServiceComb/ServiceComb-Saga/releases/tag/saga-0.0.2" class="home-button btn--info">Saga v0.0.2</a> </div>
+</p>
+      
+      
+      
+    </div>
+  
+  
+</div>
+
+
+
+<div role="main" class="home-page">
+  <article class="splash" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <meta itemprop="description" content="ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。最新发布版本: Java开发包 v0.5.0 服务中心 v0.5.0 Saga v0.0.2 ">
+    
+    
+
+    <section class="page__content" itemprop="text">
+      
+<div class="feature__wrapper">
+
+  
+
+    
+
+    <div class="feature__item--center">
+      <div class="archive__item">
+        
+
+        <div class="archive__item-body">
+          
+
+          
+            <div class="archive__item-excerpt">
+              <div class="excerpt-title">最新新闻</div>
+<ul> <li> <a href="/cn/docs/quick-start-dataconsistency/">号外: 现在ServiceComb提供了微服务场景下的数据一致性解决方案Saga!</a> </li> <li class="line-end"> <a href="/cn/docs/linuxcon-workshop-demo/">在新近结束的LinuxCon Beijing 2017大会上,ServiceComb举办了一次 workshop向大家展示如何使用ServiceComb构建一个云化应用。</a> </li> </ul>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+</div>
+
+<div class="normal-feature-row">
+
+
+<div class="feature__wrapper">
+
+  
+
+    
+
+    <div class="feature__item">
+      <div class="archive__item">
+        
+          <div class="archive__item-teaser">
+            <a href="/cn/users/service-contract/">
+            <img src="/assets/images/servicecomb-feature-openapi.png" alt="标准" />
+            </a>
+          </div>
+        
+
+        <div class="archive__item-body">
+          
+            <a class="archive__item-title" href="/cn/users/service-contract/">服务契约</a>
+          
+
+          
+            <div class="archive__item-excerpt">
+              <p>基于 <a href="https://www.openapis.org">OpenAPI</a> 的服务契约保障。</p>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+    
+
+    <div class="feature__item">
+      <div class="archive__item">
+        
+          <div class="archive__item-teaser">
+            <a href="/cn/docs/quick-start/">
+            <img src="/assets/images/servicecomb-feature-quickstart.png" alt="高效" />
+            </a>
+          </div>
+        
+
+        <div class="archive__item-body">
+          
+            <a class="archive__item-title" href="/cn/docs/quick-start/">快速开发</a>
+          
+
+          
+            <div class="archive__item-excerpt">
+              <p>支持多种服务框架,快速构建云化应用。</p>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+    
+
+    <div class="feature__item">
+      <div class="archive__item">
+        
+          <div class="archive__item-teaser">
+            
+            <img src="/assets/images/servicecomb-feature-multiLanguage.png" alt="多语言" />
+            
+          </div>
+        
+
+        <div class="archive__item-body">
+          
+            <a class="archive__item-title">多语言</a>
+          
+
+          
+            <div class="archive__item-excerpt">
+              <p>Java/Go框架级别支持。</p>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+</div>
+</div>
+
+    </section>
+  </article>
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/cn/home.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/cn/home.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/slides/index.html
----------------------------------------------------------------------
diff --git a/content/cn/slides/index.html b/content/cn/slides/index.html
new file mode 100644
index 0000000..3398493
--- /dev/null
+++ b/content/cn/slides/index.html
@@ -0,0 +1,423 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Workshop资料 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="The homepage of ServiceComb">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Workshop资料">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/slides/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/slides/">
+
+
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Workshop资料">
+  <meta name="twitter:description" content="The homepage of ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-06-20T11:02:20+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/slides/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Workshop资料">
+    
+    <meta itemprop="datePublished" content="June 20, 2017">
+    
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Workshop资料
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="linuxcon-beijing-2017-workshop">LinuxCon Beijing 2017 Workshop</h2>
+<ul>
+  <li><a href="/assets/slides/20170619/MSAPrinciple&amp;EcoSystem.pdf">微服务设计原则与生态系统</a></li>
+  <li><a href="/assets/slides/20170619/ServiceCombRoadMap.pdf">ServiceComb RoadMap</a></li>
+  <li><a href="/assets/slides/20170619/LinuxCon-Workshop-company.pdf">ServiceComb Workshop</a></li>
+</ul>
+
+<h2 id="arch-submit-20171209-北京">Arch Submit, 20171209, 北京</h2>
+<ul>
+  <li><a href="/assets/slides/20171209/PracticeOfServiceMeshOnHuaweiPublicCloud.pdf">Service Mesh在华为公有云的实践</a></li>
+</ul>
+
+<h2 id="servicecomb直播第一期-20171026"><a href="http://www.itdks.com/liveevent/detail/6618">ServiceComb直播第一期</a>, 20171026</h2>
+<ul>
+  <li><a href="/assets/slides/20171026/ServiceCombIntroduce1026.pdf">ServiceComb开源项目介绍</a></li>
+</ul>
+
+<h2 id="servicecomb直播第二期-20171102"><a href="http://www.itdks.com/liveevent/detail/6620">ServiceComb直播第二期</a>, 20171102</h2>
+<ul>
+  <li><a href="/assets/slides/20171102/ServiceComb_PastAndPresent.pdf">ServiceComb前世今生</a></li>
+</ul>
+
+<h2 id="servicecomb直播第三期-20171109"><a href="http://www.itdks.com/liveevent/detail/6621">ServiceComb直播第三期</a>, 20171109</h2>
+<ul>
+  <li><a href="/assets/slides/20171109/MicroservicePracticeOfHuaweiConsumerCloudBasedOnServiceComb.pdf">消费者云ServiceComb微服务实践</a></li>
+</ul>
+
+<h2 id="servicecomb-直播第四期-20171124"><a href="http://www.itdks.com/liveevent/detail/6622">ServiceComb 直播第四期</a>, 20171124</h2>
+<ul>
+  <li><a href="/assets/slides/20171124/LiveCodingServiceCombQuickStart.zip">ServiceComb快速入门&amp;&amp;在线Coding</a></li>
+</ul>
+
+<h2 id="servicecomb-直播第五期-20171207"><a href="http://www.itdks.com/liveevent/detail/6623">ServiceComb 直播第五期</a>, 20171207</h2>
+<ul>
+  <li><a href="/assets/slides/20171207/Uncover_ServiceComb_Design.pdf">ServiceComb设计揭秘</a></li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/cn/about-slides.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/cn/about-slides.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>