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"><groupId></span>io.servicecomb<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>spring-boot-starter-provider<span class="nt"></artifactId></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"><service_name></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"><</span><span class="n">xxxx</span><span class="o">.</span><span class="na">class</span><span class="o">></span> <span class="n">httpEntity</span> <span class="o">=</span> <span class="k">new</span> <span class="n">CseHttpEntity</span><span class="o"><>(</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"><</span><span class="n">String</span><span class="o">></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"><dependency></span> + <span class="nt"><groupId></span>io.servicecomb<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>provider-springmvc<span class="nt"></artifactId></span> + <span class="nt"><exclusions></span> + <span class="nt"><exclusion></span> + <span class="nt"><groupId></span>log4j<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>log4j<span class="nt"></artifactId></span> + <span class="nt"></exclusion></span> + <span class="nt"></exclusions></span> +<span class="nt"></dependency></span> +</code></pre> + </div> + </li> + <li> + <p>å¼å ¥log4j2çä¾èµ</p> + + <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt"><dependency></span> + <span class="nt"><groupId></span>org.apache.logging.log4j<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>log4j-slf4j-impl<span class="nt"></artifactId></span> +<span class="nt"></dependency></span> +<span class="nt"><dependency></span> + <span class="nt"><groupId></span>org.apache.logging.log4j<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>log4j-api<span class="nt"></artifactId></span> +<span class="nt"></dependency></span> +<span class="nt"><dependency></span> + <span class="nt"><groupId></span>org.apache.logging.log4j<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>log4j-core<span class="nt"></artifactId></span> +<span class="nt"></dependency></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"><?xml version="1.0" encoding="UTF-8"?></span> + <span class="c"><!--æ¥å¿çº§å«ä»¥åä¼å 级æåº: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --></span> + <span class="c"><!--Configurationåé¢çstatusï¼è¿ä¸ªç¨äºè®¾ç½®log4j2èªèº«å é¨çä¿¡æ¯è¾åºï¼å¯ä»¥ä¸è®¾ç½®ï¼å½è®¾ç½®ætraceæ¶ï¼ä½ ä¼çå°log4j2å é¨åç§è¯¦ç»è¾åº--></span> + <span class="c"><!--monitorIntervalï¼Log4jè½å¤èªå¨æ£æµä¿®æ¹é ç½® æ件åéæ°é ç½®æ¬èº«ï¼è®¾ç½®é´éç§æ°--></span> + <span class="nt"><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">></span> + <span class="c"><!--å å®ä¹ææçappender--></span> + <span class="nt"><appenders></span> + <span class="c"><!--è¿ä¸ªè¾åºæ§å¶å°çé ç½®--></span> + <span class="nt"><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">></span> + <span class="c"><!--è¾åºæ¥å¿çæ ¼å¼--></span> + <span class="nt"><PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/></span> + <span class="nt"></console></span> + <span class="c"><!--æ件ä¼æå°åºææä¿¡æ¯ï¼è¿ä¸ªlogæ¯æ¬¡è¿è¡ç¨åºä¼èªå¨æ¸ 空ï¼ç±appendå±æ§å³å®ï¼è¿ä¸ªä¹æºæç¨çï¼éå临æ¶æµè¯ç¨--></span> + <span class="nt"><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">></span> + <span class="nt"><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">/></span> + <span class="nt"></File></span> + <span class="c"><!-- è¿ä¸ªä¼æå°åºææçinfoå以ä¸çº§å«çä¿¡æ¯ï¼æ¯æ¬¡å¤§å°è¶ è¿sizeï¼åè¿size大å°çæ¥å¿ä¼èªå¨åå ¥æ年份-æ份建ç«çæ件夹ä¸é¢å¹¶è¿è¡å缩ï¼ä½ä¸ºåæ¡£--></span> + <span class="nt"><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">></span> + <span class="c"><!--æ§å¶å°åªè¾åºlevelå以ä¸çº§å«çä¿¡æ¯ï¼onMatchï¼ï¼å ¶ä»çç´æ¥æç»ï¼onMismatchï¼--></span> + <span class="nt"><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">/></span> + <span class="nt"><PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/></span> + <span class="nt"><Policies></span> + <span class="nt"><TimeBasedTriggeringPolicy/></span> + <span class="nt"><SizeBasedTriggeringPolicy</span> <span class="na">size=</span><span class="s">"100 MB"</span><span class="nt">/></span> + <span class="nt"></Policies></span> + <span class="nt"></RollingFile></span> + <span class="nt"><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">></span> + <span class="nt"><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">/></span> + <span class="nt"><PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/></span> + <span class="nt"><Policies></span> + <span class="nt"><TimeBasedTriggeringPolicy/></span> + <span class="nt"><SizeBasedTriggeringPolicy</span> <span class="na">size=</span><span class="s">"100 MB"</span><span class="nt">/></span> + <span class="nt"></Policies></span> + <span class="c"><!-- DefaultRolloverStrategyå±æ§å¦ä¸è®¾ç½®ï¼åé»è®¤ä¸ºæå¤åä¸æ件夹ä¸7个æ件ï¼è¿é设置äº20 --></span> + <span class="nt"><DefaultRolloverStrategy</span> <span class="na">max=</span><span class="s">"20"</span><span class="nt">/></span> + <span class="nt"></RollingFile></span> + <span class="nt"><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">></span> + <span class="nt"><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">/></span> + <span class="nt"><PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/></span> + <span class="nt"><Policies></span> + <span class="nt"><TimeBasedTriggeringPolicy/></span> + <span class="nt"><SizeBasedTriggeringPolicy</span> <span class="na">size=</span><span class="s">"100 MB"</span><span class="nt">/></span> + <span class="nt"></Policies></span> + <span class="nt"></RollingFile></span> + <span class="nt"></appenders></span> + <span class="c"><!--ç¶åå®ä¹loggerï¼åªæå®ä¹äºlogger并å¼å ¥çappenderï¼appenderæä¼çæ--></span> + <span class="nt"><loggers></span> + <span class="c"><!--è¿æ»¤æspringåmybatisçä¸äºæ ç¨çDEBUGä¿¡æ¯--></span> + <span class="nt"><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">></logger></span> + <span class="nt"><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">></logger></span> + <span class="nt"><root</span> <span class="na">level=</span><span class="s">"all"</span><span class="nt">></span> + <span class="nt"><appender-ref</span> <span class="na">ref=</span><span class="s">"Console"</span><span class="nt">/></span> + <span class="nt"><appender-ref</span> <span class="na">ref=</span><span class="s">"RollingFileInfo"</span><span class="nt">/></span> + <span class="nt"><appender-ref</span> <span class="na">ref=</span><span class="s">"RollingFileWarn"</span><span class="nt">/></span> + <span class="nt"><appender-ref</span> <span class="na">ref=</span><span class="s">"RollingFileError"</span><span class="nt">/></span> + <span class="nt"></root></span> + <span class="nt"></loggers></span> + <span class="nt"></configuration></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->b->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>© 2017 Apache incubator ServiceComb. ææ¯æ¥èªäº <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> & <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>© 2017 Apache incubator ServiceComb. ææ¯æ¥èªäº <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> & <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&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å¿«éå ¥é¨&&å¨çº¿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>© 2017 Apache incubator ServiceComb. ææ¯æ¥èªäº <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> & <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>