You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by GitBox <gi...@apache.org> on 2018/07/11 10:24:34 UTC

[GitHub] ralf0131 closed pull request #38: Add documentation for pinpoint

ralf0131 closed pull request #38: Add documentation for pinpoint
URL: https://github.com/apache/incubator-dubbo-website/pull/38
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/build/page.js b/build/page.js
index de07989..13e40ea 100644
--- a/build/page.js
+++ b/build/page.js
@@ -1 +1 @@
-!function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(e,n,i){for(var a,u,c=0,f=[];c<e.length;c++)u=e[c],o[u]&&f.push(o[u][0]),o[u]=0;for(a in n)Object.prototype.hasOwnProperty.call(n,a)&&(t[a]=n[a]);for(r&&r(e,n,i);f.length;)f.shift()()};var n={},o={5:0};e.e=function(t){function r(){u.onerror=u.onload=null,clearTimeout(c);var e=o[t];0!==e&&(e&&e[1](new Error("Loading chunk "+t+" failed.")),o[t]=void 0)}var n=o[t];if(0===n)return new Promise(function(t){t()});if(n)return n[2];var i=new Promise(function(e,r){n=o[t]=[e,r]});n[2]=i;var a=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,e.nc&&u.setAttribute("nonce",e.nc),u.src=e.p+""+{0:"4157bae0e963fadcb8f6",1:"4d064980eca0b316837d",2:"4965585aad0512047b35",3:"dc0e64fc4da0611e9cdc",4:"b128d786b03b56879ed7"}[t]+".js";var c=setTimeout(r,12e4);return u.onerror=u.onload=r,a.appendChild(u),i},e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="./build/",e.oe=function(t){throw console.error(t),t},e(e.s=5)}([function(t,e){t.exports=React},function(t,e){t.exports=ReactRouterDOM},function(t,e){t.exports=ReactDOM},function(t,e,r){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function o(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,r){function n(o,i){try{var a=e[o](i),u=a.value}catch(t){return void r(t)}if(!a.done)return Promise.resolve(u).then(function(t){n("next",t)},function(t){n("throw",t)});t(u)}return n("next")})}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function u(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t){return function(e){function r(t){i(this,r);var e=a(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,t));return e.state={component:null},e}return u(r,e),s(r,[{key:"componentDidMount",value:function(){function e(){return r.apply(this,arguments)}var r=o(l.default.mark(function e(){var r,n;return l.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t();case 2:r=e.sent,n=r.default,this.setState({component:n});case 5:case"end":return e.stop()}},e,this)}));return e}()},{key:"render",value:function(){var t=this.state.component;return t?p.default.createElement(t,this.props):null}}]),r}(h.Component)}Object.defineProperty(e,"__esModule",{value:!0});var f=r(11),l=n(f),s=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}();e.default=c;var h=r(0),p=n(h)},function(t,e){},function(t,e,r){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var u=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),c=r(0),f=n(c),l=r(2),s=n(l),h=r(1),p=r(3),d=n(p);r(4);var y=(0,d.default)(function(){return r.e(4).then(r.bind(null,10))}),m=(0,d.default)(function(){return r.e(2).then(r.bind(null,8))}),v=(0,d.default)(function(){return r.e(3).then(r.bind(null,6))}),g=(0,d.default)(function(){return r.e(1).then(r.bind(null,7))}),w=(0,d.default)(function(){return r.e(0).then(r.bind(null,9))}),b=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return a(e,t),u(e,[{key:"render",value:function(){return f.default.createElement(h.HashRouter,null,f.default.createElement(h.Switch,null,f.default.createElement(h.Redirect,{exact:!0,from:"/docs",to:"/docs/user/quick-start.md"}),f.default.createElement(h.Redirect,{exact:!0,from:"/docs/",to:"/docs/user/quick-start.md"}),f.default.createElement(h.Route,{exact:!0,path:"/",component:y}),f.default.createElement(h.Route,{exact:!0,path:"/community",component:m}),f.default.createElement(h.Route,{exact:!0,path:"/blog",component:v}),f.default.createElement(h.Route,{path:"/blog/*",component:g}),f.default.createElement(h.Route,{path:"/docs/*",component:w})))}}]),e}(f.default.Component);s.default.render(f.default.createElement(b,null),document.getElementById("root"))},,,,,,function(t,e,r){t.exports=r(12)},function(t,e,r){var n=function(){return this}()||Function("return this")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,i=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,t.exports=r(13),o)n.regeneratorRuntime=i;else try{delete n.regeneratorRuntime}catch(t){n.regeneratorRuntime=void 0}},function(t,e){!function(e){"use strict";function r(t,e,r,n){var i=e&&e.prototype instanceof o?e:o,a=Object.create(i.prototype),u=new p(n||[]);return a._invoke=f(t,r,u),a}function n(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function o(){}function i(){}function a(){}function u(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function c(t){function e(r,o,i,a){var u=n(t[r],t,o);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==typeof f&&g.call(f,"__await")?Promise.resolve(f.__await).then(function(t){e("next",t,i,a)},function(t){e("throw",t,i,a)}):Promise.resolve(f).then(function(t){c.value=t,i(c)},a)}a(u.arg)}function r(t,r){function n(){return new Promise(function(n,o){e(t,r,n,o)})}return o=o?o.then(n,n):n()}var o;this._invoke=r}function f(t,e,r){var o=j;return function(i,a){if(o===P)throw new Error("Generator is already running");if(o===R){if("throw"===i)throw a;return y()}for(r.method=i,r.arg=a;;){var u=r.delegate;if(u){var c=l(u,r);if(c){if(c===k)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===j)throw o=R,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=P;var f=n(t,e,r);if("normal"===f.type){if(o=r.done?R:L,f.arg===k)continue;return{value:f.arg,done:r.done}}"throw"===f.type&&(o=R,r.method="throw",r.arg=f.arg)}}}function l(t,e){var r=t.iterator[e.method];if(r===m){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=m,l(t,e),"throw"===e.method))return k;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return k}var o=n(r,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,k;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=m),e.delegate=null,k):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,k)}function s(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function h(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function p(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(s,this),this.reset(!0)}function d(t){if(t){var e=t[b];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,n=function e(){for(;++r<t.length;)if(g.call(t,r))return e.value=t[r],e.done=!1,e;return e.value=m,e.done=!0,e};return n.next=n}}return{next:y}}function y(){return{value:m,done:!0}}var m,v=Object.prototype,g=v.hasOwnProperty,w="function"==typeof Symbol?Symbol:{},b=w.iterator||"@@iterator",x=w.asyncIterator||"@@asyncIterator",E=w.toStringTag||"@@toStringTag",_="object"==typeof t,O=e.regeneratorRuntime;if(O)return void(_&&(t.exports=O));O=e.regeneratorRuntime=_?t.exports:{},O.wrap=r;var j="suspendedStart",L="suspendedYield",P="executing",R="completed",k={},T={};T[b]=function(){return this};var N=Object.getPrototypeOf,S=N&&N(N(d([])));S&&S!==v&&g.call(S,b)&&(T=S);var G=a.prototype=o.prototype=Object.create(T);i.prototype=G.constructor=a,a.constructor=i,a[E]=i.displayName="GeneratorFunction",O.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===i||"GeneratorFunction"===(e.displayName||e.name))},O.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,a):(t.__proto__=a,E in t||(t[E]="GeneratorFunction")),t.prototype=Object.create(G),t},O.awrap=function(t){return{__await:t}},u(c.prototype),c.prototype[x]=function(){return this},O.AsyncIterator=c,O.async=function(t,e,n,o){var i=new c(r(t,e,n,o));return O.isGeneratorFunction(e)?i:i.next().then(function(t){return t.done?t.value:i.next()})},u(G),G[E]="Generator",G[b]=function(){return this},G.toString=function(){return"[object Generator]"},O.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},O.values=d,p.prototype={constructor:p,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=m,this.done=!1,this.delegate=null,this.method="next",this.arg=m,this.tryEntries.forEach(h),!t)for(var e in this)"t"===e.charAt(0)&&g.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=m)},stop:function(){this.done=!0;var t=this.tryEntries[0],e=t.completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){function e(e,n){return i.type="throw",i.arg=t,r.next=e,n&&(r.method="next",r.arg=m),!!n}if(this.done)throw t;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n],i=o.completion;if("root"===o.tryLoc)return e("end");if(o.tryLoc<=this.prev){var a=g.call(o,"catchLoc"),u=g.call(o,"finallyLoc");if(a&&u){if(this.prev<o.catchLoc)return e(o.catchLoc,!0);if(this.prev<o.finallyLoc)return e(o.finallyLoc)}else if(a){if(this.prev<o.catchLoc)return e(o.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return e(o.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&g.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var o=n;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=t,i.arg=e,o?(this.method="next",this.next=o.finallyLoc,k):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),k},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),h(r),k}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;h(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:d(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=m),k}}}(function(){return this}()||Function("return this")())},function(t,e){t.exports=function(t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");var e=document.createElement("style");e.type="text/css";var r=document.getElementsByTagName("head")[0];return r.appendChild(e),e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t)),function(){r.removeChild(e)}}}]);
\ No newline at end of file
+!function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(e,n,i){for(var a,u,c=0,f=[];c<e.length;c++)u=e[c],o[u]&&f.push(o[u][0]),o[u]=0;for(a in n)Object.prototype.hasOwnProperty.call(n,a)&&(t[a]=n[a]);for(r&&r(e,n,i);f.length;)f.shift()()};var n={},o={5:0};e.e=function(t){function r(){u.onerror=u.onload=null,clearTimeout(c);var e=o[t];0!==e&&(e&&e[1](new Error("Loading chunk "+t+" failed.")),o[t]=void 0)}var n=o[t];if(0===n)return new Promise(function(t){t()});if(n)return n[2];var i=new Promise(function(e,r){n=o[t]=[e,r]});n[2]=i;var a=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,e.nc&&u.setAttribute("nonce",e.nc),u.src=e.p+""+{0:"ce0a0febbfa3f4588d12",1:"5a6160d1904d4b715bba",2:"2b4e297caa93bedd5375",3:"b04dbfd23d6672063557",4:"99445b9a8be52a5edcd2"}[t]+".js";var c=setTimeout(r,12e4);return u.onerror=u.onload=r,a.appendChild(u),i},e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="./build/",e.oe=function(t){throw console.error(t),t},e(e.s=5)}([function(t,e){t.exports=React},function(t,e){t.exports=ReactRouterDOM},function(t,e){t.exports=ReactDOM},function(t,e,r){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function o(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,r){function n(o,i){try{var a=e[o](i),u=a.value}catch(t){return void r(t)}if(!a.done)return Promise.resolve(u).then(function(t){n("next",t)},function(t){n("throw",t)});t(u)}return n("next")})}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function u(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t){return function(e){function r(t){i(this,r);var e=a(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,t));return e.state={component:null},e}return u(r,e),s(r,[{key:"componentDidMount",value:function(){function e(){return r.apply(this,arguments)}var r=o(l.default.mark(function e(){var r,n;return l.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t();case 2:r=e.sent,n=r.default,this.setState({component:n});case 5:case"end":return e.stop()}},e,this)}));return e}()},{key:"render",value:function(){var t=this.state.component;return t?p.default.createElement(t,this.props):null}}]),r}(h.Component)}Object.defineProperty(e,"__esModule",{value:!0});var f=r(11),l=n(f),s=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}();e.default=c;var h=r(0),p=n(h)},function(t,e){},function(t,e,r){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var u=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),c=r(0),f=n(c),l=r(2),s=n(l),h=r(1),p=r(3),d=n(p);r(4);var y=(0,d.default)(function(){return r.e(4).then(r.bind(null,10))}),m=(0,d.default)(function(){return r.e(2).then(r.bind(null,8))}),v=(0,d.default)(function(){return r.e(3).then(r.bind(null,6))}),g=(0,d.default)(function(){return r.e(1).then(r.bind(null,7))}),b=(0,d.default)(function(){return r.e(0).then(r.bind(null,9))}),w=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return a(e,t),u(e,[{key:"render",value:function(){return f.default.createElement(h.HashRouter,null,f.default.createElement(h.Switch,null,f.default.createElement(h.Redirect,{exact:!0,from:"/docs",to:"/docs/user/quick-start.md"}),f.default.createElement(h.Redirect,{exact:!0,from:"/docs/",to:"/docs/user/quick-start.md"}),f.default.createElement(h.Route,{exact:!0,path:"/",component:y}),f.default.createElement(h.Route,{exact:!0,path:"/community",component:m}),f.default.createElement(h.Route,{exact:!0,path:"/blog",component:v}),f.default.createElement(h.Route,{path:"/blog/*",component:g}),f.default.createElement(h.Route,{path:"/docs/*",component:b})))}}]),e}(f.default.Component);s.default.render(f.default.createElement(w,null),document.getElementById("root"))},,,,,,function(t,e,r){t.exports=r(12)},function(t,e,r){var n=function(){return this}()||Function("return this")(),o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,i=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,t.exports=r(13),o)n.regeneratorRuntime=i;else try{delete n.regeneratorRuntime}catch(t){n.regeneratorRuntime=void 0}},function(t,e){!function(e){"use strict";function r(t,e,r,n){var i=e&&e.prototype instanceof o?e:o,a=Object.create(i.prototype),u=new p(n||[]);return a._invoke=f(t,r,u),a}function n(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function o(){}function i(){}function a(){}function u(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function c(t){function e(r,o,i,a){var u=n(t[r],t,o);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==typeof f&&g.call(f,"__await")?Promise.resolve(f.__await).then(function(t){e("next",t,i,a)},function(t){e("throw",t,i,a)}):Promise.resolve(f).then(function(t){c.value=t,i(c)},a)}a(u.arg)}function r(t,r){function n(){return new Promise(function(n,o){e(t,r,n,o)})}return o=o?o.then(n,n):n()}var o;this._invoke=r}function f(t,e,r){var o=j;return function(i,a){if(o===P)throw new Error("Generator is already running");if(o===R){if("throw"===i)throw a;return y()}for(r.method=i,r.arg=a;;){var u=r.delegate;if(u){var c=l(u,r);if(c){if(c===k)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===j)throw o=R,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=P;var f=n(t,e,r);if("normal"===f.type){if(o=r.done?R:L,f.arg===k)continue;return{value:f.arg,done:r.done}}"throw"===f.type&&(o=R,r.method="throw",r.arg=f.arg)}}}function l(t,e){var r=t.iterator[e.method];if(r===m){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=m,l(t,e),"throw"===e.method))return k;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return k}var o=n(r,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,k;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=m),e.delegate=null,k):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,k)}function s(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function h(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function p(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(s,this),this.reset(!0)}function d(t){if(t){var e=t[w];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,n=function e(){for(;++r<t.length;)if(g.call(t,r))return e.value=t[r],e.done=!1,e;return e.value=m,e.done=!0,e};return n.next=n}}return{next:y}}function y(){return{value:m,done:!0}}var m,v=Object.prototype,g=v.hasOwnProperty,b="function"==typeof Symbol?Symbol:{},w=b.iterator||"@@iterator",x=b.asyncIterator||"@@asyncIterator",E=b.toStringTag||"@@toStringTag",_="object"==typeof t,O=e.regeneratorRuntime;if(O)return void(_&&(t.exports=O));O=e.regeneratorRuntime=_?t.exports:{},O.wrap=r;var j="suspendedStart",L="suspendedYield",P="executing",R="completed",k={},T={};T[w]=function(){return this};var N=Object.getPrototypeOf,S=N&&N(N(d([])));S&&S!==v&&g.call(S,w)&&(T=S);var G=a.prototype=o.prototype=Object.create(T);i.prototype=G.constructor=a,a.constructor=i,a[E]=i.displayName="GeneratorFunction",O.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===i||"GeneratorFunction"===(e.displayName||e.name))},O.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,a):(t.__proto__=a,E in t||(t[E]="GeneratorFunction")),t.prototype=Object.create(G),t},O.awrap=function(t){return{__await:t}},u(c.prototype),c.prototype[x]=function(){return this},O.AsyncIterator=c,O.async=function(t,e,n,o){var i=new c(r(t,e,n,o));return O.isGeneratorFunction(e)?i:i.next().then(function(t){return t.done?t.value:i.next()})},u(G),G[E]="Generator",G[w]=function(){return this},G.toString=function(){return"[object Generator]"},O.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},O.values=d,p.prototype={constructor:p,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=m,this.done=!1,this.delegate=null,this.method="next",this.arg=m,this.tryEntries.forEach(h),!t)for(var e in this)"t"===e.charAt(0)&&g.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=m)},stop:function(){this.done=!0;var t=this.tryEntries[0],e=t.completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){function e(e,n){return i.type="throw",i.arg=t,r.next=e,n&&(r.method="next",r.arg=m),!!n}if(this.done)throw t;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n],i=o.completion;if("root"===o.tryLoc)return e("end");if(o.tryLoc<=this.prev){var a=g.call(o,"catchLoc"),u=g.call(o,"finallyLoc");if(a&&u){if(this.prev<o.catchLoc)return e(o.catchLoc,!0);if(this.prev<o.finallyLoc)return e(o.finallyLoc)}else if(a){if(this.prev<o.catchLoc)return e(o.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return e(o.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&g.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var o=n;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=t,i.arg=e,o?(this.method="next",this.next=o.finallyLoc,k):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),k},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),h(r),k}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;h(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:d(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=m),k}}}(function(){return this}()||Function("return this")())},function(t,e){t.exports=function(t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");var e=document.createElement("style");e.type="text/css";var r=document.getElementsByTagName("head")[0];return r.appendChild(e),e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t)),function(){r.removeChild(e)}}}]);
\ No newline at end of file
diff --git a/docs/en-us/admin/ops/pinpoint.md b/docs/en-us/admin/ops/pinpoint.md
new file mode 100644
index 0000000..7e80abc
--- /dev/null
+++ b/docs/en-us/admin/ops/pinpoint.md
@@ -0,0 +1,411 @@
+# Tracking with Pinpoint
+
+After using Dubbo to serve or integrate applications, assuming that a service backstage log shows an exception and that the service is invoked by multiple applications, it is often difficult to determine which application is called, and what is the cause of the problem, so we need a set of distributed tracking systems to quickly locate the problem. Pinpoint can help us quickly locate problems (of course, there are more than one solution).
+
+## What is Pinpoint
+
+[Pinpoint](https://github.com/naver/pinpoint) is an APM (Application Performance Management) tool for large-scale distributed systems written in Java. Inspired by Dapper, Pinpoint provides a solution to help analyze the overall structure of the system and how components within them are interconnected by tracing transactions across distributed applications.
+
+You should definitely check Pinpoint out If you want to
+
+understand your application topology at a glance
+monitor your application in Real-Time
+gain code-level visibility to every transaction
+install APM Agents without changing a single line of code
+have minimal impact on the performance (approximately 3% increase in resource usage)
+
+### ServerMap
+
+Understand the topology of any distributed systems by visualizing how their components are interconnected. Clicking on a node reveals details about the component, such as its current status, and transaction count.
+
+### Realtime Active Thread Chart
+
+Monitor active threads inside applications in real-time.
+
+### Request/Response Scatter Chart
+
+Visualize request count and response patterns over time to identify potential problems. Transactions can be selected for additional detail by dragging over the chart.
+
+### CallStack
+
+Gain code-level visibility to every transaction in a distributed environment, identifying bottlenecks and points of failure in a single view.
+
+### Inspector
+
+View additional details on the application such as CPU usage, Memory/Garbage Collection, TPS, and JVM arguments.
+
+### Supported Modules (last updated 2018/04/01)
+
+* JDK 6+
+* Tomcat 6/7/8, Jetty 8/9, JBoss EAP 6, Resin 4, Websphere 6/7/8, Vertx 3.3/3.4/3.5
+* Spring, Spring Boot (Embedded Tomcat, Jetty)
+* Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient
+* Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER
+* ActiveMQ, RabbitMQ
+* MySQL, Oracle, MSSQL, CUBRID,POSTGRESQL, MARIA
+* Arcus, Memcached, Redis, CASSANDRA
+* iBATIS, MyBatis
+* DBCP, DBCP2, HIKARICP
+* gson, Jackson, Json Lib
+* log4j, Logback
+
+## Pinpoint and Dubbo
+
+### Quickstart Pinpoint
+
+[Quick start](http://naver.github.io/pinpoint/quickstart.html)(No neet to start TestApp)
+
+### Dubbo demo
+
+#### Create API module
+
+pom.xml
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.example</groupId>
+    <artifactId>demo-api</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+</project>
+```
+
+Create API interface:
+```
+package com.example.demoapi;
+
+public interface HelloService {
+    String sayHello(String name);
+}
+```
+
+#### Dubbo provider
+
+pom.xml
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>com.example</groupId>
+	<artifactId>demo-provider</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>demo-provider</name>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.0.3.RELEASE</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>sonatype-nexus-snapshots</id>
+			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</repository>
+	</repositories>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba.boot</groupId>
+			<artifactId>dubbo-spring-boot-starter</artifactId>
+			<version>0.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.example</groupId>
+			<artifactId>demo-api</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
+```
+
+1. `HelloService` interface:
+```java
+package com.example.demoprovider.provider;
+
+import com.alibaba.dubbo.config.annotation.Service;
+import com.example.demoapi.HelloService;
+
+@Service(version = "${demo.service.version}",
+        application = "${dubbo.application.id}",
+        protocol = "${dubbo.protocol.id}",
+        registry = "${dubbo.registry.id}")
+public class HelloServiceImpl implements HelloService {
+    static int i = 0;
+    @Override
+    public String sayHello(String name) {
+        i++;
+        if (i % 3 == 0) {
+            throw new RuntimeException("ex");
+        }
+        return "Hello " + name + "!";
+    }
+}
+```
+
+2. Spring Boot bootstrap:
+```java
+package com.example.demoprovider;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DemoProviderApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(DemoProviderApplication.class, args);
+	}
+}
+```
+
+3. `application.properties`:
+
+```properties
+# Spring boot application
+spring.application.name = dubbo-provider-demo
+server.port = 9090
+management.port = 9091
+
+# Service version
+demo.service.version = 1.0.0
+
+# Base packages to scan Dubbo Components (e.g @Service , @Reference)
+dubbo.scan.basePackages  = com.example.demoprovider
+
+# Dubbo Config properties
+## ApplicationConfig Bean
+dubbo.application.id = dubbo-provider-demo
+dubbo.application.name = dubbo-provider-demo
+
+## ProtocolConfig Bean
+dubbo.protocol.id = dubbo
+dubbo.protocol.name = dubbo
+dubbo.protocol.port = 12345
+
+## RegistryConfig Bean
+dubbo.registry.id = my-registry
+dubbo.registry.address = N/A
+```
+
+#### Dubbo consumer
+
+pom.xml
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>com.example</groupId>
+	<artifactId>demo-consumer</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>demo-consumer</name>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.0.3.RELEASE</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>sonatype-nexus-snapshots</id>
+			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</repository>
+	</repositories>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba.boot</groupId>
+			<artifactId>dubbo-spring-boot-starter</artifactId>
+			<version>0.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.example</groupId>
+			<artifactId>demo-api</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+				<configuration>
+					<classifier>exec</classifier>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
+```
+
+1. `@Reference` injection `HelloService`
+```java
+package com.example.democonsumer.controller;
+
+import com.alibaba.dubbo.config.annotation.Reference;
+import com.example.demoapi.HelloService;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class DemoConsumerController {
+    @Reference(version = "${demo.service.version}",
+            application = "${dubbo.application.id}",
+            url = "dubbo://<Real IP Address>:12345")
+    private HelloService helloService;
+
+    @RequestMapping("/sayHello")
+    public String sayHello(@RequestParam String name) {
+        return helloService.sayHello(name);
+    }
+}
+```
+
+2. Spring Boot bootstrap:
+```java
+package com.example.democonsumer;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DemoConsumerApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(DemoConsumerApplication.class, args);
+	}
+}
+```
+
+3. `application.properties`:
+```properties
+# Spring boot application
+spring.application.name=dubbo-consumer-demo
+server.port=8080
+management.port=8081
+
+# Service Version
+demo.service.version=1.0.0
+
+# Dubbo Config properties
+## ApplicationConfig Bean
+dubbo.application.id=dubbo-consumer-demo
+dubbo.application.name=dubbo-consumer-demo
+
+## ProtocolConfig Bean
+dubbo.protocol.id=dubbo
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=12345
+```
+
+### Using Pinpoint-agent to start `Dubbo provider` and `Dubbo consumer`
+
+1. Maven clean package
+```
+mvn clean package
+```
+
+2. Start provider
+```
+java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-provider -Dpinpoint.applicationName=DP target/demo-provider-0.0.1-SNAPSHOT.jar
+```
+
+3. Start consumer
+```
+java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-consumer -Dpinpoint.applicationName=DC target/demo-comsumer-0.0.1-SNAPSHOT-exec.jar
+```
+
+4. Access the consumer address to simulate user requests
+
+`http://localhost:8080/sayHello?name=ABC`
+
+## Using Pinpoint locate problems
+
+### Homepage
+
+![/admin-guide/images/pinpoint-home.png](../sources/images/pinpoint-home.png)
+
+> The user request here is double the number of requests for DubboProvider, because the favicon.ico icon request is recorded.
+
+### Call tree
+
+![/admin-guide/images/pinpoint-calltree.png](../sources/images/pinpoint-calltree.png)
+
+### Mixed view
+
+![/admin-guide/images/pinpoint-mixedview.png](../sources/images/pinpoint-mixedview.png)
+
+### Other
+
+The example simply simulates the provision and call of Dubbo, and does not carry out the application of other middleware such as database. For detailed use, please refer to the Pinpoint document.
diff --git a/docs/en-us/admin/sources/images/pinpoint-calltree.png b/docs/en-us/admin/sources/images/pinpoint-calltree.png
new file mode 100644
index 0000000..9bfe792
Binary files /dev/null and b/docs/en-us/admin/sources/images/pinpoint-calltree.png differ
diff --git a/docs/en-us/admin/sources/images/pinpoint-home.png b/docs/en-us/admin/sources/images/pinpoint-home.png
new file mode 100644
index 0000000..4cf1e28
Binary files /dev/null and b/docs/en-us/admin/sources/images/pinpoint-home.png differ
diff --git a/docs/en-us/admin/sources/images/pinpoint-mixedview.png b/docs/en-us/admin/sources/images/pinpoint-mixedview.png
new file mode 100644
index 0000000..4a4d08c
Binary files /dev/null and b/docs/en-us/admin/sources/images/pinpoint-mixedview.png differ
diff --git a/docs/zh-cn/admin/ops/pinpoint.md b/docs/zh-cn/admin/ops/pinpoint.md
new file mode 100644
index 0000000..af3dd9a
--- /dev/null
+++ b/docs/zh-cn/admin/ops/pinpoint.md
@@ -0,0 +1,415 @@
+# 使用Pinpoint做分布式跟踪
+
+在使用Dubbo进行服务化或者整合应用后,假设某个服务后台日志显示有异常,这个服务又被多个应用调用的情况下,我们通常很难判断是哪个应用调用的,问题的起因是什么,因此我们需要一套分布式跟踪系统来快速定位问题,Pinpoint可以帮助我们快速定位问题(当然,解决方案也不止这一种)。
+
+## 什么是Pinpoint(摘自[Pinpoint学习笔记](https://skyao.gitbooks.io/learning-pinpoint/))
+
+[Pinpoint](https://github.com/naver/pinpoint)是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统。
+仿照Google Dapper,Pinpoint通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系。
+
+> 注:对于各个模块之间的通讯英文原文中用的是transaction一词,但是我觉得如果翻译为"事务"容易引起误解,所以替换为"交互"或者"调用"这种比较直白的字眼。
+
+在使用上力图简单高效:
+
+* 安装agent,不需要修改哪怕一行代码
+* 最小化性能损失
+
+### 服务器地图(ServerMap)
+
+通过可视化分布式系统的模块和他们之间的相互联系来理解系统拓扑。点击某个节点会展示这个模块的详情,比如它当前的状态和请求数量。
+
+### 实时活动线程图表(Realtime Active Thread Chart)
+
+实时监控应用内部的活动线程。
+
+### 请求/应答分布图表(Request/Response Scatter Chart)
+
+长期可视化请求数量和应答模式来定位潜在问题。通过在图表上拉拽可以选择请求查看更多的详细信息。
+
+### 调用栈(CallStack)
+
+在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点。
+
+### 巡查(Inspector)
+
+查看应用上的其他详细信息,比如CPU使用率,内存/垃圾回收,TPS,和JVM参数。
+
+### 支持模块
+
+* JDK 6+
+* Tomcat 6/7/8, Jetty 8/9, JBoss EAP 6, Resin 4, Websphere 6/7/8, Vertx 3.3/3.4/3.5
+* Spring, Spring Boot (Embedded Tomcat, Jetty)
+* Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient
+* Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER
+* ActiveMQ, RabbitMQ
+* MySQL, Oracle, MSSQL, CUBRID,POSTGRESQL, MARIA
+* Arcus, Memcached, Redis, CASSANDRA
+* iBATIS, MyBatis
+* DBCP, DBCP2, HIKARICP
+* gson, Jackson, Json Lib
+* log4j, Logback
+* 自定义模块
+
+## Pinpoint与Dubbo的结合
+
+### 启动Pinpoint
+
+参考Pinpoint的[Quick start](http://naver.github.io/pinpoint/quickstart.html)搭建环境(不需要启动TestApp)
+
+### 准备Dubbo示例程序
+
+#### 创建API包
+
+pom.xml
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.example</groupId>
+    <artifactId>demo-api</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+</project>
+```
+
+新建API接口:
+```
+package com.example.demoapi;
+
+public interface HelloService {
+    String sayHello(String name);
+}
+```
+
+#### 实现 Dubbo 服务提供方
+
+pom.xml
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>com.example</groupId>
+	<artifactId>demo-provider</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>demo-provider</name>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.0.3.RELEASE</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>sonatype-nexus-snapshots</id>
+			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</repository>
+	</repositories>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba.boot</groupId>
+			<artifactId>dubbo-spring-boot-starter</artifactId>
+			<version>0.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.example</groupId>
+			<artifactId>demo-api</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
+```
+
+1. 实现 `HelloService` 接口:
+```java
+package com.example.demoprovider.provider;
+
+import com.alibaba.dubbo.config.annotation.Service;
+import com.example.demoapi.HelloService;
+
+@Service(version = "${demo.service.version}",
+        application = "${dubbo.application.id}",
+        protocol = "${dubbo.protocol.id}",
+        registry = "${dubbo.registry.id}")
+public class HelloServiceImpl implements HelloService {
+    static int i = 0;
+    @Override
+    public String sayHello(String name) {
+        i++;
+        if (i % 3 == 0) {
+            throw new RuntimeException("ex");
+        }
+        return "Hello " + name + "!";
+    }
+}
+```
+
+2. 编写 Spring Boot 引导程序:
+```java
+package com.example.demoprovider;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DemoProviderApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(DemoProviderApplication.class, args);
+	}
+}
+```
+
+3. 配置 `application.properties`:
+
+```properties
+# Spring boot application
+spring.application.name = dubbo-provider-demo
+server.port = 9090
+management.port = 9091
+
+# Service version
+demo.service.version = 1.0.0
+
+# Base packages to scan Dubbo Components (e.g @Service , @Reference)
+dubbo.scan.basePackages  = com.example.demoprovider
+
+# Dubbo Config properties
+## ApplicationConfig Bean
+dubbo.application.id = dubbo-provider-demo
+dubbo.application.name = dubbo-provider-demo
+
+## ProtocolConfig Bean
+dubbo.protocol.id = dubbo
+dubbo.protocol.name = dubbo
+dubbo.protocol.port = 12345
+
+## RegistryConfig Bean
+dubbo.registry.id = my-registry
+dubbo.registry.address = N/A
+```
+
+#### 实现 Dubbo 服务消费方
+
+pom.xml
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>com.example</groupId>
+	<artifactId>demo-consumer</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>demo-consumer</name>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.0.3.RELEASE</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>sonatype-nexus-snapshots</id>
+			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</repository>
+	</repositories>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba.boot</groupId>
+			<artifactId>dubbo-spring-boot-starter</artifactId>
+			<version>0.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.example</groupId>
+			<artifactId>demo-api</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+				<configuration>
+					<classifier>exec</classifier>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
+```
+
+1. 通过 `@Reference` 注入 `HelloService`
+```java
+package com.example.democonsumer.controller;
+
+import com.alibaba.dubbo.config.annotation.Reference;
+import com.example.demoapi.HelloService;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class DemoConsumerController {
+    @Reference(version = "${demo.service.version}",
+            application = "${dubbo.application.id}",
+            url = "dubbo://<注意,这里填写具体IP>:12345")
+    private HelloService helloService;
+
+    @RequestMapping("/sayHello")
+    public String sayHello(@RequestParam String name) {
+        return helloService.sayHello(name);
+    }
+}
+```
+> 直连提供者调用需要填写具体IP地址,如果写localhost也可以,但是会被Pinpoint额外识别为一个未知服务
+
+2. 编写 Spring Boot 引导程序(Web 应用):
+```java
+package com.example.democonsumer;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DemoConsumerApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(DemoConsumerApplication.class, args);
+	}
+}
+```
+
+3. 配置 `application.properties`:
+```properties
+# Spring boot application
+spring.application.name=dubbo-consumer-demo
+server.port=8080
+management.port=8081
+
+# Service Version
+demo.service.version=1.0.0
+
+# Dubbo Config properties
+## ApplicationConfig Bean
+dubbo.application.id=dubbo-consumer-demo
+dubbo.application.name=dubbo-consumer-demo
+
+## ProtocolConfig Bean
+dubbo.protocol.id=dubbo
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=12345
+```
+
+### 使用Pinpoint-agent启动服务提供方和服务消费方
+
+#### 启动服务提供方
+
+1. 编译打包
+```
+mvn clean package
+```
+
+2. 附加参数启动服务提供方
+```
+java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-provider -Dpinpoint.applicationName=DP target/demo-provider-0.0.1-SNAPSHOT.jar
+```
+
+3. 附加参数启动服务消费方
+```
+java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-consumer -Dpinpoint.applicationName=DC target/demo-comsumer-0.0.1-SNAPSHOT-exec.jar
+```
+
+4. 访问消费方地址模拟用户请求
+
+`http://localhost:8080/sayHello?name=ABC`
+
+## 使用Pinpoint快速定位问题
+
+### 首页
+
+![/admin-guide/images/pinpoint-home.png](../sources/images/pinpoint-home.png)
+
+> 这里的用户请求是请求DubboProvider数量的双倍,原因是记录了favicon.ico图标请求导致的
+
+### 调用树
+
+![/admin-guide/images/pinpoint-calltree.png](../sources/images/pinpoint-calltree.png)
+
+### 深入跟踪
+
+![/admin-guide/images/pinpoint-mixedview.png](../sources/images/pinpoint-mixedview.png)
+
+### 其他
+
+示例简单的模拟了Dubbo的提供和调用,并没有进行数据库等其他中间件的应用,详细使用请参照Pinpoint文档。
diff --git a/docs/zh-cn/admin/sources/images/pinpoint-calltree.png b/docs/zh-cn/admin/sources/images/pinpoint-calltree.png
new file mode 100644
index 0000000..c079cb8
Binary files /dev/null and b/docs/zh-cn/admin/sources/images/pinpoint-calltree.png differ
diff --git a/docs/zh-cn/admin/sources/images/pinpoint-home.png b/docs/zh-cn/admin/sources/images/pinpoint-home.png
new file mode 100644
index 0000000..fb61e04
Binary files /dev/null and b/docs/zh-cn/admin/sources/images/pinpoint-home.png differ
diff --git a/docs/zh-cn/admin/sources/images/pinpoint-mixedview.png b/docs/zh-cn/admin/sources/images/pinpoint-mixedview.png
new file mode 100644
index 0000000..cea9e5e
Binary files /dev/null and b/docs/zh-cn/admin/sources/images/pinpoint-mixedview.png differ
diff --git a/md_json/docs.json b/md_json/docs.json
index dd4f104..a5199af 100644
--- a/md_json/docs.json
+++ b/md_json/docs.json
@@ -48,6 +48,10 @@
       "filename": "admin/ops/introduction.md",
       "__html": "<h1>运维手册</h1>\n"
     },
+    {
+      "filename": "admin/ops/pinpoint.md",
+      "__html": "<h1>使用Pinpoint做分布式跟踪</h1>\n<p>在使用Dubbo进行服务化或者整合应用后,假设某个服务后台日志显示有异常,这个服务又被多个应用调用的情况下,我们通常很难判断是哪个应用调用的,问题的起因是什么,因此我们需要一套分布式跟踪系统来快速定位问题,Pinpoint可以帮助我们快速定位问题(当然,解决方案也不止这一种)。</p>\n<h2>什么是Pinpoint(摘自<a href=\"https://skyao.gitbooks.io/learning-pinpoint/\">Pinpoint学习笔记</a>)</h2>\n<p><a href=\"https://github.com/naver/pinpoint\">Pinpoint</a>是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统。\n仿照Google Dapper,Pinpoint通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系。</p>\n<blockquote>\n<p>注:对于各个模块之间的通讯英文原文中用的是transaction一词,但是我觉得如果翻译为&quot;事务&quot;容易引起误解,所以替换为&quot;交互&quot;或者&quot;调用&quot;这种比较直白的字眼。</p>\n</blockquote>\n<p>在使用上力图简单高效:</p>\n<ul>\n<li>安装agent,不需要修改哪怕一行代码</li>\n<li>最小化性能损失</li>\n</ul>\n<h3>服务器地图(ServerMap)</h3>\n<p>通过可视化分布式系统的模块和他们之间的相互联系来理解系统拓扑。点击某个节点会展示这个模块的详情,比如它当前的状态和请求数量。</p>\n<h3>实时活动线程图表(Realtime Active Thread Chart)</h3>\n<p>实时监控应用内部的活动线程。</p>\n<h3>请求/应答分布图表(Request/Response Scatter Chart)</h3>\n<p>长期可视化请求数量和应答模式来定位潜在问题。通过在图表上拉拽可以选择请求查看更多的详细信息。</p>\n<h3>调用栈(CallStack)</h3>\n<p>在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点。</p>\n<h3>巡查(Inspector)</h3>\n<p>查看应用上的其他详细信息,比如CPU使用率,内存/垃圾回收,TPS,和JVM参数。</p>\n<h3>支持模块</h3>\n<ul>\n<li>JDK 6+</li>\n<li>Tomcat 6/7/8, Jetty 8/9, JBoss EAP 6, Resin 4, Websphere 6/7/8, Vertx 3.3/3.4/3.5</li>\n<li>Spring, Spring Boot (Embedded Tomcat, Jetty)</li>\n<li>Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient</li>\n<li>Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER</li>\n<li>ActiveMQ, RabbitMQ</li>\n<li>MySQL, Oracle, MSSQL, CUBRID,POSTGRESQL, MARIA</li>\n<li>Arcus, Memcached, Redis, CASSANDRA</li>\n<li>iBATIS, MyBatis</li>\n<li>DBCP, DBCP2, HIKARICP</li>\n<li>gson, Jackson, Json Lib</li>\n<li>log4j, Logback</li>\n<li>自定义模块</li>\n</ul>\n<h2>Pinpoint与Dubbo的结合</h2>\n<h3>启动Pinpoint</h3>\n<p>参考Pinpoint的<a href=\"http://naver.github.io/pinpoint/quickstart.html\">Quick start</a>搭建环境(不需要启动TestApp)</p>\n<h3>准备Dubbo示例程序</h3>\n<h4>创建API包</h4>\n<p>pom.xml</p>\n<pre><code class=\"language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?</span>xml version=<span class=\"hljs-string\">\"1.0\"</span> encoding=<span class=\"hljs-string\">\"UTF-8\"</span><span class=\"hljs-meta\">?&gt;</span></span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project</span> <span class=\"hljs-attr\">xmlns</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0\"</span>\n         <span class=\"hljs-attr\">xmlns:xsi</span>=<span class=\"hljs-string\">\"http://www.w3.org/2001/XMLSchema-instance\"</span>\n         <span class=\"hljs-attr\">xsi:schemaLocation</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"</span>&gt;</span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">modelVersion</span>&gt;</span>4.0.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">modelVersion</span>&gt;</span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-api<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project</span>&gt;</span>\n</code></pre>\n<p>新建API接口:</p>\n<pre><code>package com.example.demoapi;\n\npublic interface HelloService {\n    String sayHello(String name);\n}\n</code></pre>\n<h4>实现 Dubbo 服务提供方</h4>\n<p>pom.xml</p>\n<pre><code class=\"language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?</span>xml version=<span class=\"hljs-string\">\"1.0\"</span> encoding=<span class=\"hljs-string\">\"UTF-8\"</span><span class=\"hljs-meta\">?&gt;</span></span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project</span> <span class=\"hljs-attr\">xmlns</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0\"</span> <span class=\"hljs-attr\">xmlns:xsi</span>=<span class=\"hljs-string\">\"http://www.w3.org/2001/XMLSchema-instance\"</span>\n\t<span class=\"hljs-attr\">xsi:schemaLocation</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">modelVersion</span>&gt;</span>4.0.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">modelVersion</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-provider<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">packaging</span>&gt;</span>jar<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">packaging</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">name</span>&gt;</span>demo-provider<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">name</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">parent</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-parent<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>2.0.3.RELEASE<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">relativePath</span>/&gt;</span> <span class=\"hljs-comment\">&lt;!-- lookup parent from repository --&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">parent</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">properties</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project.build.sourceEncoding</span>&gt;</span>UTF-8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project.build.sourceEncoding</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project.reporting.outputEncoding</span>&gt;</span>UTF-8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project.reporting.outputEncoding</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">java.version</span>&gt;</span>1.8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">java.version</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">properties</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repositories</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repository</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id</span>&gt;</span>sonatype-nexus-snapshots<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">id</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">url</span>&gt;</span>https://oss.sonatype.org/content/repositories/snapshots<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">url</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">releases</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">enabled</span>&gt;</span>false<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">enabled</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">releases</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">snapshots</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">enabled</span>&gt;</span>true<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">enabled</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">snapshots</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">repository</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">repositories</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependencies</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.alibaba.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>dubbo-spring-boot-starter<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.2.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-api<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-test<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">scope</span>&gt;</span>test<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">scope</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependencies</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">build</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugins</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-maven-plugin<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">plugin</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">plugins</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">build</span>&gt;</span>\n\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project</span>&gt;</span>\n</code></pre>\n<ol>\n<li>实现 <code>HelloService</code> 接口:</li>\n</ol>\n<pre><code class=\"language-java\"><span class=\"hljs-keyword\">package</span> com.example.demoprovider.provider;\n\n<span class=\"hljs-keyword\">import</span> com.alibaba.dubbo.config.annotation.Service;\n<span class=\"hljs-keyword\">import</span> com.example.demoapi.HelloService;\n\n<span class=\"hljs-meta\">@Service</span>(version = <span class=\"hljs-string\">\"${demo.service.version}\"</span>,\n        application = <span class=\"hljs-string\">\"${dubbo.application.id}\"</span>,\n        protocol = <span class=\"hljs-string\">\"${dubbo.protocol.id}\"</span>,\n        registry = <span class=\"hljs-string\">\"${dubbo.registry.id}\"</span>)\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">HelloServiceImpl</span> <span class=\"hljs-keyword\">implements</span> <span class=\"hljs-title\">HelloService</span> </span>{\n    <span class=\"hljs-keyword\">static</span> <span class=\"hljs-keyword\">int</span> i = <span class=\"hljs-number\">0</span>;\n    <span class=\"hljs-meta\">@Override</span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> String <span class=\"hljs-title\">sayHello</span><span class=\"hljs-params\">(String name)</span> </span>{\n        i++;\n        <span class=\"hljs-keyword\">if</span> (i % <span class=\"hljs-number\">3</span> == <span class=\"hljs-number\">0</span>) {\n            <span class=\"hljs-keyword\">throw</span> <span class=\"hljs-keyword\">new</span> RuntimeException(<span class=\"hljs-string\">\"ex\"</span>);\n        }\n        <span class=\"hljs-keyword\">return</span> <span class=\"hljs-string\">\"Hello \"</span> + name + <span class=\"hljs-string\">\"!\"</span>;\n    }\n}\n</code></pre>\n<ol start=\"2\">\n<li>编写 Spring Boot 引导程序:</li>\n</ol>\n<pre><code class=\"language-java\"><span class=\"hljs-keyword\">package</span> com.example.demoprovider;\n\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.SpringApplication;\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.autoconfigure.SpringBootApplication;\n\n<span class=\"hljs-meta\">@SpringBootApplication</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">DemoProviderApplication</span> </span>{\n\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">static</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">main</span><span class=\"hljs-params\">(String[] args)</span> </span>{\n\t\tSpringApplication.run(DemoProviderApplication.class, args);\n\t}\n}\n</code></pre>\n<ol start=\"3\">\n<li>配置 <code>application.properties</code>:</li>\n</ol>\n<pre><code class=\"language-properties\"># Spring boot application\nspring.application.name = dubbo-provider-demo\nserver.port = 9090\nmanagement.port = 9091\n\n# Service version\ndemo.service.version = 1.0.0\n\n# Base packages to scan Dubbo Components (e.g @Service , @Reference)\ndubbo.scan.basePackages  = com.example.demoprovider\n\n# Dubbo Config properties\n## ApplicationConfig Bean\ndubbo.application.id = dubbo-provider-demo\ndubbo.application.name = dubbo-provider-demo\n\n## ProtocolConfig Bean\ndubbo.protocol.id = dubbo\ndubbo.protocol.name = dubbo\ndubbo.protocol.port = 12345\n\n## RegistryConfig Bean\ndubbo.registry.id = my-registry\ndubbo.registry.address = N/A\n</code></pre>\n<h4>实现 Dubbo 服务消费方</h4>\n<p>pom.xml</p>\n<pre><code class=\"language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?</span>xml version=<span class=\"hljs-string\">\"1.0\"</span> encoding=<span class=\"hljs-string\">\"UTF-8\"</span><span class=\"hljs-meta\">?&gt;</span></span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project</span> <span class=\"hljs-attr\">xmlns</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0\"</span> <span class=\"hljs-attr\">xmlns:xsi</span>=<span class=\"hljs-string\">\"http://www.w3.org/2001/XMLSchema-instance\"</span>\n\t<span class=\"hljs-attr\">xsi:schemaLocation</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">modelVersion</span>&gt;</span>4.0.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">modelVersion</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-consumer<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">packaging</span>&gt;</span>jar<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">packaging</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">name</span>&gt;</span>demo-consumer<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">name</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">parent</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-parent<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>2.0.3.RELEASE<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">relativePath</span>/&gt;</span> <span class=\"hljs-comment\">&lt;!-- lookup parent from repository --&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">parent</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">properties</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project.build.sourceEncoding</span>&gt;</span>UTF-8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project.build.sourceEncoding</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project.reporting.outputEncoding</span>&gt;</span>UTF-8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project.reporting.outputEncoding</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">java.version</span>&gt;</span>1.8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">java.version</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">properties</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repositories</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repository</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id</span>&gt;</span>sonatype-nexus-snapshots<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">id</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">url</span>&gt;</span>https://oss.sonatype.org/content/repositories/snapshots<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">url</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">releases</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">enabled</span>&gt;</span>false<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">enabled</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">releases</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">snapshots</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">enabled</span>&gt;</span>true<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">enabled</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">snapshots</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">repository</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">repositories</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependencies</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-web<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.alibaba.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>dubbo-spring-boot-starter<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.2.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-api<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-test<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">scope</span>&gt;</span>test<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">scope</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependencies</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">build</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugins</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-maven-plugin<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">configuration</span>&gt;</span>\n\t\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">classifier</span>&gt;</span>exec<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">classifier</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">configuration</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">plugin</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">plugins</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">build</span>&gt;</span>\n\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project</span>&gt;</span>\n</code></pre>\n<ol>\n<li>通过 <code>@Reference</code> 注入 <code>HelloService</code></li>\n</ol>\n<pre><code class=\"language-java\"><span class=\"hljs-keyword\">package</span> com.example.democonsumer.controller;\n\n<span class=\"hljs-keyword\">import</span> com.alibaba.dubbo.config.annotation.Reference;\n<span class=\"hljs-keyword\">import</span> com.example.demoapi.HelloService;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RequestMapping;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RequestParam;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RestController;\n\n<span class=\"hljs-meta\">@RestController</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">DemoConsumerController</span> </span>{\n    <span class=\"hljs-meta\">@Reference</span>(version = <span class=\"hljs-string\">\"${demo.service.version}\"</span>,\n            application = <span class=\"hljs-string\">\"${dubbo.application.id}\"</span>,\n            url = <span class=\"hljs-string\">\"dubbo://&lt;注意,这里填写具体IP&gt;:12345\"</span>)\n    <span class=\"hljs-keyword\">private</span> HelloService helloService;\n\n    <span class=\"hljs-meta\">@RequestMapping</span>(<span class=\"hljs-string\">\"/sayHello\"</span>)\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> String <span class=\"hljs-title\">sayHello</span><span class=\"hljs-params\">(@RequestParam String name)</span> </span>{\n        <span class=\"hljs-keyword\">return</span> helloService.sayHello(name);\n    }\n}\n</code></pre>\n<blockquote>\n<p>直连提供者调用需要填写具体IP地址,如果写localhost也可以,但是会被Pinpoint额外识别为一个未知服务</p>\n</blockquote>\n<ol start=\"2\">\n<li>编写 Spring Boot 引导程序(Web 应用):</li>\n</ol>\n<pre><code class=\"language-java\"><span class=\"hljs-keyword\">package</span> com.example.democonsumer;\n\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.SpringApplication;\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.autoconfigure.SpringBootApplication;\n\n<span class=\"hljs-meta\">@SpringBootApplication</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">DemoConsumerApplication</span> </span>{\n\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">static</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">main</span><span class=\"hljs-params\">(String[] args)</span> </span>{\n\t\tSpringApplication.run(DemoConsumerApplication.class, args);\n\t}\n}\n</code></pre>\n<ol start=\"3\">\n<li>配置 <code>application.properties</code>:</li>\n</ol>\n<pre><code class=\"language-properties\"># Spring boot application\nspring.application.name=dubbo-consumer-demo\nserver.port=8080\nmanagement.port=8081\n\n# Service Version\ndemo.service.version=1.0.0\n\n# Dubbo Config properties\n## ApplicationConfig Bean\ndubbo.application.id=dubbo-consumer-demo\ndubbo.application.name=dubbo-consumer-demo\n\n## ProtocolConfig Bean\ndubbo.protocol.id=dubbo\ndubbo.protocol.name=dubbo\ndubbo.protocol.port=12345\n</code></pre>\n<h3>使用Pinpoint-agent启动服务提供方和服务消费方</h3>\n<h4>启动服务提供方</h4>\n<ol>\n<li>编译打包</li>\n</ol>\n<pre><code>mvn clean package\n</code></pre>\n<ol start=\"2\">\n<li>附加参数启动服务提供方</li>\n</ol>\n<pre><code>java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-provider -Dpinpoint.applicationName=DP target/demo-provider-0.0.1-SNAPSHOT.jar\n</code></pre>\n<ol start=\"3\">\n<li>附加参数启动服务消费方</li>\n</ol>\n<pre><code>java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-consumer -Dpinpoint.applicationName=DC target/demo-comsumer-0.0.1-SNAPSHOT-exec.jar\n</code></pre>\n<ol start=\"4\">\n<li>访问消费方地址模拟用户请求</li>\n</ol>\n<p><code>http://localhost:8080/sayHello?name=ABC</code></p>\n<h2>使用Pinpoint快速定位问题</h2>\n<h3>首页</h3>\n<p><img src=\"../sources/images/pinpoint-home.png\" alt=\"/admin-guide/images/pinpoint-home.png\"></p>\n<blockquote>\n<p>这里的用户请求是请求DubboProvider数量的双倍,原因是记录了favicon.ico图标请求导致的</p>\n</blockquote>\n<h3>调用树</h3>\n<p><img src=\"../sources/images/pinpoint-calltree.png\" alt=\"/admin-guide/images/pinpoint-calltree.png\"></p>\n<h3>深入跟踪</h3>\n<p><img src=\"../sources/images/pinpoint-mixedview.png\" alt=\"/admin-guide/images/pinpoint-mixedview.png\"></p>\n<h3>其他</h3>\n<p>示例简单的模拟了Dubbo的提供和调用,并没有进行数据库等其他中间件的应用,详细使用请参照Pinpoint文档。</p>\n"
+    },
     {
       "filename": "dev/README.md",
       "__html": "<p>这篇文档的目标读者是对 dubbo 源码、设计有兴趣的,或者有意愿加入 dubbo 开发的人群。主要涵盖了 dubbo 的框架设计、扩展机制、编码规范、版本管理、构建等话题。</p>\n"
@@ -706,6 +710,10 @@
       "filename": "admin/ops/introduction.md",
       "__html": "<h1>Ops manual</h1>\n"
     },
+    {
+      "filename": "admin/ops/pinpoint.md",
+      "__html": "<h1>Tracking with Pinpoint</h1>\n<p>After using Dubbo to serve or integrate applications, assuming that a service backstage log shows an exception and that the service is invoked by multiple applications, it is often difficult to determine which application is called, and what is the cause of the problem, so we need a set of distributed tracking systems to quickly locate the problem. Pinpoint can help us quickly locate problems (of course, there are more than one solution).</p>\n<h2>What is Pinpoint</h2>\n<p><a href=\"https://github.com/naver/pinpoint\">Pinpoint</a> is an APM (Application Performance Management) tool for large-scale distributed systems written in Java. Inspired by Dapper, Pinpoint provides a solution to help analyze the overall structure of the system and how components within them are interconnected by tracing transactions across distributed applications.</p>\n<p>You should definitely check Pinpoint out If you want to</p>\n<p>understand your application topology at a glance\nmonitor your application in Real-Time\ngain code-level visibility to every transaction\ninstall APM Agents without changing a single line of code\nhave minimal impact on the performance (approximately 3% increase in resource usage)</p>\n<h3>ServerMap</h3>\n<p>Understand the topology of any distributed systems by visualizing how their components are interconnected. Clicking on a node reveals details about the component, such as its current status, and transaction count.</p>\n<h3>Realtime Active Thread Chart</h3>\n<p>Monitor active threads inside applications in real-time.</p>\n<h3>Request/Response Scatter Chart</h3>\n<p>Visualize request count and response patterns over time to identify potential problems. Transactions can be selected for additional detail by dragging over the chart.</p>\n<h3>CallStack</h3>\n<p>Gain code-level visibility to every transaction in a distributed environment, identifying bottlenecks and points of failure in a single view.</p>\n<h3>Inspector</h3>\n<p>View additional details on the application such as CPU usage, Memory/Garbage Collection, TPS, and JVM arguments.</p>\n<h3>Supported Modules (last updated 2018/04/01)</h3>\n<ul>\n<li>JDK 6+</li>\n<li>Tomcat 6/7/8, Jetty 8/9, JBoss EAP 6, Resin 4, Websphere 6/7/8, Vertx 3.3/3.4/3.5</li>\n<li>Spring, Spring Boot (Embedded Tomcat, Jetty)</li>\n<li>Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient</li>\n<li>Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER</li>\n<li>ActiveMQ, RabbitMQ</li>\n<li>MySQL, Oracle, MSSQL, CUBRID,POSTGRESQL, MARIA</li>\n<li>Arcus, Memcached, Redis, CASSANDRA</li>\n<li>iBATIS, MyBatis</li>\n<li>DBCP, DBCP2, HIKARICP</li>\n<li>gson, Jackson, Json Lib</li>\n<li>log4j, Logback</li>\n</ul>\n<h2>Pinpoint and Dubbo</h2>\n<h3>Quickstart Pinpoint</h3>\n<p><a href=\"http://naver.github.io/pinpoint/quickstart.html\">Quick start</a>(No neet to start TestApp)</p>\n<h3>Dubbo demo</h3>\n<h4>Create API module</h4>\n<p>pom.xml</p>\n<pre><code class=\"language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?</span>xml version=<span class=\"hljs-string\">\"1.0\"</span> encoding=<span class=\"hljs-string\">\"UTF-8\"</span><span class=\"hljs-meta\">?&gt;</span></span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project</span> <span class=\"hljs-attr\">xmlns</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0\"</span>\n         <span class=\"hljs-attr\">xmlns:xsi</span>=<span class=\"hljs-string\">\"http://www.w3.org/2001/XMLSchema-instance\"</span>\n         <span class=\"hljs-attr\">xsi:schemaLocation</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"</span>&gt;</span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">modelVersion</span>&gt;</span>4.0.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">modelVersion</span>&gt;</span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-api<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project</span>&gt;</span>\n</code></pre>\n<p>Create API interface:</p>\n<pre><code>package com.example.demoapi;\n\npublic interface HelloService {\n    String sayHello(String name);\n}\n</code></pre>\n<h4>Dubbo provider</h4>\n<p>pom.xml</p>\n<pre><code class=\"language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?</span>xml version=<span class=\"hljs-string\">\"1.0\"</span> encoding=<span class=\"hljs-string\">\"UTF-8\"</span><span class=\"hljs-meta\">?&gt;</span></span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project</span> <span class=\"hljs-attr\">xmlns</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0\"</span> <span class=\"hljs-attr\">xmlns:xsi</span>=<span class=\"hljs-string\">\"http://www.w3.org/2001/XMLSchema-instance\"</span>\n\t<span class=\"hljs-attr\">xsi:schemaLocation</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">modelVersion</span>&gt;</span>4.0.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">modelVersion</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-provider<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">packaging</span>&gt;</span>jar<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">packaging</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">name</span>&gt;</span>demo-provider<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">name</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">parent</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-parent<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>2.0.3.RELEASE<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">relativePath</span>/&gt;</span> <span class=\"hljs-comment\">&lt;!-- lookup parent from repository --&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">parent</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">properties</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project.build.sourceEncoding</span>&gt;</span>UTF-8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project.build.sourceEncoding</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project.reporting.outputEncoding</span>&gt;</span>UTF-8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project.reporting.outputEncoding</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">java.version</span>&gt;</span>1.8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">java.version</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">properties</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repositories</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repository</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id</span>&gt;</span>sonatype-nexus-snapshots<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">id</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">url</span>&gt;</span>https://oss.sonatype.org/content/repositories/snapshots<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">url</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">releases</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">enabled</span>&gt;</span>false<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">enabled</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">releases</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">snapshots</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">enabled</span>&gt;</span>true<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">enabled</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">snapshots</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">repository</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">repositories</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependencies</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.alibaba.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>dubbo-spring-boot-starter<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.2.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-api<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-test<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">scope</span>&gt;</span>test<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">scope</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependencies</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">build</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugins</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-maven-plugin<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">plugin</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">plugins</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">build</span>&gt;</span>\n\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project</span>&gt;</span>\n</code></pre>\n<ol>\n<li><code>HelloService</code> interface:</li>\n</ol>\n<pre><code class=\"language-java\"><span class=\"hljs-keyword\">package</span> com.example.demoprovider.provider;\n\n<span class=\"hljs-keyword\">import</span> com.alibaba.dubbo.config.annotation.Service;\n<span class=\"hljs-keyword\">import</span> com.example.demoapi.HelloService;\n\n<span class=\"hljs-meta\">@Service</span>(version = <span class=\"hljs-string\">\"${demo.service.version}\"</span>,\n        application = <span class=\"hljs-string\">\"${dubbo.application.id}\"</span>,\n        protocol = <span class=\"hljs-string\">\"${dubbo.protocol.id}\"</span>,\n        registry = <span class=\"hljs-string\">\"${dubbo.registry.id}\"</span>)\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">HelloServiceImpl</span> <span class=\"hljs-keyword\">implements</span> <span class=\"hljs-title\">HelloService</span> </span>{\n    <span class=\"hljs-keyword\">static</span> <span class=\"hljs-keyword\">int</span> i = <span class=\"hljs-number\">0</span>;\n    <span class=\"hljs-meta\">@Override</span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> String <span class=\"hljs-title\">sayHello</span><span class=\"hljs-params\">(String name)</span> </span>{\n        i++;\n        <span class=\"hljs-keyword\">if</span> (i % <span class=\"hljs-number\">3</span> == <span class=\"hljs-number\">0</span>) {\n            <span class=\"hljs-keyword\">throw</span> <span class=\"hljs-keyword\">new</span> RuntimeException(<span class=\"hljs-string\">\"ex\"</span>);\n        }\n        <span class=\"hljs-keyword\">return</span> <span class=\"hljs-string\">\"Hello \"</span> + name + <span class=\"hljs-string\">\"!\"</span>;\n    }\n}\n</code></pre>\n<ol start=\"2\">\n<li>Spring Boot bootstrap:</li>\n</ol>\n<pre><code class=\"language-java\"><span class=\"hljs-keyword\">package</span> com.example.demoprovider;\n\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.SpringApplication;\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.autoconfigure.SpringBootApplication;\n\n<span class=\"hljs-meta\">@SpringBootApplication</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">DemoProviderApplication</span> </span>{\n\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">static</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">main</span><span class=\"hljs-params\">(String[] args)</span> </span>{\n\t\tSpringApplication.run(DemoProviderApplication.class, args);\n\t}\n}\n</code></pre>\n<ol start=\"3\">\n<li><code>application.properties</code>:</li>\n</ol>\n<pre><code class=\"language-properties\"># Spring boot application\nspring.application.name = dubbo-provider-demo\nserver.port = 9090\nmanagement.port = 9091\n\n# Service version\ndemo.service.version = 1.0.0\n\n# Base packages to scan Dubbo Components (e.g @Service , @Reference)\ndubbo.scan.basePackages  = com.example.demoprovider\n\n# Dubbo Config properties\n## ApplicationConfig Bean\ndubbo.application.id = dubbo-provider-demo\ndubbo.application.name = dubbo-provider-demo\n\n## ProtocolConfig Bean\ndubbo.protocol.id = dubbo\ndubbo.protocol.name = dubbo\ndubbo.protocol.port = 12345\n\n## RegistryConfig Bean\ndubbo.registry.id = my-registry\ndubbo.registry.address = N/A\n</code></pre>\n<h4>Dubbo consumer</h4>\n<p>pom.xml</p>\n<pre><code class=\"language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?</span>xml version=<span class=\"hljs-string\">\"1.0\"</span> encoding=<span class=\"hljs-string\">\"UTF-8\"</span><span class=\"hljs-meta\">?&gt;</span></span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project</span> <span class=\"hljs-attr\">xmlns</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0\"</span> <span class=\"hljs-attr\">xmlns:xsi</span>=<span class=\"hljs-string\">\"http://www.w3.org/2001/XMLSchema-instance\"</span>\n\t<span class=\"hljs-attr\">xsi:schemaLocation</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">modelVersion</span>&gt;</span>4.0.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">modelVersion</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-consumer<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">packaging</span>&gt;</span>jar<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">packaging</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">name</span>&gt;</span>demo-consumer<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">name</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">parent</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-parent<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>2.0.3.RELEASE<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">relativePath</span>/&gt;</span> <span class=\"hljs-comment\">&lt;!-- lookup parent from repository --&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">parent</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">properties</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project.build.sourceEncoding</span>&gt;</span>UTF-8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project.build.sourceEncoding</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project.reporting.outputEncoding</span>&gt;</span>UTF-8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project.reporting.outputEncoding</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">java.version</span>&gt;</span>1.8<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">java.version</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">properties</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repositories</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">repository</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id</span>&gt;</span>sonatype-nexus-snapshots<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">id</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">url</span>&gt;</span>https://oss.sonatype.org/content/repositories/snapshots<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">url</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">releases</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">enabled</span>&gt;</span>false<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">enabled</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">releases</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">snapshots</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">enabled</span>&gt;</span>true<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">enabled</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">snapshots</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">repository</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">repositories</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependencies</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-web<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.alibaba.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>dubbo-spring-boot-starter<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.2.0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>com.example<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>demo-api<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version</span>&gt;</span>0.0.1-SNAPSHOT<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">version</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-starter-test<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">scope</span>&gt;</span>test<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">scope</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependency</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">dependencies</span>&gt;</span>\n\n\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">build</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugins</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId</span>&gt;</span>org.springframework.boot<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">groupId</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId</span>&gt;</span>spring-boot-maven-plugin<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">artifactId</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">configuration</span>&gt;</span>\n\t\t\t\t\t<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">classifier</span>&gt;</span>exec<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">classifier</span>&gt;</span>\n\t\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">configuration</span>&gt;</span>\n\t\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">plugin</span>&gt;</span>\n\t\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">plugins</span>&gt;</span>\n\t<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">build</span>&gt;</span>\n\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">project</span>&gt;</span>\n</code></pre>\n<ol>\n<li><code>@Reference</code> injection <code>HelloService</code></li>\n</ol>\n<pre><code class=\"language-java\"><span class=\"hljs-keyword\">package</span> com.example.democonsumer.controller;\n\n<span class=\"hljs-keyword\">import</span> com.alibaba.dubbo.config.annotation.Reference;\n<span class=\"hljs-keyword\">import</span> com.example.demoapi.HelloService;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RequestMapping;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RequestParam;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RestController;\n\n<span class=\"hljs-meta\">@RestController</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">DemoConsumerController</span> </span>{\n    <span class=\"hljs-meta\">@Reference</span>(version = <span class=\"hljs-string\">\"${demo.service.version}\"</span>,\n            application = <span class=\"hljs-string\">\"${dubbo.application.id}\"</span>,\n            url = <span class=\"hljs-string\">\"dubbo://&lt;Real IP Address&gt;:12345\"</span>)\n    <span class=\"hljs-keyword\">private</span> HelloService helloService;\n\n    <span class=\"hljs-meta\">@RequestMapping</span>(<span class=\"hljs-string\">\"/sayHello\"</span>)\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> String <span class=\"hljs-title\">sayHello</span><span class=\"hljs-params\">(@RequestParam String name)</span> </span>{\n        <span class=\"hljs-keyword\">return</span> helloService.sayHello(name);\n    }\n}\n</code></pre>\n<ol start=\"2\">\n<li>Spring Boot bootstrap:</li>\n</ol>\n<pre><code class=\"language-java\"><span class=\"hljs-keyword\">package</span> com.example.democonsumer;\n\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.SpringApplication;\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.autoconfigure.SpringBootApplication;\n\n<span class=\"hljs-meta\">@SpringBootApplication</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">DemoConsumerApplication</span> </span>{\n\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">static</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">main</span><span class=\"hljs-params\">(String[] args)</span> </span>{\n\t\tSpringApplication.run(DemoConsumerApplication.class, args);\n\t}\n}\n</code></pre>\n<ol start=\"3\">\n<li><code>application.properties</code>:</li>\n</ol>\n<pre><code class=\"language-properties\"># Spring boot application\nspring.application.name=dubbo-consumer-demo\nserver.port=8080\nmanagement.port=8081\n\n# Service Version\ndemo.service.version=1.0.0\n\n# Dubbo Config properties\n## ApplicationConfig Bean\ndubbo.application.id=dubbo-consumer-demo\ndubbo.application.name=dubbo-consumer-demo\n\n## ProtocolConfig Bean\ndubbo.protocol.id=dubbo\ndubbo.protocol.name=dubbo\ndubbo.protocol.port=12345\n</code></pre>\n<h3>Using Pinpoint-agent to start <code>Dubbo provider</code> and <code>Dubbo consumer</code></h3>\n<ol>\n<li>Maven clean package</li>\n</ol>\n<pre><code>mvn clean package\n</code></pre>\n<ol start=\"2\">\n<li>Start provider</li>\n</ol>\n<pre><code>java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-provider -Dpinpoint.applicationName=DP target/demo-provider-0.0.1-SNAPSHOT.jar\n</code></pre>\n<ol start=\"3\">\n<li>Start consumer</li>\n</ol>\n<pre><code>java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-consumer -Dpinpoint.applicationName=DC target/demo-comsumer-0.0.1-SNAPSHOT-exec.jar\n</code></pre>\n<ol start=\"4\">\n<li>Access the consumer address to simulate user requests</li>\n</ol>\n<p><code>http://localhost:8080/sayHello?name=ABC</code></p>\n<h2>Using Pinpoint locate problems</h2>\n<h3>Homepage</h3>\n<p><img src=\"../sources/images/pinpoint-home.png\" alt=\"/admin-guide/images/pinpoint-home.png\"></p>\n<blockquote>\n<p>The user request here is double the number of requests for DubboProvider, because the favicon.ico icon request is recorded.</p>\n</blockquote>\n<h3>Call tree</h3>\n<p><img src=\"../sources/images/pinpoint-calltree.png\" alt=\"/admin-guide/images/pinpoint-calltree.png\"></p>\n<h3>Mixed view</h3>\n<p><img src=\"../sources/images/pinpoint-mixedview.png\" alt=\"/admin-guide/images/pinpoint-mixedview.png\"></p>\n<h3>Other</h3>\n<p>The example simply simulates the provision and call of Dubbo, and does not carry out the application of other middleware such as database. For detailed use, please refer to the Pinpoint document.</p>\n"
+    },
     {
       "filename": "dev/README.md",
       "__html": "<h1>dubbo-dev-book</h1>\n<p>This book dives into the design principles of dubbo, mainly covers the following topics: extension, coding styles, versio, build, etc.</p>\n"
diff --git a/site_config/docs.js b/site_config/docs.js
index 1cae3fa..6bd7acb 100644
--- a/site_config/docs.js
+++ b/site_config/docs.js
@@ -600,6 +600,10 @@ export default {
                             {
                                 title: 'Admin console operation guide',
                                 link: '/docs/admin/ops/dubbo-ops.md'
+                            },
+                            {
+                                title: 'Tracking with Pinpoint',
+                                link: '/docs/admin/ops/pinpoint.md'
                             }
                         ]
                     }
@@ -1251,6 +1255,10 @@ export default {
                             {
                                 title: '管理控制台运维',
                                 link: '/docs/admin/ops/dubbo-ops.md'
+                            },
+                            {
+                                title: '使用Pinpoint做分布式跟踪',
+                                link: '/docs/admin/ops/pinpoint.md'
                             }
                         ]
                     }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org