| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Protocol Reference-zh - Dubbo - Alibaba Open Sesame</title> |
| |
| |
| |
| |
| |
| |
| |
| |
| <meta http-equiv="X-UA-Compatible" content="IE=8"> |
| <meta charset="UTF-8"> |
| |
| <!-- Deprecated since 3.4. To be removed in a future version of Confluence; use AJS.Confluence.getContextPath() --> |
| <meta id="confluence-context-path" name="confluence-context-path" content="/wiki"> |
| <meta name="ajs-context-path" content="/wiki"> |
| <meta name="ajs-version-number" content="3.5.9"> |
| <meta name="ajs-build-number" content="2166"> |
| <meta id="atlassian-token" name="atlassian-token" content="c116db80711201b36e2067aa83f3b044c2d5a30e"> |
| <meta id="confluence-space-key" name="confluence-space-key" content="dubbo"> |
| <meta name="ajs-remote-user" content=""> |
| <meta name="ajs-static-resource-url-prefix" content="/wiki/s/en/2166/34/_"> |
| |
| <script type="text/javascript"> |
| // Deprecated global variables. To be removed in a future version of Confluence. |
| var contextPath = '/wiki'; |
| </script> |
| |
| |
| |
| <!-- include system css resources --> |
| <link type="text/css" rel="stylesheet" href="batch.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/26/_/download/superbatch/css/batch.css" media="all"> |
| <!--[if IE]> |
| <link type="text/css" rel="stylesheet" href="batch.css-ieonly=true.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/26/_/download/superbatch/css/batch.css?ieonly=true" media="all"> |
| <![endif]--> |
| <link type="text/css" rel="stylesheet" href="batch.css-media=print.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/26/_/download/superbatch/css/batch.css?media=print" media="print"> |
| <link type="text/css" rel="stylesheet" href="com.atlassian.confluence.ext.newcode-macro-plugin-syntaxhighlighter.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.9.10/_/download/batch/com.atlassian.confluence.ext.newcode-macro-plugin:syntaxhighlighter/com.atlassian.confluence.ext.newcode-macro-plugin:syntaxhighlighter.css" media="all"> |
| <link type="text/css" rel="stylesheet" href="com.atlassian.confluence.ext.newcode-macro-plugin-sh-theme-confluence.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.9.10/_/download/batch/com.atlassian.confluence.ext.newcode-macro-plugin:sh-theme-confluence/com.atlassian.confluence.ext.newcode-macro-plugin:sh-theme-confluence.css" media="all"> |
| <link type="text/css" rel="stylesheet" href="confluence-forms.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.0/_/download/resources/confluence.web.resources:aui-forms/confluence-forms.css" media="all"> |
| <!--[if IE]> |
| <link type="text/css" rel="stylesheet" href="confluence.web.resources-aui-forms.css-ieonly=true.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.0/_/download/batch/confluence.web.resources:aui-forms/confluence.web.resources:aui-forms.css?ieonly=true" media="all"> |
| <![endif]--> |
| <link type="text/css" rel="stylesheet" href="com.atlassian.confluence.plugins.share-page-mail-page-resources.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.8/_/download/batch/com.atlassian.confluence.plugins.share-page:mail-page-resources/com.atlassian.confluence.plugins.share-page:mail-page-resources.css" media="all"> |
| <link type="text/css" rel="stylesheet" href="confluence.web.resources-view-comment.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.0/_/download/batch/confluence.web.resources:view-comment/confluence.web.resources:view-comment.css" media="all"> |
| <!--[if IE]> |
| <link type="text/css" rel="stylesheet" href="confluence.web.resources-view-comment.css-ieonly=true.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.0/_/download/batch/confluence.web.resources:view-comment/confluence.web.resources:view-comment.css?ieonly=true" media="all"> |
| <![endif]--> |
| <link type="text/css" rel="stylesheet" href="confluence.macros.advanced-fancy-box.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.16/_/download/batch/confluence.macros.advanced:fancy-box/confluence.macros.advanced:fancy-box.css" media="all"> |
| <link type="text/css" rel="stylesheet" href="com.atlassian.confluence.plugins.drag-and-drop-support.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.0.16/_/download/batch/com.atlassian.confluence.plugins.drag-and-drop:support/com.atlassian.confluence.plugins.drag-and-drop:support.css" media="all"> |
| <link type="text/css" rel="stylesheet" href="com.atlassian.plugins.shortcuts.atlassian-shortcuts-module-shortcuts.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/0.8/_/download/batch/com.atlassian.plugins.shortcuts.atlassian-shortcuts-module:shortcuts/com.atlassian.plugins.shortcuts.atlassian-shortcuts-module:shortcuts.css" media="all"> |
| <link type="text/css" rel="stylesheet" href="com.atlassian.confluence.keyboardshortcuts-confluence-keyboard-shortcuts.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/3.5.9/_/download/batch/com.atlassian.confluence.keyboardshortcuts:confluence-keyboard-shortcuts/com.atlassian.confluence.keyboardshortcuts:confluence-keyboard-shortcuts.css" media="all"> |
| |
| <!-- end system css resources --> |
| |
| <link rel="stylesheet" href="combined.css-spaceKey=dubbo.css" tppabs="http://10.20.160.198/wiki/s/en/2166/34/3/_/styles/combined.css?spaceKey=dubbo" type="text/css"> |
| |
| <meta name="confluence-request-time" content="1392025727574"> |
| |
| <meta name="loggedInUsername" content=""> |
| <meta name="ajs-keyboardshortcut-hash" content="bf02a79603372a43d395a0a429bdf66"> |
| <!-- Deprecated since 3.4. To be removed in a future version of Confluence; use atl.header --> |
| <script type="text/x-template" title="share-content-popup"> |
| <form action="#" method="post" class="aui share-content-popup"> |
| <fieldset> |
| <label for="users">User name or email</label> |
| <div class="autocomplete-user-target"> |
| <input class="text autocomplete-sharepage" id="users" data-max="10" data-dropdown-target=".autocomplete-user-target" data-none-message="No matching user or email found"/> |
| </div> |
| <ol class="recipients"> |
| </ol> |
| <div><label for="note">Note</label></div> |
| <textarea class="textarea" id="note" placeholder="Add an optional note"/> |
| </fieldset> |
| <div class="button-panel"> |
| <div class="progress-messages-icon"></div> |
| <div class="progress-messages"> |
| </div> |
| <input class="button submit" type="submit" value="Share" disabled/> |
| <a class="close-dialog" href="#">Cancel</a> |
| </div> |
| </form> |
| </script> |
| |
| <script type="text/x-template" title="share-content-popup-recipient-username"> |
| <li data-username="{username}" style="display: none"> |
| <span> |
| <img src="{thumbnailLink.href}" title="{title}"> |
| <span>{title}</span> |
| <span class="remove-recipient"/> |
| </span> |
| </li> |
| </script> |
| |
| <script type="text/x-template" title="share-content-popup-recipient-email"> |
| <li data-email="{email}" style="display: none"> |
| <span> |
| <img src="{icon}" title="{email}"> |
| <span>{email}</span> |
| <span class="remove-recipient"/> |
| </span> |
| </li> |
| </script> |
| <meta name="ajs-use-keyboard-shortcuts" content="true"> |
| |
| <link rel="shortcut icon" href="/wiki/favicon.ico"> |
| <link rel="icon" type="image/png" href="/wiki/s/en/2166/34/_/images/logo/confluence_16.png"> |
| |
| <link rel="search" type="application/opensearchdescription+xml" href="/wiki/opensearch/osd.action" title="Alibaba Open Sesame"/> |
| |
| <!-- include system javascript resources --> |
| |
| |
| <script type="text/javascript" src="batch.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/26/_/download/superbatch/js/batch.js" ></script> |
| <script type="text/javascript" src="com.atlassian.confluence.ext.newcode-macro-plugin-syntaxhighlighter.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.9.10/_/download/batch/com.atlassian.confluence.ext.newcode-macro-plugin:syntaxhighlighter/com.atlassian.confluence.ext.newcode-macro-plugin:syntaxhighlighter.js" ></script> |
| <script type="text/javascript" src="com.atlassian.confluence.ext.newcode-macro-plugin-syntaxhighlighter-brushes.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.9.10/_/download/batch/com.atlassian.confluence.ext.newcode-macro-plugin:syntaxhighlighter-brushes/com.atlassian.confluence.ext.newcode-macro-plugin:syntaxhighlighter-brushes.js" ></script> |
| <script type="text/javascript" src="com.atlassian.confluence.plugins.share-page-mail-page-resources.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.8/_/download/batch/com.atlassian.confluence.plugins.share-page:mail-page-resources/com.atlassian.confluence.plugins.share-page:mail-page-resources.js" ></script> |
| <script type="text/javascript" src="confluence.macros.advanced-fancy-box.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.16/_/download/batch/confluence.macros.advanced:fancy-box/confluence.macros.advanced:fancy-box.js" ></script> |
| <script type="text/javascript" src="confluence.macros.advanced-thumbnail-images.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.16/_/download/batch/confluence.macros.advanced:thumbnail-images/confluence.macros.advanced:thumbnail-images.js" ></script> |
| <script type="text/javascript" src="com.atlassian.confluence.plugins.drag-and-drop-support.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.0.16/_/download/batch/com.atlassian.confluence.plugins.drag-and-drop:support/com.atlassian.confluence.plugins.drag-and-drop:support.js" ></script> |
| <script type="text/javascript" src="com.atlassian.confluence.plugins.drag-and-drop-drag-and-drop-for-view-content.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.0.16/_/download/batch/com.atlassian.confluence.plugins.drag-and-drop:drag-and-drop-for-view-content/com.atlassian.confluence.plugins.drag-and-drop:drag-and-drop-for-view-content.js" ></script> |
| <script type="text/javascript" src="com.atlassian.confluence.plugins.doctheme-splitter.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.9/_/download/batch/com.atlassian.confluence.plugins.doctheme:splitter/com.atlassian.confluence.plugins.doctheme:splitter.js" ></script> |
| <script type="text/javascript" src="com.atlassian.plugins.shortcuts.atlassian-shortcuts-module-shortcuts.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/0.8/_/download/batch/com.atlassian.plugins.shortcuts.atlassian-shortcuts-module:shortcuts/com.atlassian.plugins.shortcuts.atlassian-shortcuts-module:shortcuts.js" ></script> |
| <script type="text/javascript" src="com.atlassian.confluence.keyboardshortcuts-confluence-keyboard-shortcuts.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/3.5.9/_/download/batch/com.atlassian.confluence.keyboardshortcuts:confluence-keyboard-shortcuts/com.atlassian.confluence.keyboardshortcuts:confluence-keyboard-shortcuts.js" ></script> |
| <script type="text/javascript" src="legacy.confluence.web.resources-prototype.js" tppabs="http://10.20.160.198/wiki/s/en/2166/34/1.0/_/download/batch/legacy.confluence.web.resources:prototype/legacy.confluence.web.resources:prototype.js" ></script> |
| |
| |
| <!-- end system javascript resources --> |
| |
| |
| |
| |
| <link rel="canonical" href="http://code.alibabatech.com/wiki/display/dubbo/Protocol+Reference-zh"> |
| <link rel="shortlink" href="http://code.alibabatech.com/wiki/x/6gNq"> |
| <meta name="wikilink" content="[dubbo:Protocol Reference-zh]"> |
| <meta name="page-version" content="16"> |
| |
| </head> |
| |
| <body onload="placeFocus()" |
| id="com-atlassian-confluence" class="theme-default "> |
| <ul id="assistive-skip-links" class="assistive"> |
| <li><a href="#title-heading">Skip to content</a></li> |
| <li><a href="#breadcrumbs">Skip to breadcrumbs</a></li> |
| <li><a href="#header-menu-bar">Skip to header menu</a></li> |
| <li><a href="#navigation">Skip to action menu</a></li> |
| <li><a href="#quick-search-query">Skip to quick search</a></li> |
| </ul> |
| <div id="page"> |
| <div id="full-height-container"> |
| |
| |
| |
| <fieldset class="hidden parameters"> |
| <input type="hidden" id="shortcutDialogTip" value="Shortcut tip: Pressing <b>{shortcut}</b> also opens this dialog box"> |
| <input type="hidden" title="i18n.close.name" value="Close"> |
| <input type="hidden" title="i18n.cancel.name" value="Cancel"> |
| </fieldset><fieldset class="hidden parameters"> |
| <input type="hidden" id="statusDialogHeading" value="What are you working on?"> |
| <input type="hidden" id="statusDialogAccessibilityLabel" value="Enter your status (140 character limit)"> |
| <input type="hidden" id="statusDialogLatestLabel" value="Last update:"> |
| <input type="hidden" id="statusDialogUpdateButtonLabel" value="Update"> |
| <input type="hidden" id="statusDialogCancelButtonLabel" value="Cancel"> |
| </fieldset> |
| |
| <fieldset class="hidden parameters"> |
| <input type="hidden" id="globalSettingsAttachmentMaxSize" value="10485760"> |
| <input type="hidden" id="userLocale" value="en_GB"> |
| <input type="hidden" id="staticResourceUrlPrefix" value="/wiki/s/en/2166/34/_"> |
| <input type="hidden" id="contextPath" value="/wiki"> |
| </fieldset> |
| |
| |
| <div id="header" class="" style="display: none"> |
| <form id="quick-search" class="quick-search" method="get" action="http://10.20.160.198/wiki/dosearchsite.action"> |
| <fieldset> |
| <label class="assistive" for="quick-search-query">Quick Search</label> |
| <input class="quick-search-query" id="quick-search-query" type="text" accessKey="q" autocomplete="off" name="queryString" size="25" title="Quick Search" /> |
| <input class="quick-search-submit" id="quick-search-submit" type="submit" value="Search" /> |
| <div class="aui-dd-parent quick-nav-drop-down"><!-- Quick nav appears here --></div> |
| </fieldset> |
| <fieldset class="hidden parameters"> |
| <input type="hidden" id="quickNavEnabled" value="true" /> |
| </fieldset> |
| </form> |
| <ul id="header-menu-bar" class="ajs-menu-bar"> |
| |
| |
| <li class="normal ajs-menu-item"> |
| <a id="browse-menu-link" class="browse trigger ajs-menu-title" href="#"><span><span>Browse</span></span></a> <div class="assistive ajs-drop-down"> |
| <ul id="browse-menu-link-leading" class="section-leading first"> |
| <li> |
| |
| |
| |
| <a id="space-pages-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/listpages.action?key=dubbo \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/listpages.action?key=dubbo%27" tppabs="http://10.20.160.198/wiki/pages/listpages.action?key=dubbo" class="" title="Browse pages in the Dubbo space"> |
| <span>Pages</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="space-blogposts-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/viewrecentblogposts.action?key=dubbo \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/viewrecentblogposts.action?key=dubbo%27" tppabs="http://10.20.160.198/wiki/pages/viewrecentblogposts.action?key=dubbo" class="" title="Browse blogs in the Dubbo space"> |
| <span>Blog</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="space-labels-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/labels/listlabels-heatmap.action?key=dubbo \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/labels/listlabels-heatmap.action?key=dubbo%27" tppabs="http://10.20.160.198/wiki/labels/listlabels-heatmap.action?key=dubbo" class="" title="Browse labels in the Dubbo space"> |
| <span>Labels</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="space-attachments-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/spaces/listattachmentsforspace.action?key=dubbo \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/spaces/listattachmentsforspace.action?key=dubbo%27" tppabs="http://10.20.160.198/wiki/spaces/listattachmentsforspace.action?key=dubbo" class="" title="Browse attachments in the Dubbo space"> |
| <span>Attachments</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="space-mail-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/spaces/viewmailarchive.action?key=dubbo \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/spaces/viewmailarchive.action?key=dubbo%27" tppabs="http://10.20.160.198/wiki/spaces/viewmailarchive.action?key=dubbo" class="" title="Browse mail in the Dubbo space"> |
| <span>Mail</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="space-advanced-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/spaces/viewspacesummary.action?key=dubbo \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/spaces/viewspacesummary.action?key=dubbo%27" tppabs="http://10.20.160.198/wiki/spaces/viewspacesummary.action?key=dubbo" class="" title="Browse additional space functions in the Dubbo space"> |
| <span>Advanced</span></a> </li> |
| <li> |
| |
| |
| |
| <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/spaces/usage/report.action?key=dubbo \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/spaces/usage/report.action?key=dubbo%27" tppabs="http://10.20.160.198/wiki/spaces/usage/report.action?key=dubbo" class="" title=""> |
| <span>Activity</span></a> </li> |
| </ul> |
| <ul id="browse-menu-link-global" class="section-global"> |
| <li> |
| |
| |
| |
| <a id="whats-new-menu-link" href="javascript:if(confirm(%27http://docs.atlassian.com/confluence/docs-35/whatsnew/iframe \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://docs.atlassian.com/confluence/docs-35/whatsnew/iframe%27" tppabs="http://docs.atlassian.com/confluence/docs-35/whatsnew/iframe" class="" title=""> |
| <span>What’s New</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="people-directory-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/peopledirectory.action \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/peopledirectory.action%27" tppabs="http://10.20.160.198/wiki/peopledirectory.action" class="" title="Browse the Confluence people directory"> |
| <span>People Directory</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="space-directory-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/spacedirectory/view.action \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/spacedirectory/view.action%27" tppabs="http://10.20.160.198/wiki/spacedirectory/view.action" class="" title="Browse the Confluence space directory"> |
| <span>Space Directory</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="keyboard-shortcuts-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki%27" tppabs="http://10.20.160.198/wiki" class="" title="View available keyboard shortcuts"> |
| <span>Keyboard Shortcuts</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="gadget-directory-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki%27" tppabs="http://10.20.160.198/wiki" class="user-item administration-link" title="Browse gadgets provided by Confluence"> |
| <span>Confluence Gadgets</span></a> </li> |
| </ul> |
| </div> |
| </li> |
| |
| <li class="ajs-menu-item normal"> |
| |
| |
| |
| <a id="login-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/login.action?os_destination=%2Fdisplay%2Fdubbo%2FProtocol%2BReference-zh%3FshowChildren%3Dtrue \n\nThis file was not retrieved by Teleport Ultra, because it is linked too far away from its Starting Address. If you increase the in-domain depth setting for the Starting Address, this file will be queued for retrieval. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/login.action?os_destination=%2Fdisplay%2Fdubbo%2FProtocol%2BReference-zh%3FshowChildren%3Dtrue%27" tppabs="http://10.20.160.198/wiki/login.action?os_destination=%2Fdisplay%2Fdubbo%2FProtocol%2BReference-zh%3FshowChildren%3Dtrue" class="user-item login-link" title=""> |
| <span>Log In</span></a> </li> |
| </ul> |
| |
| |
| <ol id="breadcrumbs"> |
| |
| |
| <li class="first" > |
| <span><a href="javascript:if(confirm(%27http://10.20.160.198/wiki/dashboard.action \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/dashboard.action%27" tppabs="http://10.20.160.198/wiki/dashboard.action" title="Go to Dashboard">Dashboard</a></span> |
| </li> |
| |
| |
| <li> |
| <span><a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/dubbo \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/dubbo%27" tppabs="http://10.20.160.198/wiki/display/dubbo">Dubbo</a></span> |
| </li> |
| <li id="ellipsis" title="Show all breadcrumbs"><span><strong>…</strong></span></li> |
| |
| |
| <li class="hidden-crumb" > |
| <span><a href="Home-zh.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Home-zh">Home-zh</a></span> |
| </li> |
| |
| |
| <li> |
| <span><a href="User+Guide-zh.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/User+Guide-zh">User Guide-zh</a></span> |
| </li> |
| |
| |
| <li> |
| <span>Protocol Reference-zh</span> |
| </li> |
| </ol> |
| |
| </div><!-- \#header --> |
| |
| <div id="main" > |
| |
| |
| <div id="navigation" class="content-navigation view" style="display: none"> |
| <fieldset class="hidden parameters"> |
| <input type="hidden" id="pageId" value="6947818"> |
| </fieldset> |
| <ul class="ajs-menu-bar"> |
| |
| <li class="normal ajs-menu-item"> |
| <a id="add-menu-link" class="add trigger ajs-menu-title" href="#"><span><span>Add</span></span></a> <div class="assistive ajs-drop-down"> |
| <ul id="add-menu-link-page" class="section-page first"> |
| <li> |
| |
| |
| |
| <a id="add-comment-menu-link" href="Protocol+Reference-zh-showComments=true&showCommentArea=true.htm#addcomment" tppabs="http://10.20.160.198/wiki/display/dubbo/Protocol+Reference-zh?showComments=true&showCommentArea=true#addcomment" class="add-comment" title="Add a Comment"> |
| <span>Comment</span></a> </li> |
| </ul> |
| </div> |
| </li> |
| |
| <li class="normal ajs-menu-item"> |
| <a id="action-menu-link" class="action trigger ajs-menu-title" href="#"><span><span>Tools</span></span></a> <div class="assistive ajs-drop-down"> |
| <ul id="action-menu-link-primary" class="section-primary first"> |
| <li> |
| |
| |
| |
| <a id="view-attachments-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/viewpageattachments.action?pageId=6947818 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/viewpageattachments.action?pageId=6947818%27" tppabs="http://10.20.160.198/wiki/pages/viewpageattachments.action?pageId=6947818" class="action-view-attachments" accessKey="a" title="View Attachments"> |
| <span><u>A</u>ttachments (0)</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="action-view-history-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/viewpreviousversions.action?pageId=6947818 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/viewpreviousversions.action?pageId=6947818%27" tppabs="http://10.20.160.198/wiki/pages/viewpreviousversions.action?pageId=6947818" class="action-view-history" title=""> |
| <span>Page History</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="action-page-permissions-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/viewinfo.action?pageId=6947818 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/viewinfo.action?pageId=6947818%27" tppabs="http://10.20.160.198/wiki/pages/viewinfo.action?pageId=6947818" class="action-page-permissions" title="Edit restrictions"> |
| <span>Restrictions</span></a> </li> |
| </ul> |
| <ul id="action-menu-link-secondary" class="section-secondary"> |
| <li> |
| |
| |
| |
| <a id="view-page-info-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/viewinfo.action?pageId=6947818 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/viewinfo.action?pageId=6947818%27" tppabs="http://10.20.160.198/wiki/pages/viewinfo.action?pageId=6947818" class="action-view-info" title=""> |
| <span>Info</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="link-to-page-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/viewinfo.action?pageId=6947818 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/viewinfo.action?pageId=6947818%27" tppabs="http://10.20.160.198/wiki/pages/viewinfo.action?pageId=6947818" class="" title="Link to this Page"> |
| <span>Link to this Page…</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="view-in-hierarchy-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/listpages-dirview.action?key=dubbo&openId=6947818 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/listpages-dirview.action?key=dubbo&openId=6947818#selectedPageInHierarchy%27" tppabs="http://10.20.160.198/wiki/pages/listpages-dirview.action?key=dubbo&openId=6947818#selectedPageInHierarchy" class="" title=""> |
| <span>View in Hierarchy</span></a> </li> |
| <li> |
| |
| |
| |
| <a id="action-view-source-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/viewpagesrc.action?pageId=6947818 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/viewpagesrc.action?pageId=6947818%27" tppabs="http://10.20.160.198/wiki/pages/viewpagesrc.action?pageId=6947818" class="action-view-source popup-link" title=""> |
| <span>View Wiki Markup</span></a> </li> |
| </ul> |
| </div> |
| </li> |
| </ul> |
| </div> |
| |
| |
| <h1 id="title-heading" class="pagetitle" style="display: none"> |
| <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/dubbo \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/dubbo%27" tppabs="http://10.20.160.198/wiki/display/dubbo"><img class="logo space custom" src="dubbo-version=5&modificationDate=1320723683000.jpg" tppabs="http://10.20.160.198/wiki/download/attachments/6324241/dubbo?version=5&modificationDate=1320723683000" alt=""></a> |
| |
| </h1> |
| |
| |
| |
| <div id="content" class="page view"> |
| |
| |
| |
| |
| <div id="link-to-page-fields" class="hidden parameters"> |
| <input type="hidden" id="linkToThisPageHeading" value="Link to this Page"> |
| <input type="hidden" id="linkToThisPageLink" value="Link"> |
| <input type="hidden" id="linkToThisPageTinyLink" value="Tiny Link"> |
| <input type="hidden" id="linkToThisPageWikiMarkup" value="Wiki Markup"> |
| <input type="hidden" id="linkToThisPageClose" value="Close"> |
| </div> |
| <fieldset class="hidden parameters"> |
| <input type="hidden" title="movePageDialogViewPageTitle" value="Move Page – ‘Protocol Reference-zh’"> |
| <input type="hidden" title="movePageDialogEditPageTitle" value="Set Page Location"> |
| <input type="hidden" title="movePageDialogMoveButton" value="Move"> |
| <input type="hidden" title="movePageDialogCancelButton" value="Cancel"> |
| <input type="hidden" title="movePageDialogBrowsePanelTip" value="Click to select the new parent page for this page and its children."> |
| <input type="hidden" title="movePageDialogSearchPanel" value="Search"> |
| <input type="hidden" title="movePageDialogHistoryPanel" value="Recently Viewed"> |
| <input type="hidden" title="movePageDialogHistoryNoResults" value="There were no recently viewed pages found."> |
| <input type="hidden" title="movePageDialogLocationPanel" value="Known Location"> |
| <input type="hidden" title="movePageDialogLocationNotFound" value="The specified page was not found."> |
| <input type="hidden" title="movePageDialogBrowsePanel" value="Browse"> |
| <input type="hidden" title="movePageDialogPanelLoadErrorMsg" value="Error reading the panel content from the server."> |
| <input type="hidden" title="movePageDialogPanelLoadErrorTip" value="You could try reloading the page and launching the dialog again."> |
| <input type="hidden" title="movePageDialogPanelLoadErrorStatus" value="HTTP Status"> |
| <input type="hidden" title="movePageDialogNoSelectionErrorMsg" value="You must make a selection in the tree before you can move the page."> |
| <input type="hidden" title="movePageDialogSearchError" value="Failed to retrieve search results from the server."> |
| <input type="hidden" title="movePageDialogSearchNoResults" value="There were no pages found containing <b>{0}</b>."> |
| <input type="hidden" title="movePageDialogSearchResultCount" value="Showing <b>{0}</b>-<b>{1}</b> of <b>{2}</b> pages containing <b>{3}</b>."> |
| <input type="hidden" title="movePageDialogMoveFailed" value="Move failed. There was a problem contacting the server."> |
| <input type="hidden" title="movePageDialogCannotChangeSpace" value="You cannot move this page to another space because you do not have permission to remove it from this space."> |
| <input type="hidden" title="pageTitle" value="Protocol Reference-zh"/> |
| <input type="hidden" title="parentPageTitle" value="User Guide-zh"/> |
| <input type="hidden" title="fromPageTitle" value=""/> |
| <input type="hidden" title="spaceKey" value="dubbo"/> |
| <input type="hidden" title="spaceName" value="Dubbo"/> |
| <input type="hidden" title="movePageDialogInvalidLocation" value="You cannot move a page to be underneath itself or its children."/> |
| <input type="hidden" title="movePageDialogOrderingTitle" value="Page Ordering"/> |
| <input type="hidden" title="movePageDialogBackButton" value="Back"/> |
| <input type="hidden" title="movePageDialogMoveAndOrderButton" value="Reorder"/> |
| <input type="hidden" title="movePageDialogNextButton" value="Move"/> |
| </fieldset> |
| |
| <script type="text/x-template" title="movePageDialog"> |
| <div class="row information"> |
| <div class="inner"> |
| <div class="element"> |
| Specify the new parent page for this page and its children by space and title. |
| </div> |
| </div> |
| </div> |
| <div class="form"> |
| <fieldset> |
| |
| |
| <legend class="assistive"><span>Change the Parent Page to a Known Page</span></legend> |
| <div class="row"> |
| <label for="new-space">New space:</label> |
| <div class="value new-space-value"> |
| <input id="new-space-key" name="new-space-key" type="hidden" value="dubbo"> |
| <span class="space-input"> |
| <input id="new-space" name="new-space" value="Dubbo" disabled="disabled"> |
| </span> |
| <span class="description warning">You cannot move this page to another space because you do not have permission to remove it from this space.</span> |
| <div class="new-space-dropdown aui-dd-parent autocomplete"></div> |
| </div> |
| </div> |
| <div class="row"> |
| <label for="new-parent-page">New parent page:</label> |
| <div class="value new-parent-page-value"> |
| <span class="page-input"> |
| <input id="new-parent-page" name="new-parent-page" value="User Guide-zh"> |
| </span> |
| <span class="description">Start typing a page title to see a list of suggestions.</span> |
| <div class="new-parent-page-dropdown aui-dd-parent autocomplete"></div> |
| </div> |
| </div> |
| </fieldset> |
| </div> |
| <div class="location-info"> |
| <div class="row"> |
| <label>Current location:</label> |
| <div class="value breadcrumbs-container"> |
| <div class="breadcrumbs-line"> |
| <ul id="current-parent-breadcrumbs" class="breadcrumbs"> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="row"> |
| <label>New location:</label> |
| <div class="value breadcrumbs-container"> |
| <div class="breadcrumbs-line"> |
| <ul id="new-parent-breadcrumbs" class="breadcrumbs"> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| </script> |
| <script type="text/x-template" title="movePageErrors"> |
| <div id="move-errors" class="hidden warning"></div> |
| </script> |
| <script type="text/x-template" title="movePageBreadcrumb"> |
| <li><a class="{2}" title="{3}" tabindex="-1"><span>{0}</span></a></li> |
| </script> |
| <script type="text/x-template" title="movePageBreadcrumbLoading"> |
| <li class="loading"><span>Loading breadcrumbs…</span></li> |
| </script> |
| <script type="text/x-template" title="movePageBreadcrumbError"> |
| <li class="warning last"><span>Error retrieving breadcrumbs.</span></li> |
| </script> |
| <script type="text/x-template" title="movePageNoMatchingPages"> |
| <ol><li><span class="warning">No matching pages found.</span></li></ol> |
| </script> |
| <script type="text/x-template" title="movePageNoMatchingSpaces"> |
| <ol><li><span class="warning">No matching spaces found.</span></li></ol> |
| </script> |
| |
| <script type="text/x-template" title="movePageSearchPanel"> |
| <div class="row information"> |
| <div class="inner"> |
| <div class="element"> |
| Search for and select the new parent page for this page and its children. |
| </div> |
| </div> |
| </div> |
| <div id="move-page-search-container" class="row"> |
| <div class="search-form"> |
| <fieldset> |
| |
| |
| <legend class="assistive"><span>Search for a New Parent Page</span></legend> |
| |
| |
| <label for="move-page-search-query" class="assistive">Search keywords</label> |
| <input class="search-query" id="move-page-search-query"> |
| |
| |
| <label for="move-page-search-space" class="assistive">Search in space</label> |
| <select id="move-page-search-space" class="search-space" disabled="disabled"> |
| <option value="dubbo" selected="selected">Dubbo</option> |
| </select> |
| <input type="button" value="Search"> |
| <div class="description warning">You cannot move this page to another space because you do not have permission to remove it from this space.</div> |
| </fieldset> |
| </div> |
| <div class="search-results"> |
| </div> |
| </div> |
| </script> |
| <script type="text/x-template" title="movePageSearchResultsLoading"> |
| <div class="searching">Searching…</div> |
| </script> |
| |
| <script type="text/x-template" title="movePageHistoryPanel"> |
| <div class="row information"> |
| <div class="inner"> |
| <div class="element"> |
| Select the new parent page for this page and its children from your history. |
| </div> |
| </div> |
| </div> |
| <div id="move-page-search-container" class="row"> |
| <div class="search-results"> |
| </div> |
| </div> |
| </script> |
| <script type="text/x-template" title="movePageHistoryLoading"> |
| <div class="searching">Loading…</div> |
| </script> |
| <script type="text/x-template" title="movePageBrowsePanel"> |
| <div class="row information"> |
| <div class="inner"> |
| <div class="element"> |
| Click to select the new parent page for this page and its children. |
| </div> |
| </div> |
| </div> |
| <div class="tree"></div> |
| </script> |
| <script type="text/x-template" title="movePagePanelLoading"> |
| <span>Loading…</span> |
| </script> |
| <script type="text/x-template" title="movePageBrowsePanelSpace"> |
| <ul><li id='tree-root-node-item' class='root-node-list-item'><a class='root-node' href='#'>{0}</a></li></ul> |
| </script> |
| <script type="text/x-template" title="orderingPagePanel"> |
| <div id="orderingPlaceHolder"></div> |
| </script> |
| <script type="text/x-template" title="reorderCheckbox"> |
| <span id="reorderRequirement"><input id="reorderCheck" type="checkbox" name="reorderFlag" title="Choose the position of this page within the list of child pages."/><label for="reorderCheck" title="Choose the position of this page within the list of child pages.">Reorder</label></span> |
| </script> |
| <script type="text/x-template" title="move-help-link"> |
| <div class="dialog-help-link"> |
| <a href="http://docs.atlassian.com/confluence/docs-35/Moving+a+Page" target="_blank">Help</a> |
| </div> |
| </script> |
| <script type="text/x-template" title="searchResultsGrid"> |
| <table> |
| <thead> |
| <tr class="header"> |
| <th class="search-result-title">Page Title</th> |
| <th class="search-result-space">Space</th> |
| <th class="search-result-date">Updated</th> |
| </tr> |
| </thead> |
| </table> |
| </script> |
| <script type="text/x-template" title="searchResultsGridCount"> |
| <p class="search-result-count">{0}</p> |
| </script> |
| <script type="text/x-template" title="searchResultsGridRow"> |
| <tr class="search-result"> |
| <th class="search-result-title"><a href="{1}" class="content-type-{2}"><span>{0}</span></a></th> |
| <td class="search-result-space"><a class="space" href="http://10.20.160.198/wiki/display/{4}/" title="{3}">{3}</a></td> |
| <td class="search-result-date"><span class="date" title="{6}">{5}</span></td> |
| </tr> |
| </script> |
| <!-- Start restrictions section --> |
| <script type="text/x-template" title="page-permissions-div"> |
| <div id="page-permissions-div"> |
| <div id="page-permissions-editor-form"> |
| |
| <div id="page-permissions-error-div" class="hidden"> |
| <a href="#" id="permissions-error-div-close">Ok</a> |
| <div></div> |
| </div> |
| |
| <div id="page-permissions-type-radios" class="page-permissions-label-rows"> |
| <div> |
| <input id="restrictViewRadio" type="radio" checked="checked" name="pagePermissionTypeRadio" value="view"/> |
| <label for="restrictViewRadio">Restrict viewing of this page</label> |
| <input id="restrictEditRadio" type="radio" name="pagePermissionTypeRadio" value="edit"/> |
| <label for="restrictEditRadio">Restrict editing of this page</label> |
| </div> |
| </div> |
| <div id="page-permissions-input" class="page-permissions-label-rows"> |
| <div class="page-permissions-label">To:</div> |
| <div id="page-permissions-chooser-box"> |
| <span id="page-permissions-choose-user" class="ajs-button"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="#" id='userpicker-popup-link-image' onClick="var picker = window.open('http://10.20.160.198/wiki/spaces/openuserpicker.action?key=dubbo&startIndex=0&onPopupSubmit=AJS.PagePermissions.addUserPermissions', 'EntitiesPicker', 'status=yes,resizable=yes,top=100,left=200,width=700,height=680,scrollbars=yes'); picker.focus(); return false;"><img src="user_16.gif"/*tpa=http://10.20.160.198/wiki/s/en/2166/34/_/images/icons/user_16.gif*/ height=16 width=16 border=0 align="absmiddle" title="Choose users" /></a> |
| <a href="#" id='userpicker-popup-link-text' onClick="var picker = window.open('http://10.20.160.198/wiki/spaces/openuserpicker.action?key=dubbo&startIndex=0&onPopupSubmit=AJS.PagePermissions.addUserPermissions', 'EntitiesPicker', 'status=yes,resizable=yes,top=100,left=200,width=700,height=680,scrollbars=yes'); picker.focus(); return false;">Person...</a> |
| |
| |
| </span> |
| <span id="page-permissions-choose-group" class="ajs-button"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="#" id='grouppicker-popup-link-image' onClick="var picker = window.open('http://10.20.160.198/wiki/spaces/opengrouppicker.action?key=dubbo&startIndex=0&actionName=dosearchgroups.action&onPopupSubmit=AJS.PagePermissions.addGroupPermissions', 'EntitiesPicker', 'status=yes,resizable=yes,top=100,left=200,width=580,height=550,scrollbars=yes'); picker.focus(); return false;"><img src="group_16.gif"/*tpa=http://10.20.160.198/wiki/s/en/2166/34/_/images/icons/group_16.gif*/ height=16 width=16 border=0 align="absmiddle" title="Choose groups" /></a> |
| <a href="#" id='grouppicker-popup-link-text' onClick="var picker = window.open('http://10.20.160.198/wiki/spaces/opengrouppicker.action?key=dubbo&startIndex=0&actionName=dosearchgroups.action&onPopupSubmit=AJS.PagePermissions.addGroupPermissions', 'EntitiesPicker', 'status=yes,resizable=yes,top=100,left=200,width=580,height=550,scrollbars=yes'); picker.focus(); return false;">Group...</a> |
| |
| |
| </span> |
| </div> |
| <div id="page-permissions-input-box"> |
| <span> |
| <input type="text" id="page-permissions-names-input" class="input-placeholder" value="Enter user or group name" name="permissionNames" size="30" autocomplete="off"/> |
| </span> |
| <input |
| type="hidden" |
| id="page-permissions-names-hidden" /> <img height="16px" width="1px" src="spacer.gif"/*tpa=http://10.20.160.198/wiki/s/en/2166/34/_/images/border/spacer.gif*//> |
| <input type="button" id="add-typed-names" value="Restrict"> |
| </div> |
| </div> |
| </div> |
| <div id="page-permissions-tables"> |
| <div id="page-permissions-table-div"> |
| <table id="page-permissions-table" class="page-permissions-table"> |
| <tr id="page-permissions-no-views" class="marker-row"> |
| <td colspan="3" class="page-permissions-marker-cell"><span>No view restrictions are defined for this page</span></td> |
| </tr> |
| <tr id="page-permissions-no-edits" class="marker-row"> |
| <td colspan="3" class="page-permissions-marker-cell"><span>No edit restrictions are defined for this page</span></td> |
| </tr> |
| </table> |
| </div> |
| <div id="page-inherited-permissions-table-div" class="hidden"> |
| <span id="page-inherited-permissions-table-desc"> |
| <a class="icon twisty-closed">Show/Hide</a> |
| <a id="toggle-inherited-permissions" title="Click to see inherited restrictions">This page has restricted parent pages. It can only be seen by users who can see those parent pages.</a> |
| </span> |
| <div id="page-inherited-permissions-tables" class="hidden page-inheritance-togglable"></div> |
| </div> |
| </div> |
| </div> |
| </script> |
| |
| <script type="text/x-template" title="permissions-row-template"> |
| <tr class="permission-row"> |
| |
| <td class="page-permissions-marker-cell" width="20%"> |
| <span>Viewing restricted to:</span> |
| </td> |
| <td class="permission-entity" nowrap="true" width="40%"> |
| <span class="entity-container"> |
| <img class="permission-entity-picture"/> |
| <span class="permission-entity-display-name"></span> |
| <span class="permission-entity-name-wrap"> (<span class="permission-entity-name"></span>)</span> |
| </span> |
| </td> |
| <td class="permission-detail-column"> |
| <div class="permission-remove-div"> |
| <a href="#" class="remove-permission-link">Remove restriction</a> |
| </div> |
| </td> |
| </tr> |
| </script> |
| <script type="text/x-template" title="permissions-username-no-suggestion-template"> |
| <ol> |
| <li><a href="#" class="message"><span>No matches</span></a></li> |
| </ol> |
| </script> |
| <script type="text/x-template" title="page-inherited-permissions-table-div-template"> |
| <div class="page-inherited-permissions-owner-div"> |
| <div class="page-inherited-permissions-table-desc">Viewing restrictions apply to “<a></a>”. In order to see “<span></span>”, a user must be in the following list of users and groups:</div> |
| <table class="page-permissions-table"></table> |
| </div> |
| </script> |
| <script type="text/x-template" title="page-restrictions-help-link"> |
| <div class="dialog-help-link"> |
| <a href="http://docs.atlassian.com/confluence/docs-35/Page+Restrictions" target="_blank">Help</a> |
| </div> |
| </script> |
| <!-- End restrictions section --> |
| |
| <fieldset class="hidden parameters"> |
| <input type="hidden" title="spaceKeyEncoded" value="dubbo"> |
| <input type="hidden" title="spaceKeyDecoded" value="dubbo"> |
| </fieldset> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="#page-metadata-end" class="assistive">Skip to end of metadata</a> |
| <div id="page-metadata-start" class="assistive"></div> |
| |
| <div class="page-metadata"> |
| <ul> |
| <li class="page-metadata-item noprint"> |
| |
| |
| |
| <a id="content-metadata-page-restrictions" href="#" class="page-metadata-icon page-restrictions hidden" title="Page restrictions apply. Click the lock icon to view or edit the restriction."> |
| <span>Page restrictions apply</span></a> </li> |
| <li class="page-metadata-modification-info" style="display: none"> |
| Added by <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/~william.liangf \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/~william.liangf%27" tppabs="http://10.20.160.198/wiki/display/~william.liangf" |
| class="url fn confluence-userlink" data-username="william.liangf" |
| >梁 飞</a>, last edited by <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/~william.liangf \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/~william.liangf%27" tppabs="http://10.20.160.198/wiki/display/~william.liangf" |
| class="url fn confluence-userlink" data-username="william.liangf" |
| >梁 飞</a> on 六月 14, 2012 |
| <span class="noprint"> (<a id="view-change-link" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/diffpages.action?pageId=6947818&originalId=7671363 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/diffpages.action?pageId=6947818&originalId=7671363%27" tppabs="http://10.20.160.198/wiki/pages/diffpages.action?pageId=6947818&originalId=7671363">view change</a>)</span> |
| </li> |
| </ul> |
| <div id="version-comment" class="noteMacro" style="display: none;"> |
| <strong>Comment:</strong> |
| <br /> |
| </div> |
| </div> |
| |
| |
| <a href="#page-metadata-start" class="assistive">Go to start of metadata</a> |
| <div id="page-metadata-end" class="assistive"></div> |
| |
| <fieldset class="hidden parameters"> |
| <input type="hidden" title="browsePageTreeMode" value="view"> |
| <input type="hidden" title="parentPageId" value="6948813"> |
| </fieldset> |
| |
| <div class="wiki-content"> |
| <!-- wiki content --> |
| <h2><a name="ProtocolReference-zh-%E5%8D%8F%E8%AE%AE%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C"></a>协议参考手册</h2> |
| <p>(<a href="Protocol+Reference-zh.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Protocol+Reference-zh" title="Protocol Reference-zh">+</a>) (<a href="#ProtocolReference-zh-%E5%8D%8F%E8%AE%AE%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C">#</a>)</p> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>推荐使用Dubbo协议</td></tr></table></div> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>性能测试报告</b><br />各协议的性能情况,请参见:<a href="#ProtocolReference-zh-%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A">性能测试报告</a> (<a href="Performance+Test+Report-zh.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Performance+Test+Report-zh" title="Performance Test Report-zh">+</a>)</td></tr></table></div> |
| |
| <h3><a name="ProtocolReference-zh-dubbo%3A%2F%2F"></a>dubbo://</h3> |
| <p>(<a href="Dubbo+Protocol-zh.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Dubbo+Protocol-zh" title="Dubbo Protocol-zh">+</a>) (<a href="#ProtocolReference-zh-dubbo%253A%252F%252F">#</a>)</p> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。</td></tr></table></div> |
| <div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="warning-3.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。</td></tr></table></div> |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol name="dubbo" port="20880" />]]></script> |
| </div></div> |
| |
| <p>Set default protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:provider protocol="dubbo" />]]></script> |
| </div></div> |
| |
| <p>Set service protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:service protocol="dubbo" />]]></script> |
| </div></div> |
| |
| <p>Multi port:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol id="dubbo1" name="dubbo" port="20880" /> |
| <dubbo:protocol id="dubbo2" name="dubbo" port="20881" />]]></script> |
| </div></div> |
| |
| <p>Dubbo protocol options:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol name=“dubbo” port=“9090” server=“netty” client=“netty” codec=“dubbo” serialization=“hessian2” charset=“UTF-8” threadpool=“fixed” threads=“100” queues=“0” iothreads=“9” buffer=“8192” accepts=“1000” payload=“8388608” />]]></script> |
| </div></div> |
| <p><span class="image-wrap" style=""><img src="dubbo-protocol.jpg-version=1&modificationDate=1331068241000.jpg" tppabs="http://10.20.160.198/wiki/download/attachments/6949458/dubbo-protocol.jpg?version=1&modificationDate=1331068241000" style="border: 0px solid black" /></span></p> |
| <ul> |
| <li>Transporter |
| <ul> |
| <li>mina, netty, grizzy</li> |
| </ul> |
| </li> |
| <li>Serialization |
| <ul> |
| <li>dubbo, hessian2, java, json</li> |
| </ul> |
| </li> |
| <li>Dispatcher |
| <ul> |
| <li>all, direct, message, execution, connection</li> |
| </ul> |
| </li> |
| <li>ThreadPool |
| <ul> |
| <li>fixed, cached</li> |
| </ul> |
| </li> |
| </ul> |
| |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Dubbo协议缺省每服务每提供者每消费者使用单一长连接,如果数据量较大,可以使用多个连接。</td></tr></table></div> |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol name="dubbo" connections="2" />]]></script> |
| </div></div> |
| |
| <ul> |
| <li><dubbo:service connections=”0”>或<dubbo:reference connections=”0”>表示该服务使用JVM共享长连接。(缺省)</li> |
| <li><dubbo:service connections=”1”>或<dubbo:reference connections=”1”>表示该服务使用独立长连接。</li> |
| <li><dubbo:service connections=”2”>或<dubbo:reference connections=”2”>表示该服务使用独立两条长连接。</li> |
| </ul> |
| |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>为防止被大量连接撑挂,可在服务提供方限制大接收连接数,以实现服务提供方自我保护。</td></tr></table></div> |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol name="dubbo" accepts="1000" />]]></script> |
| </div></div> |
| |
| <p>缺省协议,使用基于mina1.1.7+hessian3.2.1的tbremoting交互。</p> |
| <ul> |
| <li>连接个数:单连接</li> |
| <li>连接方式:长连接</li> |
| <li>传输协议:TCP</li> |
| <li>传输方式:NIO异步传输</li> |
| <li>序列化:Hessian二进制序列化</li> |
| <li>适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,<font color="red">尽量不要用dubbo协议传输大文件或超大字符串</font>。</li> |
| <li>适用场景:常规远程服务方法调用</li> |
| </ul> |
| |
| |
| <p>为什么要消费者比提供者个数多:<br/> |
| 因dubbo协议采用单一长连接,<br/> |
| 假设网络为千兆网卡(1024Mbit=128MByte),<br/> |
| 根据测试经验数据每条连接最多只能压满7MByte(不同的环境可能不一样,供参考),<br/> |
| 理论上1个服务提供者需要20个服务消费者才能压满网卡。</p> |
| |
| <p>为什么不能传大包:<br/> |
| 因dubbo协议采用单一长连接,<br/> |
| 如果每次请求的数据包大小为500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每条连接最大7MByte(不同的环境可能不一样,供参考),<br/> |
| 单个服务提供者的TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262。<br/> |
| 单个消费者调用单个服务提供者的TPS(每秒处理事务数)最大为:7MByte / 500KByte = 14。<br/> |
| 如果能接受,可以考虑使用,否则网络将成为瓶颈。</p> |
| |
| <p>为什么采用异步单一长连接:<br/> |
| 因为服务的现状大都是服务提供者少,通常只有几台机器,<br/> |
| 而服务的消费者多,可能整个网站都在访问该服务,<br/> |
| 比如Morgan的提供者只有6台提供者,却有上百台消费者,每天有1.5亿次调用,<br/> |
| 如果采用常规的hessian服务,服务提供者很容易就被压跨,<br/> |
| 通过单一连接,保证单一消费者不会压死提供者,<br/> |
| 长连接,减少连接握手验证等,<br/> |
| 并使用异步IO,复用线程池,防止C10K问题。</p> |
| |
| <p>(1) 约束:</p> |
| <ul> |
| <li>参数及返回值需实现Serializable接口</li> |
| <li>参数及返回值不能自定义实现List, Map, Number, Date, Calendar等接口,只能用JDK自带的实现,因为hessian会做特殊处理,自定义实现类中的属性值都会丢失。()</li> |
| <li>Hessian序列化,只传成员属性值和值的类型,不传方法或静态变量,兼容情况:(由吴亚军提供) |
| <div class='table-wrap'> |
| <table class='confluenceTable'><tbody> |
| <tr> |
| <th class='confluenceTh'> 数据通讯 </th> |
| <th class='confluenceTh'> 情况 </th> |
| <th class='confluenceTh'> 结果 </th> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> A->B </td> |
| <td class='confluenceTd'> 类A多一种 属性(或者说类B少一种 属性) </td> |
| <td class='confluenceTd'> 不抛异常,A多的那 个属性的值,B没有, 其他正常 </td> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> A->B </td> |
| <td class='confluenceTd'> 枚举A多一种 枚举(或者说B少一种 枚举),A使用多 出来的枚举进行传输 </td> |
| <td class='confluenceTd'> 抛异常 </td> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> A->B </td> |
| <td class='confluenceTd'> 枚举A多一种 枚举(或者说B少一种 枚举),A不使用 多出来的枚举进行传输 </td> |
| <td class='confluenceTd'> 不抛异常,B正常接 收数据 </td> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> A->B </td> |
| <td class='confluenceTd'> A和B的属性 名相同,但类型不相同 </td> |
| <td class='confluenceTd'> 抛异常 </td> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> A->B </td> |
| <td class='confluenceTd'> serialId 不相同 </td> |
| <td class='confluenceTd'> 正常传输 </td> |
| </tr> |
| </tbody></table> |
| </div> |
| |
| <p>总结:会抛异常的情况:枚 举值一边多一种,一边少一种,正好使用了差别的那种,或者属性名相同,类型不同</p></li> |
| </ul> |
| |
| |
| <p>接口增加方法,对客户端无影响,如果该方法不是客户端需要的,客户端不需要重新部署;<br/> |
| 输入参数和结果集中增加属性,对客户端无影响,如果客户端并不需要新属性,不用重新<br/> |
| 部署;<br/> |
| 输入参数和结果集属性名变化,对客户端序列化无影响,但是如果客户端不重新部署,不管输入还是输出,属性名变化的属性值是获取不到的。<br/> |
| 总结:服务器端和客户端对领域对象并不需要完全一致,而是按照最大匹配原则。</p> |
| |
| <p>(2) 配置:<br/> |
| dubbo.properties:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: java; gutter: false"><![CDATA[dubbo.service.protocol=dubbo]]></script> |
| </div></div> |
| <h3><a name="ProtocolReference-zh-rmi%3A%2F%2F"></a>rmi://</h3> |
| <p>(<a href="Rmi+Protocol-zh.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Rmi+Protocol-zh" title="Rmi Protocol-zh">+</a>) (<a href="#ProtocolReference-zh-rmi%253A%252F%252F">#</a>)</p> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接和JDK标准序列化方式。</td></tr></table></div> |
| |
| <ul> |
| <li>如果服务接口继承了java.rmi.Remote接口,可以和原生RMI互操作,即: |
| <ul> |
| <li>提供者用Dubbo的RMI协议暴露服务,消费者直接用标准RMI接口调用,</li> |
| <li>或者提供方用标准RMI暴露服务,消费方用Dubbo的RMI协议调用。</li> |
| </ul> |
| </li> |
| <li>如果服务接口<font color="red">没有</font>继承java.rmi.Remote接口, |
| <ul> |
| <li>缺省Dubbo将自动生成一个com.xxx.XxxService$Remote的接口,并继承java.rmi.Remote接口,并以此接口暴露服务,</li> |
| <li>但如果设置了<dubbo:protocol name="rmi" codec="spring" />,将不生成$Remote接口,而使用Spring的RmiInvocationHandler接口暴露服务,和Spring兼容。</li> |
| </ul> |
| </li> |
| </ul> |
| |
| |
| <p>Define rmi protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol name="rmi" port="1099" />]]></script> |
| </div></div> |
| |
| <p>Set default protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:provider protocol="rmi" />]]></script> |
| </div></div> |
| |
| <p>Set service protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:service protocol="rmi" />]]></script> |
| </div></div> |
| |
| <p>Multi port:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol id="rmi1" name="rmi" port="1099" /> |
| <dubbo:protocol id="rmi2" name="rmi" port="2099" /> |
| |
| <dubbo:service protocol="rmi1" />]]></script> |
| </div></div> |
| |
| <p>Spring compatible:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol name="rmi" codec="spring" />]]></script> |
| </div></div> |
| |
| <p>Java标准的远程调用协议。</p> |
| <ul> |
| <li>连接个数:多连接</li> |
| <li>连接方式:短连接</li> |
| <li>传输协议:TCP</li> |
| <li>传输方式:同步传输</li> |
| <li>序列化:Java标准二进制序列化</li> |
| <li>适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。</li> |
| <li>适用场景:常规远程服务方法调用,与原生RMI服务互操作</li> |
| </ul> |
| |
| |
| <p>(1) 约束:</p> |
| <ul> |
| <li>参数及返回值需实现Serializable接口</li> |
| <li>dubbo配置中的超时时间对rmi无效,需使用java启动参数设置:-Dsun.rmi.transport.tcp.responseTimeout=3000,参见下面的RMI配置。</li> |
| </ul> |
| |
| |
| <p>(2) 配置:<br/> |
| dubbo.properties:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: java; gutter: false"><![CDATA[dubbo.service.protocol=rmi]]></script> |
| </div></div> |
| |
| <p>(3) RMI配置:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: java; gutter: false"><![CDATA[java -Dsun.rmi.transport.tcp.responseTimeout=3000]]></script> |
| </div></div> |
| <p>更多RMI优化参数请查看:<br/> |
| <a href="javascript:if(confirm(%27http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/technotes/guides/rmi/sunrmiproperties.html \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/technotes/guides/rmi/sunrmiproperties.html%27" tppabs="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/technotes/guides/rmi/sunrmiproperties.html" class="external-link" rel="nofollow">http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/technotes/guides/rmi/sunrmiproperties.html</a></p> |
| <h3><a name="ProtocolReference-zh-hessian%3A%2F%2F"></a>hessian://</h3> |
| <p>(<a href="Hessian+Protocol-zh.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Hessian+Protocol-zh" title="Hessian Protocol-zh">+</a>) (<a href="#ProtocolReference-zh-hessian%253A%252F%252F">#</a>)</p> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现。</td></tr></table></div> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Hessian是Caucho开源的一个RPC框架:<a href="javascript:if(confirm(%27http://hessian.caucho.com/ \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://hessian.caucho.com/%27" tppabs="http://hessian.caucho.com/" class="external-link" rel="nofollow">http://hessian.caucho.com</a>,其通讯效率高于WebService和Java自带的序列化。</td></tr></table></div> |
| |
| <p>依赖:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dependency> |
| <groupId>com.caucho</groupId> |
| <artifactId>hessian</artifactId> |
| <version>4.0.7</version> |
| </dependency>]]></script> |
| </div></div> |
| |
| <p>可以和原生Hessian服务互操作,即:</p> |
| <ul> |
| <li>提供者用Dubbo的Hessian协议暴露服务,消费者直接用标准Hessian接口调用,</li> |
| <li>或者提供方用标准Hessian暴露服务,消费方用Dubbo的Hessian协议调用。</li> |
| </ul> |
| |
| |
| <p>基于Hessian的远程调用协议。</p> |
| <ul> |
| <li>连接个数:多连接</li> |
| <li>连接方式:短连接</li> |
| <li>传输协议:HTTP</li> |
| <li>传输方式:同步传输</li> |
| <li>序列化:Hessian二进制序列化</li> |
| <li>适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。</li> |
| <li>适用场景:页面传输,文件传输,或与原生hessian服务互操作</li> |
| </ul> |
| |
| |
| <p>(1) 约束:</p> |
| <ul> |
| <li>参数及返回值需实现Serializable接口</li> |
| <li>参数及返回值不能自定义实现List, Map, Number, Date, Calendar等接口,只能用JDK自带的实现,因为hessian会做特殊处理,自定义实现类中的属性值都会丢失。</li> |
| </ul> |
| |
| |
| <p>(2) 配置:<br/> |
| Define hessian protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol name="hessian" port="8080" server="jetty" />]]></script> |
| </div></div> |
| |
| <p>Set default protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:provider protocol="hessian" />]]></script> |
| </div></div> |
| |
| <p>Set service protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:service protocol="hessian" />]]></script> |
| </div></div> |
| |
| <p>Multi port:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol id="hessian1" name="hessian" port="8080" /> |
| <dubbo:protocol id="hessian2" name="hessian" port="8081" />]]></script> |
| </div></div> |
| |
| <p>Directly provider:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="helloService" interface="HelloWorld" url="hessian://10.20.153.10:8080/helloWorld" />]]></script> |
| </div></div> |
| |
| <h4><a name="ProtocolReference-zh-JettyServer%3A%28default%29"></a>h4. Jetty Server: (default)</h4> |
| |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol ... server="jetty" />]]></script> |
| </div></div> |
| |
| <h4><a name="ProtocolReference-zh-ServletBridgeServer%3A%28%29"></a>h4. Servlet Bridge Server: (<font color="brown">recommend</font>)</h4> |
| |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol ... server="servlet" />]]></script> |
| </div></div> |
| <p>web.xml:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<servlet> |
| <servlet-name>dubbo</servlet-name> |
| <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class> |
| <load-on-startup>1</load-on-startup> |
| </servlet> |
| <servlet-mapping> |
| <servlet-name>dubbo</servlet-name> |
| <url-pattern>/*</url-pattern> |
| </servlet-mapping>]]></script> |
| </div></div> |
| |
| <p>注意,如果使用servlet派发请求:</p> |
| <ul> |
| <li>协议的端口<dubbo:protocol port="8080" />必须与servlet容器的端口相同,</li> |
| <li>协议的上下文路径<dubbo:protocol contextpath="foo" />必须与servlet应用的上下文路径相同。</li> |
| </ul> |
| |
| <h3><a name="ProtocolReference-zh-http%3A%2F%2F"></a>http://</h3> |
| <p>(<a href="Http+Protocol-zh.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Http+Protocol-zh" title="Http Protocol-zh">+</a>) (<a href="#ProtocolReference-zh-http%253A%252F%252F">#</a>)</p> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>采用Spring的HttpInvoker实现</td></tr></table></div> |
| |
| <div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="warning-3.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>2.3.0以上版本支持</td></tr></table></div> |
| |
| <p>基于http表单的远程调用协议。参见:<span class="error">[HTTP协议使用说明]</span></p> |
| <ul> |
| <li>连接个数:多连接</li> |
| <li>连接方式:短连接</li> |
| <li>传输协议:HTTP</li> |
| <li>传输方式:同步传输</li> |
| <li>序列化:表单序列化</li> |
| <li>适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。</li> |
| <li>适用场景:需同时给应用程序和浏览器JS使用的服务。</li> |
| </ul> |
| |
| |
| <p>(1) 约束:</p> |
| <ul> |
| <li>参数及返回值需符合Bean规范</li> |
| </ul> |
| |
| |
| <p>(2) 配置:<br/> |
| dubbo.xml:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: java; gutter: false"><![CDATA[<dubbo:protocol name="http" port="8080" />]]></script> |
| </div></div> |
| |
| <h4><a name="ProtocolReference-zh-JettyServer%3A%28default%29"></a>h4. Jetty Server: (default)</h4> |
| |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol ... server="jetty" />]]></script> |
| </div></div> |
| |
| <h4><a name="ProtocolReference-zh-ServletBridgeServer%3A%28%29"></a>h4. Servlet Bridge Server: (<font color="brown">recommend</font>)</h4> |
| |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol ... server="servlet" />]]></script> |
| </div></div> |
| <p>web.xml:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<servlet> |
| <servlet-name>dubbo</servlet-name> |
| <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class> |
| <load-on-startup>1</load-on-startup> |
| </servlet> |
| <servlet-mapping> |
| <servlet-name>dubbo</servlet-name> |
| <url-pattern>/*</url-pattern> |
| </servlet-mapping>]]></script> |
| </div></div> |
| |
| <p>注意,如果使用servlet派发请求:</p> |
| <ul> |
| <li>协议的端口<dubbo:protocol port="8080" />必须与servlet容器的端口相同,</li> |
| <li>协议的上下文路径<dubbo:protocol contextpath="foo" />必须与servlet应用的上下文路径相同。</li> |
| </ul> |
| |
| <h3><a name="ProtocolReference-zh-webservice%3A%2F%2F"></a>webservice://</h3> |
| <p>(<a href="WebService+Protocol.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/WebService+Protocol" title="WebService Protocol">+</a>) (<a href="#ProtocolReference-zh-webservice%253A%252F%252F">#</a>)</p> |
| |
| <div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="warning-3.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>2.3.0以上版本支持。</td></tr></table></div> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>基于CXF的<a href="javascript:if(confirm(%27http://search.maven.org/ \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22cxf-rt-frontend-simple%22%27" tppabs="http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22cxf-rt-frontend-simple%22" class="external-link" rel="nofollow">frontend-simple</a>和<a href="javascript:if(confirm(%27http://search.maven.org/ \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22cxf-rt-transports-http%22%27" tppabs="http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22cxf-rt-transports-http%22" class="external-link" rel="nofollow">transports-http</a>实现。</td></tr></table></div> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>CXF是Apache开源的一个RPC框架:<a href="javascript:if(confirm(%27http://cxf.apache.org/ \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://cxf.apache.org/%27" tppabs="http://cxf.apache.org/" class="external-link" rel="nofollow">http://cxf.apache.org</a>,由Xfire和Celtix合并而来 。</td></tr></table></div> |
| |
| <p>依赖:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dependency> |
| <groupId>org.apache.cxf</groupId> |
| <artifactId>cxf-rt-frontend-simple</artifactId> |
| <version>2.6.1</version> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.cxf</groupId> |
| <artifactId>cxf-rt-transports-http</artifactId> |
| <version>2.6.1</version> |
| </dependency>]]></script> |
| </div></div> |
| |
| <p>可以和原生WebService服务互操作,即:</p> |
| <ul> |
| <li>提供者用Dubbo的WebService协议暴露服务,消费者直接用标准WebService接口调用,</li> |
| <li>或者提供方用标准WebService暴露服务,消费方用Dubbo的WebService协议调用。</li> |
| </ul> |
| |
| |
| <p>基于WebService的远程调用协议。</p> |
| <ul> |
| <li>连接个数:多连接</li> |
| <li>连接方式:短连接</li> |
| <li>传输协议:HTTP</li> |
| <li>传输方式:同步传输</li> |
| <li>序列化:SOAP文本序列化</li> |
| <li>适用场景:系统集成,跨语言调用。</li> |
| </ul> |
| |
| |
| <p>(1) 约束:</p> |
| <ul> |
| <li>参数及返回值需实现Serializable接口</li> |
| <li>参数尽量使用基本类型和POJO。</li> |
| </ul> |
| |
| |
| <p>(2) 配置:<br/> |
| Define hessian protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol name="webservice" port="8080" server="jetty" />]]></script> |
| </div></div> |
| |
| <p>Set default protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:provider protocol="webservice" />]]></script> |
| </div></div> |
| |
| <p>Set service protocol:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:service protocol="webservice" />]]></script> |
| </div></div> |
| |
| <p>Multi port:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol id="webservice1" name="webservice" port="8080" /> |
| <dubbo:protocol id="webservice2" name="webservice" port="8081" />]]></script> |
| </div></div> |
| |
| <p>Directly provider:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="helloService" interface="HelloWorld" url="webservice://10.20.153.10:8080/com.foo.HelloWorld" />]]></script> |
| </div></div> |
| |
| <p>WSDL:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: text; gutter: false"><![CDATA[http://10.20.153.10:8080/com.foo.HelloWorld?wsdl]]></script> |
| </div></div> |
| |
| <h4><a name="ProtocolReference-zh-JettyServer%3A%28default%29"></a>h4. Jetty Server: (default)</h4> |
| |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol ... server="jetty" />]]></script> |
| </div></div> |
| |
| <h4><a name="ProtocolReference-zh-ServletBridgeServer%3A%28%29"></a>h4. Servlet Bridge Server: (<font color="brown">recommend</font>)</h4> |
| |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:protocol ... server="servlet" />]]></script> |
| </div></div> |
| <p>web.xml:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<servlet> |
| <servlet-name>dubbo</servlet-name> |
| <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class> |
| <load-on-startup>1</load-on-startup> |
| </servlet> |
| <servlet-mapping> |
| <servlet-name>dubbo</servlet-name> |
| <url-pattern>/*</url-pattern> |
| </servlet-mapping>]]></script> |
| </div></div> |
| |
| <p>注意,如果使用servlet派发请求:</p> |
| <ul> |
| <li>协议的端口<dubbo:protocol port="8080" />必须与servlet容器的端口相同,</li> |
| <li>协议的上下文路径<dubbo:protocol contextpath="foo" />必须与servlet应用的上下文路径相同。</li> |
| </ul> |
| |
| <h3><a name="ProtocolReference-zh-thrift%3A%2F%2F"></a>thrift://</h3> |
| <p>(<a href="Thrift+Protocol.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Thrift+Protocol" title="Thrift Protocol">+</a>) (<a href="#ProtocolReference-zh-thrift%253A%252F%252F">#</a>)</p> |
| |
| <div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="warning-3.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>2.3.0以上版本支持。</td></tr></table></div> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Thrift说明</b><br />Thrift是Facebook捐给Apache的一个RPC框架,参见:<a href="javascript:if(confirm(%27http://thrift.apache.org/ \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://thrift.apache.org/%27" tppabs="http://thrift.apache.org/" class="external-link" rel="nofollow">http://thrift.apache.org</a></td></tr></table></div> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>dubbo thrift协议</b><br />当前 dubbo 支持的 thrift 协议是对 thrift 原生协议的扩展,在原生协议的基础上添加了一些额外的头信息,比如service name,magic number等。使用dubbo thrift协议同样需要使用thrift的idl compiler编译生成相应的java代码,后续版本中会在这方面做一些增强。</td></tr></table></div> |
| |
| <p>示例:<a href="javascript:if(confirm(%27https://github.com/alibaba/dubbo/tree/master/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27https://github.com/alibaba/dubbo/tree/master/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples%27" tppabs="https://github.com/alibaba/dubbo/tree/master/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples" class="external-link" rel="nofollow">https://github.com/alibaba/dubbo/tree/master/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples</a></p> |
| |
| <p>依赖:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dependency> |
| <groupId>org.apache.thrift</groupId> |
| <artifactId>libthrift</artifactId> |
| <version>0.8.0</version> |
| </dependency>]]></script> |
| </div></div> |
| |
| <p>所有服务共用一个端口:(与原生Thrift不兼容)</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: java; gutter: false"><![CDATA[<dubbo:protocol name="thrift" port="3030" />]]></script> |
| </div></div> |
| |
| <p>Thrift<font color="red">不支持</font>数据类型:</p> |
| <ul> |
| <li>null值 (不能在协议中传递null值)</li> |
| </ul> |
| |
| <h3><a name="ProtocolReference-zh-memcached%3A%2F%2F"></a>memcached://</h3> |
| <p>(<a href="Memcached+Protocol.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Memcached+Protocol" title="Memcached Protocol">+</a>) (<a href="#ProtocolReference-zh-memcached%253A%252F%252F">#</a>)</p> |
| |
| <div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="warning-3.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>2.3.0以上版本支持。</td></tr></table></div> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Memcached说明</b><br />Memcached是一个高效的KV缓存服务器,参见:<a href="javascript:if(confirm(%27http://memcached.org/ \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://memcached.org/%27" tppabs="http://memcached.org/" class="external-link" rel="nofollow">http://memcached.org/</a></td></tr></table></div> |
| |
| <p>可以通过脚本或监控中心手工填写表单注册memcached服务的地址:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: java; gutter: false"><![CDATA[RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension(); |
| Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181")); |
| registry.register(URL.valueOf("memcached://10.20.153.11/com.foo.BarService?category=providers&dynamic=false&application=foo&group=member&loadbalance=consistenthash"));]]></script> |
| </div></div> |
| |
| <p>然后在客户端使用时,不需要感知Memcached的地址:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="cache" interface="http://10.20.160.198/wiki/display/dubbo/java.util.Map" group="member" />]]></script> |
| </div></div> |
| |
| <p>或者,点对点直连:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="cache" interface="http://10.20.160.198/wiki/display/dubbo/java.util.Map" url="memcached://10.20.153.10:11211" />]]></script> |
| </div></div> |
| |
| <p>也可以使用自定义接口:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="cache" interface="com.foo.CacheService" url="memcached://10.20.153.10:11211" />]]></script> |
| </div></div> |
| <p>方法名建议和memcached的标准方法名相同,即:get(key), set(key, value), delete(key)。</p> |
| |
| <p>如果方法名和memcached的标准方法名不相同,则需要配置映射关系:(其中"p:xxx"为spring的标准p标签)</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="cache" interface="com.foo.CacheService" url="memcached://10.20.153.10:11211" p:set="putFoo" p:get="getFoo" p:delete="removeFoo" />]]></script> |
| </div></div> |
| <h3><a name="ProtocolReference-zh-redis%3A%2F%2F"></a>redis://</h3> |
| <p>(<a href="Redis+Protocol.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Redis+Protocol" title="Redis Protocol">+</a>) (<a href="#ProtocolReference-zh-redis%253A%252F%252F">#</a>)</p> |
| |
| <div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="warning-3.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>2.3.0以上版本支持。</td></tr></table></div> |
| |
| <div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="check.gif" tppabs="http://10.20.160.198/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Redis说明</b><br />Redis是一个高效的KV存储服务器,参见:<a href="javascript:if(confirm(%27http://redis.io/ \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://redis.io/%27" tppabs="http://redis.io/" class="external-link" rel="nofollow">http://redis.io</a></td></tr></table></div> |
| |
| <p>可以通过脚本或监控中心手工填写表单注册redis服务的地址:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: java; gutter: false"><![CDATA[RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension(); |
| Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181")); |
| registry.register(URL.valueOf("redis://10.20.153.11/com.foo.BarService?category=providers&dynamic=false&application=foo&group=member&loadbalance=consistenthash"));]]></script> |
| </div></div> |
| |
| <p>然后在客户端使用时,不需要感知Redis的地址:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="store" interface="http://10.20.160.198/wiki/display/dubbo/java.util.Map" group="member" />]]></script> |
| </div></div> |
| |
| <p>或者,点对点直连:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="store" interface="http://10.20.160.198/wiki/display/dubbo/java.util.Map" url="redis://10.20.153.10:6379" />]]></script> |
| </div></div> |
| |
| <p>也可以使用自定义接口:</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="store" interface="com.foo.StoreService" url="redis://10.20.153.10:6379" />]]></script> |
| </div></div> |
| <p>方法名建议和redis的标准方法名相同,即:get(key), set(key, value), delete(key)。</p> |
| |
| <p>如果方法名和redis的标准方法名不相同,则需要配置映射关系:(其中"p:xxx"为spring的标准p标签)</p> |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <script type="syntaxhighlighter" class="theme: Confluence; brush: xml; gutter: false"><![CDATA[<dubbo:reference id="cache" interface="com.foo.CacheService" url="memcached://10.20.153.10:11211" p:set="putFoo" p:get="getFoo" p:delete="removeFoo" />]]></script> |
| </div></div> |
| </div> |
| |
| <!-- |
| <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
| xmlns:dc="http://purl.org/dc/elements/1.1/" |
| xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> |
| <rdf:Description |
| rdf:about="http://code.alibabatech.com/wiki/display/dubbo/Protocol+Reference-zh" |
| dc:identifier="http://code.alibabatech.com/wiki/display/dubbo/Protocol+Reference-zh" |
| dc:title="Protocol Reference-zh" |
| trackback:ping="http://code.alibabatech.com/wiki/rpc/trackback/6947818"/> |
| </rdf:RDF> |
| --> |
| |
| |
| |
| |
| |
| <fieldset class="hidden parameters"> |
| <legend>Labels parameters</legend> |
| <input type="hidden" id="domainName" value="http://code.alibabatech.com/wiki"> |
| <input type="hidden" id="pageId" value="6947818"> |
| <input type="hidden" id="spaceKey" value="dubbo"> |
| </fieldset> |
| |
| <div id="labels-section" class="pageSection"> |
| <div class="labels-editor"> |
| <span id="labels-section-title" class="label-title"> |
| <b>Labels:</b> |
| </span> |
| <div id="labels-section-content" class="content-column"> |
| <span id="labels-section-title-none" class="label-title none "> |
| None |
| </span> |
| |
| <div id="labelsList" class="label-list"> |
| </div> |
| |
| </div> |
| |
| <span class="errorMessage error" id="errorSpan"></span> |
| <form method="GET" action="" id="add-labels-form"> |
| <div id="labelInputSpan" class="labels-input"> |
| <div id="labelOperationErrorContainer" class="hidden"> |
| <span class="error"><span class="errorMessage" id="labelOperationErrorMessage"></span></span> |
| </div> |
| |
| <div class="caption">Enter labels to add to this page:</div> |
| <div id="label-input-fields"> |
| <input autocomplete="off" id="labelsString" name="labelsString" value="" size="40"> |
| <input id="add-labels-editor-button" type="submit" class="add-labels" value="Add"> |
| <input id="close-labels-editor-button" type="submit" class="hide-labels-editor" value="Done"> |
| </div> |
| <div id="waitImageAndStatus"> |
| <img class="waiting" alt="Please wait" src="wait.gif" tppabs="http://10.20.160.198/wiki/s/en/2166/34/_/images/icons/wait.gif"> |
| <span id="labelOperationStatus" class="smalltext"></span> |
| </div> |
| <div id="labelsAutocompleteList" class="aui-dd-parent"></div> |
| <div class="labels-tip"> |
| <div id="suggestedLabelsSpan"></div> |
| Looking for a label? Just start typing. |
| </div> |
| </div> |
| </form> |
| </div> |
| </div> |
| |
| <div id="children-section" class="pageSection children-showing"> |
| |
| <div class="section-header "> |
| <h2 id="children-section-title" class="section-title"> |
| <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/dubbo/Protocol+Reference-zh?showChildren=false \n\nThis file was not retrieved by Teleport Ultra, because it is linked too far away from its Starting Address. If you increase the in-domain depth setting for the Starting Address, this file will be queued for retrieval. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/dubbo/Protocol+Reference-zh?showChildren=false#children%27" tppabs="http://10.20.160.198/wiki/display/dubbo/Protocol+Reference-zh?showChildren=false#children" class="children-show-hide"> |
| 5 Child Pages |
| </a> |
| </h2> |
| |
| <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/dubbo/Protocol+Reference-zh?showChildren=false \n\nThis file was not retrieved by Teleport Ultra, because it is linked too far away from its Starting Address. If you increase the in-domain depth setting for the Starting Address, this file will be queued for retrieval. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/dubbo/Protocol+Reference-zh?showChildren=false#children%27" tppabs="http://10.20.160.198/wiki/display/dubbo/Protocol+Reference-zh?showChildren=false#children" class="children-show-hide icon"></a> |
| |
| <span class="noprint grey"> |
| <a class="children-subtitle" href="javascript:if(confirm(%27http://10.20.160.198/wiki/pages/listpages-dirview.action?key=dubbo&openId=6947818 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/pages/listpages-dirview.action?key=dubbo&openId=6947818#selectedPageInHierarchy%27" tppabs="http://10.20.160.198/wiki/pages/listpages-dirview.action?key=dubbo&openId=6947818#selectedPageInHierarchy">Reorder Pages</a> |
| </span> |
| </div> |
| <div id="page-children" class="pageSectionBody children-loaded"> |
| <span class="child-display"> |
| <span class="icon icon-page" title="Page">Page:</span> |
| <a href="Http+Protocol-zh.htm" tppabs="http://10.20.160.198/wiki/display/dubbo/Http+Protocol-zh">Http Protocol-zh</a> |
| </span> |
| <span class="child-display"> |
| <span class="icon icon-page" title="Page">Page:</span> |
| <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/dubbo/Memcached+Protocol-zh \n\nThis file was not retrieved by Teleport Ultra, because it is linked too far away from its Starting Address. If you increase the in-domain depth setting for the Starting Address, this file will be queued for retrieval. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/dubbo/Memcached+Protocol-zh%27" tppabs="http://10.20.160.198/wiki/display/dubbo/Memcached+Protocol-zh">Memcached Protocol-zh</a> |
| </span> |
| <span class="child-display"> |
| <span class="icon icon-page" title="Page">Page:</span> |
| <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/dubbo/Redis+Protocol-zh \n\nThis file was not retrieved by Teleport Ultra, because it is linked too far away from its Starting Address. If you increase the in-domain depth setting for the Starting Address, this file will be queued for retrieval. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/dubbo/Redis+Protocol-zh%27" tppabs="http://10.20.160.198/wiki/display/dubbo/Redis+Protocol-zh">Redis Protocol-zh</a> |
| </span> |
| <span class="child-display"> |
| <span class="icon icon-page" title="Page">Page:</span> |
| <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/dubbo/Thrift+Protocol-zh \n\nThis file was not retrieved by Teleport Ultra, because it is linked too far away from its Starting Address. If you increase the in-domain depth setting for the Starting Address, this file will be queued for retrieval. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/dubbo/Thrift+Protocol-zh%27" tppabs="http://10.20.160.198/wiki/display/dubbo/Thrift+Protocol-zh">Thrift Protocol-zh</a> |
| </span> |
| <span class="child-display"> |
| <span class="icon icon-page" title="Page">Page:</span> |
| <a href="javascript:if(confirm(%27http://10.20.160.198/wiki/display/dubbo/WebService+Protocol-zh \n\nThis file was not retrieved by Teleport Ultra, because it is linked too far away from its Starting Address. If you increase the in-domain depth setting for the Starting Address, this file will be queued for retrieval. \n\nDo you want to open it from the server?%27))window.location=%27http://10.20.160.198/wiki/display/dubbo/WebService+Protocol-zh%27" tppabs="http://10.20.160.198/wiki/display/dubbo/WebService+Protocol-zh">WebService Protocol-zh</a> |
| </span> |
| </div> |
| </div> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <fieldset class="parameters hidden"> |
| <input type="hidden" id="deleteCommentConfirmMessage" value="Are you sure you want to remove the comment?"> |
| <input type="hidden" id="collapseTooltip" value="Click to toggle the display of this comment."> |
| </fieldset> |
| |
| <fieldset class="hidden parameters i18n"> |
| <input type="hidden" title="i18n.cancel.name" value="Cancel"> |
| </fieldset> |
| |
| |
| |
| |
| |
| |
| <div id="comments-section" class="pageSection"> |
| |
| |
| |
| |
| <a id="add-comment-bottom" href="Protocol+Reference-zh-showComments=true&showCommentArea=true.htm#addcomment" tppabs="http://10.20.160.198/wiki/display/dubbo/Protocol+Reference-zh?showComments=true&showCommentArea=true#addcomment"> |
| Add Comment |
| </a> |
| </div> |
| |
| |
| |
| </div> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <script type="text/x-template" title="manage-watchers-dialog"> |
| <div class="dialog-content"> |
| <div class="column page-watchers"> |
| <h3>Watching this page</h3> |
| <p class="description">These people are notified when the page is changed. You can add or remove people from this list.</p> |
| <form action="/wiki/json/addwatch.action" method="POST"> |
| <input type="hidden" name="atl_token" value="c116db80711201b36e2067aa83f3b044c2d5a30e"> |
| <input type="hidden" name="pageId" value="6947818"/> |
| <input type="hidden" id="add-watcher-username" name="username" value=""/> |
| <label for="add-watcher-user">User</label> |
| <input id="add-watcher-user" name="userFullName" type="search" class="autocomplete-user" |
| value="" placeholder="Full name or username" autocomplete="off" |
| data-max="10" data-target="#add-watcher-username" data-dropdown-target="#add-watcher-dropdown" |
| data-template="{title}" data-none-message="No matching users found."> |
| <input id="add-watcher-submit" type="submit" name="add" value="Add"> |
| <div id="add-watcher-dropdown" class="aui-dd-parent autocomplete"></div> |
| <div class="status hidden"></div> |
| </form> |
| <ul class="user-list"> |
| <li class="loading">Loading…</li> |
| <li class="no-users hidden">No page watchers</li> |
| </ul> |
| </div> |
| <div class="column space-watchers"> |
| <h3>Watching this space</h3> |
| <p class="description">These people are notified when any content in the space is changed. You cannot modify this list.</p> |
| <ul class="user-list"> |
| <li class="loading">Loading…</li> |
| <li class="no-users hidden">No space watchers</li> |
| </ul> |
| </div> |
| </div> |
| </script> |
| <script type="text/x-template" title="manage-watchers-user"> |
| <li class="watch-user"> |
| <img class="profile-picture confluence-userlink" src="{iconUrl}" data-username="{username}"> |
| <a class="confluence-userlink" href="{url}" data-username="{username}">{fullName} <span class="username">({username})</span></a> |
| <span class="remove-watch" title="Remove" |
| data-username="{username}">Remove</span> |
| </li> |
| </script> |
| <script type="text/x-template" title="manage-watchers-help-link"> |
| <div class="dialog-help-link"> |
| <a href="http://docs.atlassian.com/confluence/docs-35/Managing+Watchers" target="_blank">Help</a> |
| </div> |
| </script> |
| |
| <br class="clear"> |
| </div><!-- \#main --> |
| |
| <div id="footer"> |
| <p class="license license-opensource"> |
| Powered by a free <b>Atlassian Confluence Open Source Project License</b> granted to Alibaba Tech. <a href="javascript:if(confirm(%27http://www.atlassian.com/c/conf/11461 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://www.atlassian.com/c/conf/11461%27" tppabs="http://www.atlassian.com/c/conf/11461">Evaluate Confluence today</a>.<br> |
| </p> |
| |
| <ul id="poweredby"> |
| <li class="noprint">Powered by <a href="javascript:if(confirm(%27http://www.atlassian.com/software/confluence \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://www.atlassian.com/software/confluence%27" tppabs="http://www.atlassian.com/software/confluence" class="hover-footer-link">Atlassian Confluence</a> 3.5.9, the <a href="javascript:if(confirm(%27http://www.atlassian.com/software/confluence/tour/enterprise-wiki.jsp \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://www.atlassian.com/software/confluence/tour/enterprise-wiki.jsp%27" tppabs="http://www.atlassian.com/software/confluence/tour/enterprise-wiki.jsp" class="hover-footer-link">Enterprise Wiki</a></li> |
| <li class="print-only">Printed by Atlassian Confluence 3.5.9, the Enterprise Wiki.</li> |
| <li class="noprint"> | <a href="javascript:if(confirm(%27http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470 \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470%27" tppabs="http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470" class="hover-footer-link">Report a bug</a></li> |
| <li class="noprint"> | <a href="javascript:if(confirm(%27http://www.atlassian.com/about/connected.jsp?s_kwcid=Confluence-stayintouch \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://www.atlassian.com/about/connected.jsp?s_kwcid=Confluence-stayintouch%27" tppabs="http://www.atlassian.com/about/connected.jsp?s_kwcid=Confluence-stayintouch" class="hover-footer-link">Atlassian News</a></li> |
| </ul> |
| |
| |
| |
| 友情链接:<a href="javascript:if(confirm(%27http://code.taobao.org/ \n\nThis file was not retrieved by Teleport Ultra, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?%27))window.location=%27http://code.taobao.org/%27" tppabs="http://code.taobao.org/">Taocode</a> |
| <script type="text/javascript"> |
| |
| var _gaq = _gaq || []; |
| _gaq.push(['_setAccount', 'UA-31474478-1']); |
| _gaq.push(['_trackPageview']); |
| |
| (function() { |
| var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; |
| ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www/') + '.google-analytics.com/ga.js'; |
| var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); |
| })(); |
| |
| </script> |
| </div></div><!-- \#full-height-container --> |
| </div><!-- \#page --> |
| </body> |
| </html> |