Æô¶¯Ê±¼ì²é
Dubboȱʡ»áÔÚÆô¶¯Ê±¼ì²éÒÀÀµµÄ·þÎñÊÇ·ñ¿ÉÓ㬲»¿ÉÓÃʱ»áÅ׳öÒì³££¬×èÖ¹Spring³õʼ»¯Íê³É£¬ÒÔ±ãÉÏÏßʱ£¬Äܼ°Ôç·¢ÏÖÎÊÌ⣬ĬÈÏcheck=true¡£
Èç¹ûÄãµÄSpringÈÝÆ÷ÊÇÀÁ¼ÓÔØµÄ£¬»òÕßͨ¹ýAPI±à³ÌÑÓ³ÙÒýÓ÷þÎñ£¬Çë¹Ø±Õcheck£¬·ñÔò·þÎñÁÙʱ²»¿ÉÓÃʱ£¬»áÅ׳öÒì³££¬Äõ½nullÒýÓã¬Èç¹ûcheck=false£¬×ÜÊǻ᷵»ØÒýÓ㬵±·þÎñ»Ö¸´Ê±£¬ÄÜ×Ô¶¯Á¬ÉÏ¡£
¿ÉÒÔͨ¹ýcheck="false"¹Ø±Õ¼ì²é£¬±ÈÈ磬²âÊÔʱ£¬ÓÐЩ·þÎñ²»¹ØÐÄ£¬»òÕß³öÏÖÁËÑ»·ÒÀÀµ£¬±ØÐëÓÐÒ»·½ÏÈÆô¶¯¡£
¹Ø±Õij¸ö·þÎñµÄÆô¶¯Ê±¼ì²é£º(ûÓÐÌṩÕßʱ±¨´í)
<dubbo:reference
interface="com.foo.BarService"
check="false"
/> |
¹Ø±ÕËùÓзþÎñµÄÆô¶¯Ê±¼ì²é£º(ûÓÐÌṩÕßʱ±¨´í)
<dubbo:consumer
check="false"
/>
|
¹Ø±Õ×¢²áÖÐÐÄÆô¶¯Ê±¼ì²é£º(×¢²á¶©ÔÄʧ°Üʱ±¨´í)
<dubbo:registry
check="false"
/> |
Ò²¿ÉÒÔÓÃdubbo.propertiesÅäÖãº
dubbo.reference.com.foo.BarService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false
|
Ò²¿ÉÒÔÓÃ-D²ÎÊý£º
java
-Ddubbo.reference.com.foo.BarService.check=false
java
-Ddubbo.reference.check=false
java
-Ddubbo.consumer.check=false
java
-Ddubbo.registry.check=false |
×¢ÒâÇø±ð
dubbo.reference.check=false£¬Ç¿ÖƸıäËùÓÐreferenceµÄcheckÖµ£¬¾ÍËãÅäÖÃÖÐÓÐÉùÃ÷£¬Ò²»á±»¸²¸Ç¡£
dubbo.consumer.check=false£¬ÊÇÉèÖÃcheckµÄȱʡֵ£¬Èç¹ûÅäÖÃÖÐÓÐÏÔʽµÄÉùÃ÷£¬È磺<dubbo:reference
check="true"/>£¬²»»áÊÜÓ°Ïì¡£
dubbo.registry.check=false£¬Ç°ÃæÁ½¸ö¶¼ÊÇÖ¸¶©Ôijɹ¦£¬µ«ÌṩÕßÁбíÊÇ·ñΪ¿ÕÊÇ·ñ±¨´í£¬Èç¹û×¢²á¶©ÔÄʧ°Üʱ£¬Ò²ÔÊÐíÆô¶¯£¬ÐèʹÓôËÑ¡Ï½«ÔÚºǫ́¶¨Ê±ÖØÊÔ¡£
ÒýÓÃȱʡÊÇÑÓ³Ù³õʼ»¯µÄ£¬Ö»ÓÐÒýÓñ»×¢Èëµ½ÆäËüBean£¬»ò±»getBean()»ñÈ¡£¬²Å»á³õʼ»¯¡£
Èç¹ûÐèÒª¼¢¶ö¼ÓÔØ£¬¼´Ã»ÓÐÈËÒýÓÃÒ²Á¢¼´Éú³É¶¯Ì¬´úÀí£¬¿ÉÒÔÅäÖãº
<dubbo:reference
interface="com.foo.BarService"
init="true"
/> |
¼¯ÈºÈÝ´í
ÔÚ¼¯Èºµ÷ÓÃʧ°Üʱ£¬DubboÌṩÁ˶àÖÖÈÝ´í·½°¸£¬È±Ê¡ÎªfailoverÖØÊÔ¡£

¸÷½Úµã¹ØÏµ£º
ÕâÀïµÄInvokerÊÇProviderµÄÒ»¸ö¿Éµ÷ÓÃServiceµÄ³éÏó£¬Invoker·â×°ÁËProviderµØÖ·¼°Service½Ó¿ÚÐÅÏ¢¡£
Directory´ú±í¶à¸öInvoker£¬¿ÉÒÔ°ÑËü¿´³ÉList<Invoker>£¬µ«ÓëList²»Í¬µÄÊÇ£¬ËüµÄÖµ¿ÉÄÜÊǶ¯Ì¬±ä»¯µÄ£¬±ÈÈç×¢²áÖÐÐÄÍÆËͱä¸ü¡£
Cluster½«DirectoryÖеĶà¸öInvokerαװ³ÉÒ»¸öInvoker£¬¶ÔÉϲã͸Ã÷£¬Î±×°¹ý³Ì°üº¬ÁËÈÝ´íÂß¼£¬µ÷ÓÃʧ°Üºó£¬ÖØÊÔÁíÒ»¸ö¡£
Router¸ºÔð´Ó¶à¸öInvokerÖа´Â·ÓɹæÔòÑ¡³ö×Ó¼¯£¬±ÈÈç¶Áд·ÖÀ룬ӦÓøôÀëµÈ¡£
LoadBalance¸ºÔð´Ó¶à¸öInvokerÖÐÑ¡³ö¾ßÌåµÄÒ»¸öÓÃÓÚ±¾´Îµ÷Óã¬Ñ¡µÄ¹ý³Ì°üº¬Á˸ºÔؾùºâËã·¨£¬µ÷ÓÃʧ°Üºó£¬ÐèÒªÖØÑ¡¡£
¼¯ÈºÈÝ´íģʽ£º
Failover Cluster
ʧ°Ü×Ô¶¯Çл»£¬µ±³öÏÖʧ°Ü£¬ÖØÊÔÆäËü·þÎñÆ÷¡£(ȱʡ)
ͨ³£ÓÃÓÚ¶Á²Ù×÷£¬µ«ÖØÊÔ»á´øÀ´¸ü³¤ÑÓ³Ù¡£
¿Éͨ¹ýretries="2"À´ÉèÖÃÖØÊÔ´ÎÊý(²»º¬µÚÒ»´Î)¡£
Failfast Cluster
¿ìËÙʧ°Ü£¬Ö»·¢ÆðÒ»´Îµ÷Óã¬Ê§°ÜÁ¢¼´±¨´í¡£
ͨ³£ÓÃÓÚ·ÇÃݵÈÐÔµÄд²Ù×÷£¬±ÈÈçÐÂÔö¼Ç¼¡£
Failsafe Cluster
ʧ°Ü°²È«£¬³öÏÖÒ쳣ʱ£¬Ö±½ÓºöÂÔ¡£
ͨ³£ÓÃÓÚдÈëÉó¼ÆÈÕÖ¾µÈ²Ù×÷¡£
Failback Cluster
ʧ°Ü×Ô¶¯»Ö¸´£¬ºǫ́¼Ç¼ʧ°ÜÇëÇ󣬶¨Ê±ÖØ·¢¡£
ͨ³£ÓÃÓÚÏûϢ֪ͨ²Ù×÷¡£
Forking Cluster
²¢Ðе÷Óöà¸ö·þÎñÆ÷£¬Ö»ÒªÒ»¸ö³É¹¦¼´·µ»Ø¡£
ͨ³£ÓÃÓÚʵʱÐÔÒªÇó½Ï¸ßµÄ¶Á²Ù×÷£¬µ«ÐèÒªÀ˷Ѹü¶à·þÎñ×ÊÔ´¡£
¿Éͨ¹ýforks="2"À´ÉèÖÃ×î´ó²¢ÐÐÊý¡£
Broadcast Cluster
¹ã²¥µ÷ÓÃËùÓÐÌṩÕߣ¬Öð¸öµ÷Óã¬ÈÎÒâһ̨±¨´íÔò±¨´í¡£(2.1.0¿ªÊ¼Ö§³Ö)
ͨ³£ÓÃÓÚ֪ͨËùÓÐÌṩÕ߸üлº´æ»òÈÕÖ¾µÈ±¾µØ×ÊÔ´ÐÅÏ¢¡£
ÖØÊÔ´ÎÊýÅäÖÃÈ磺(failover¼¯ÈºÄ£Ê½ÉúЧ)
<dubbo:service
retries="2"
/>
|
»ò£º
<dubbo:reference
retries="2"
/> |
»ò£º
<dubbo:reference>
<dubbo:method
name="findFoo"
retries="2"
/>
</dubbo:reference>
|
¼¯ÈºÄ£Ê½ÅäÖÃÈ磺
<dubbo:service
cluster="failsafe"
/> |
»ò£º
<dubbo:reference
cluster="failsafe"
/> |
¸ºÔؾùºâ
ÔÚ¼¯Èº¸ºÔؾùºâʱ£¬DubboÌṩÁ˶àÖÖ¾ùºâ²ßÂÔ£¬È±Ê¡ÎªrandomËæ»úµ÷Óá£
Random LoadBalance
Ëæ»ú£¬°´È¨ÖØÉèÖÃËæ»ú¸ÅÂÊ¡£
ÔÚÒ»¸ö½ØÃæÉÏÅöײµÄ¸ÅÂʸߣ¬µ«µ÷ÓÃÁ¿Ô½´ó·Ö²¼Ô½¾ùÔÈ£¬¶øÇÒ°´¸ÅÂÊʹÓÃÈ¨ÖØºóÒ²±È½Ï¾ùÔÈ£¬ÓÐÀûÓÚ¶¯Ì¬µ÷ÕûÌṩÕßÈ¨ÖØ¡£
RoundRobin LoadBalance
ÂÖÑ£¬°´¹«Ô¼ºóµÄÈ¨ÖØÉèÖÃÂÖѱÈÂÊ¡£
´æÔÚÂýµÄÌṩÕßÀÛ»ýÇëÇóÎÊÌ⣬±ÈÈ磺µÚ¶þ̨»úÆ÷ºÜÂý£¬µ«Ã»¹Ò£¬µ±ÇëÇóµ÷µ½µÚ¶þ̨ʱ¾Í¿¨ÔÚÄÇ£¬¾Ã¶ø¾ÃÖ®£¬ËùÓÐÇëÇ󶼿¨ÔÚµ÷µ½µÚ¶þ̨ÉÏ¡£
LeastActive LoadBalance
×îÉÙ»îÔ¾µ÷ÓÃÊý£¬Ïàͬ»îÔ¾ÊýµÄËæ»ú£¬»îÔ¾ÊýÖ¸µ÷ÓÃǰºó¼ÆÊý²î¡£
ʹÂýµÄÌṩÕßÊÕµ½¸üÉÙÇëÇó£¬ÒòΪԽÂýµÄÌṩÕߵĵ÷ÓÃǰºó¼ÆÊý²î»áÔ½´ó¡£
ConsistentHash LoadBalance
Ò»ÖÂÐÔHash£¬Ïàͬ²ÎÊýµÄÇëÇó×ÜÊÇ·¢µ½Í¬Ò»ÌṩÕß¡£
µ±Ä³Ò»Ì¨ÌṩÕß¹Òʱ£¬Ô±¾·¢Íù¸ÃÌṩÕßµÄÇëÇ󣬻ùÓÚÐéÄâ½Úµã£¬Æ½Ì¯µ½ÆäËüÌṩÕߣ¬²»»áÒýÆð¾çÁұ䶯¡£
Ëã·¨²Î¼û£ºhttp://en.wikipedia.org/wiki/Consistent_hashing¡£
ȱʡֻ¶ÔµÚÒ»¸ö²ÎÊýHash£¬Èç¹ûÒªÐ޸ģ¬ÇëÅäÖÃ<dubbo:parameter key="hash.arguments"
value="0,1" />
ȱʡÓÃ160·ÝÐéÄâ½Úµã£¬Èç¹ûÒªÐ޸ģ¬ÇëÅäÖÃ<dubbo:parameter key="hash.nodes"
value="320" />
ÅäÖÃÈ磺
<dubbo:service
interface="..."
loadbalance="roundrobin"
/> |
»ò£º
<dubbo:reference
interface="..."
loadbalance="roundrobin"
/> |
»ò£º
<dubbo:service
interface="...">
<dubbo:method
name="..."
loadbalance="roundrobin"/>
</dubbo:service>
|
»ò£º
<dubbo:reference
interface="...">
<dubbo:method
name="..."
loadbalance="roundrobin"/>
</dubbo:reference>
|
Ïß³ÌÄ£ÐÍ
¼þ´¦ÀíÏß³Ì˵Ã÷
Èç¹ûʼþ´¦ÀíµÄÂß¼ÄÜѸËÙÍê³É£¬²¢ÇÒ²»»á·¢ÆðеÄIOÇëÇ󣬱ÈÈçÖ»ÊÇÔÚÄÚ´æÖмǸö±êʶ£¬ÔòÖ±½ÓÔÚIOÏß³ÌÉÏ´¦Àí¸ü¿ì£¬ÒòΪ¼õÉÙÁËÏ̳߳ص÷¶È¡£
µ«Èç¹ûʼþ´¦ÀíÂß¼½ÏÂý£¬»òÕßÐèÒª·¢ÆðеÄIOÇëÇ󣬱ÈÈçÐèÒª²éѯÊý¾Ý¿â£¬Ôò±ØÐëÅÉ·¢µ½Ï̳߳أ¬·ñÔòIOÏß³Ì×èÈû£¬½«µ¼Ö²»ÄܽÓÊÕÆäËüÇëÇó¡£
Èç¹ûÓÃIOÏ̴߳¦Àíʼþ£¬ÓÖÔÚʼþ´¦Àí¹ý³ÌÖз¢ÆðеÄIOÇëÇ󣬱ÈÈçÔÚÁ¬½ÓʼþÖз¢ÆðµÇ¼ÇëÇ󣬻ᱨ¡°¿ÉÄÜÒý·¢ËÀËø¡±Òì³££¬µ«²»»áÕæËÀËø¡£
Dispatcher
all ËùÓÐÏûÏ¢¶¼ÅÉ·¢µ½Ï̳߳أ¬°üÀ¨ÇëÇó£¬ÏìÓ¦£¬Á¬½Óʼþ£¬¶Ï¿ªÊ¼þ£¬ÐÄÌøµÈ¡£
direct ËùÓÐÏûÏ¢¶¼²»ÅÉ·¢µ½Ï̳߳أ¬È«²¿ÔÚIOÏß³ÌÉÏÖ±½ÓÖ´ÐС£
message Ö»ÓÐÇëÇóÏìÓ¦ÏûÏ¢ÅÉ·¢µ½Ï̳߳أ¬ÆäËüÁ¬½Ó¶Ï¿ªÊ¼þ£¬ÐÄÌøµÈÏûÏ¢£¬Ö±½ÓÔÚIOÏß³ÌÉÏÖ´ÐС£
execution Ö»ÇëÇóÏûÏ¢ÅÉ·¢µ½Ï̳߳أ¬²»º¬ÏìÓ¦£¬ÏìÓ¦ºÍÆäËüÁ¬½Ó¶Ï¿ªÊ¼þ£¬ÐÄÌøµÈÏûÏ¢£¬Ö±½ÓÔÚIOÏß³ÌÉÏÖ´ÐС£
connection ÔÚIOÏß³ÌÉÏ£¬½«Á¬½Ó¶Ï¿ªÊ¼þ·ÅÈë¶ÓÁУ¬ÓÐÐòÖð¸öÖ´ÐУ¬ÆäËüÏûÏ¢ÅÉ·¢µ½Ï̳߳ء£
ThreadPool
fixed ¹Ì¶¨´óСÏ̳߳أ¬Æô¶¯Ê±½¨Á¢Ị̈߳¬²»¹Ø±Õ£¬Ò»Ö±³ÖÓС£(ȱʡ)
cached »º´æÏ̳߳أ¬¿ÕÏÐÒ»·ÖÖÓ×Ô¶¯É¾³ý£¬ÐèÒªÊ±ÖØ½¨¡£
limited ¿ÉÉìËõÏ̳߳أ¬µ«³ØÖеÄÏß³ÌÊýÖ»»áÔö³¤²»»áÊÕËõ¡£(Ϊ±ÜÃâÊÕËõʱͻȻÀ´ÁË´óÁ÷Á¿ÒýÆðµÄÐÔÄÜÎÊÌâ)¡£
ÅäÖÃÈ磺
<dubbo:protocol
name="dubbo"
dispatcher="all"
threadpool="fixed"
threads="100"
/> |
Ö±Á¬ÌṩÕß
ÔÚ¿ª·¢¼°²âÊÔ»·¾³Ï£¬¾³£ÐèÒªÈÆ¹ý×¢²áÖÐÐÄ£¬Ö»²âÊÔÖ¸¶¨·þÎñÌṩÕߣ¬Õâʱºò¿ÉÄÜÐèÒªµã¶ÔµãÖ±Á¬£¬µã¶ÔµãÖ±Áª·½Ê½£¬½«ÒÔ·þÎñ½Ó¿ÚΪµ¥Î»£¬ºöÂÔ×¢²áÖÐÐĵÄÌṩÕßÁÐ±í£¬A½Ó¿ÚÅäÖõã¶Ôµã£¬²»Ó°ÏìB½Ó¿Ú´Ó×¢²áÖÐÐÄ»ñÈ¡ÁÐ±í¡£

(1) Èç¹ûÊÇÏßÉÏÐèÇóÐèÒªµã¶Ôµã£¬¿ÉÔÚ<dubbo:reference>ÖÐÅäÖÃurlÖ¸ÏòÌṩÕߣ¬½«Èƹý×¢²áÖÐÐÄ£¬¶à¸öµØÖ·Ó÷ֺŸô¿ª£¬ÅäÖÃÈçÏ£º(1.0.6¼°ÒÔÉϰ汾֧³Ö)
<dubbo:reference id="xxxService"
interface="com.alibaba.xxx.XxxService"
url="dubbo://localhost:20890"
/> |
(2) ÔÚJVMÆô¶¯²ÎÊýÖмÓÈë-D²ÎÊýÓ³Éä·þÎñµØÖ·£¬È磺
(keyΪ·þÎñÃû£¬valueΪ·þÎñÌṩÕßurl£¬´ËÅäÖÃÓÅÏȼ¶×î¸ß£¬1.0.15¼°ÒÔÉϰ汾֧³Ö)
java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890 |
×¢Òâ
ΪÁ˱ÜÃ⸴ÔÓ»¯ÏßÉÏ»·¾³£¬²»ÒªÔÚÏßÉÏʹÓÃÕâ¸ö¹¦ÄÜ£¬Ö»Ó¦ÔÚ²âÊÔ½×¶ÎʹÓá£
(3) Èç¹û·þÎñ±È½Ï¶à£¬Ò²¿ÉÒÔÓÃÎļþÓ³É䣬È磺
(ÓÃ-Ddubbo.resolve.fileÖ¸¶¨Ó³ÉäÎļþ·¾¶£¬´ËÅäÖÃÓÅÏȼ¶¸ßÓÚ<dubbo:reference>ÖеÄÅäÖã¬1.0.15¼°ÒÔÉϰ汾֧³Ö)
(2.0ÒÔÉϰ汾×Ô¶¯¼ÓÔØ${user.home}/dubbo-resolve.propertiesÎļþ£¬²»ÐèÒªÅäÖÃ)
java -Ddubbo.resolve.file=xxx.properties |
È»ºóÔÚÓ³ÉäÎļþxxx.propertiesÖмÓÈ룺(keyΪ·þÎñÃû£¬valueΪ·þÎñÌṩÕßurl)
com.alibaba.xxx.XxxService=dubbo://localhost:20890 |
×¢Òâ
ΪÁ˱ÜÃ⸴ÔÓ»¯ÏßÉÏ»·¾³£¬²»ÒªÔÚÏßÉÏʹÓÃÕâ¸ö¹¦ÄÜ£¬Ö»Ó¦ÔÚ²âÊÔ½×¶ÎʹÓá£
Ö»¶©ÔÄ
ÎÊÌâ
Ϊ·½±ã¿ª·¢²âÊÔ£¬¾³£»áÔÚÏßϹ²ÓÃÒ»¸öËùÓзþÎñ¿ÉÓõÄ×¢²áÖÐÐÄ£¬Õâʱ£¬Èç¹ûÒ»¸öÕýÔÚ¿ª·¢ÖеķþÎñÌṩÕß×¢²á£¬¿ÉÄÜ»áÓ°ÏìÏû·ÑÕß²»ÄÜÕý³£ÔËÐС£
½â¾ö·½°¸
¿ÉÒÔÈ÷þÎñÌṩÕß¿ª·¢·½£¬Ö»¶©ÔÄ·þÎñ(¿ª·¢µÄ·þÎñ¿ÉÄÜÒÀÀµÆäËü·þÎñ)£¬¶ø²»×¢²áÕýÔÚ¿ª·¢µÄ·þÎñ£¬Í¨¹ýÖ±Á¬²âÊÔÕýÔÚ¿ª·¢µÄ·þÎñ¡£

½ûÓÃ×¢²áÅäÖãº
<dubbo:registry
address="10.20.153.10:9090"
register="false"
/> |
»òÕߣº
<dubbo:registry
address="10.20.153.10:9090?register=false"
/> |
Ö»×¢²á
ÎÊÌâ
Èç¹ûÓÐÁ½¸ö¾µÏñ»·¾³£¬Á½¸ö×¢²áÖÐÐÄ£¬ÓÐÒ»¸ö·þÎñÖ»ÔÚÆäÖÐÒ»¸ö×¢²áÖÐÐÄÓв¿Êð£¬ÁíÒ»¸ö×¢²áÖÐÐÄ»¹Ã»À´µÃ¼°²¿Ê𣬶øÁ½¸ö×¢²áÖÐÐĵįäËüÓ¦Óö¼ÐèÒªÒÀÀµ´Ë·þÎñ£¬ËùÒÔÐèÒª½«·þÎñͬʱע²áµ½Á½¸ö×¢²áÖÐÐÄ£¬µ«È´²»ÄÜÈô˷þÎñͬʱÒÀÀµÁ½¸ö×¢²áÖÐÐĵįäËü·þÎñ¡£
½â¾ö·½°¸
¿ÉÒÔÈ÷þÎñÌṩÕß·½£¬Ö»×¢²á·þÎñµ½ÁíÒ»×¢²áÖÐÐÄ£¬¶ø²»´ÓÁíÒ»×¢²áÖÐÐĶ©ÔÄ·þÎñ¡£
½ûÓö©ÔÄÅäÖãº
<dubbo:registry
id="hzRegistry"
address="10.20.153.10:9090"
/>
<dubbo:registry
id="qdRegistry"
address="10.20.141.150:9090"
subscribe="false"
/> |
»òÕߣº
<dubbo:registry
id="hzRegistry"
address="10.20.153.10:9090"
/>
<dubbo:registry
id="qdRegistry"
address="10.20.141.150:9090?subscribe=false"
/> |
¾²Ì¬·þÎñ
ÓÐʱºòÏ£ÍûÈ˹¤¹ÜÀí·þÎñÌṩÕßµÄÉÏÏߺÍÏÂÏߣ¬´ËʱÐ轫ע²áÖÐÐıêʶΪ·Ç¶¯Ì¬¹ÜÀíģʽ¡£
<dubbo:registry
address="10.20.141.150:9090"
dynamic="false"
/> |
»òÕߣº
<dubbo:registry
address="10.20.141.150:9090?dynamic=false"
/> |
·þÎñÌṩÕß³õ´Î×¢²áʱΪ½ûÓÃ״̬£¬ÐèÈ˹¤ÆôÓ㬶ÏÏßʱ£¬½«²»»á±»×Ô¶¯É¾³ý£¬ÐèÈ˹¤½ûÓá£
Èç¹ûÊÇÒ»¸öµÚÈý·½¶ÀÁ¢ÌṩÕߣ¬±ÈÈçmemcachedµÈ£¬¿ÉÒÔÖ±½ÓÏò×¢²áÖÐÐÄдÈëÌṩÕßµØÖ·ÐÅÏ¢£¬Ïû·ÑÕßÕý³£Ê¹Óãº(ͨ³£Óɽű¾¼à¿ØÖÐÐÄÒ³ÃæµÈµ÷ÓÃ)
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")); |
¶àÐÒé
(1) ²»Í¬·þÎñ²»Í¬ÐÒé
±ÈÈ磺²»Í¬·þÎñÔÚÐÔÄÜÉÏÊÊÓò»Í¬ÐÒé½øÐд«Ê䣬±ÈÈç´óÊý¾ÝÓöÌÁ¬½ÓÐÒ飬СÊý¾Ý´ó²¢·¢Óó¤Á¬½ÓÐÒé¡£
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="world" /> <dubbo:registry id="registry" address="10.20.141.150:9090" username="admin" password="hello1234" /> <!-- ¶àÐÒéÅäÖà --> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:protocol name="rmi" port="1099" /> <!-- ʹÓÃdubboÐÒ鱩¶·þÎñ --> <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protocol="dubbo" /> <!-- ʹÓÃrmiÐÒ鱩¶·þÎñ --> <dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" protocol="rmi" /> </beans> |
(2) ¶àÐÒ鱩¶·þÎñ
±ÈÈ磺ÐèÒªÓëhttp¿Í»§¶Ë»¥²Ù×÷
consumer.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="world" /> <dubbo:registry id="registry" address="10.20.141.150:9090" username="admin" password="hello1234" /> <!-- ¶àÐÒéÅäÖà --> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:protocol name="hessian" port="8080" /> <!-- ʹÓöà¸öÐÒ鱩¶·þÎñ --> <dubbo:service id="helloService" interface="com.alibaba.hello.api.HelloService"
version="1.0.0" protocol="dubbo,hessian" /> </beans> |
¶à×¢²áÖÐÐÄ
(1) ¶à×¢²áÖÐÐÄ×¢²á
±ÈÈ磺ÖÐÎÄÕ¾ÓÐЩ·þÎñÀ´²»¼°ÔÚÇൺ²¿Êð£¬Ö»ÔÚº¼Öݲ¿Ê𣬶øÇൺµÄÆäËüÓ¦ÓÃÐèÒªÒýÓô˷þÎñ£¬¾Í¿ÉÒÔ½«·þÎñͬʱע²áµ½Á½¸ö×¢²áÖÐÐÄ¡£
consumer.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="world" /> <!-- ¶à×¢²áÖÐÐÄÅäÖà --> <dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" /> <dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" default="false" /> <!-- Ïò¶à¸ö×¢²áÖÐÐÄ×¢²á --> <dubbo:service interface="com.alibaba.hello.api.HelloService"
version="1.0.0" ref="helloService" registry="hangzhouRegistry,qingdaoRegistry" /> </beans> |
(2) ²»Í¬·þÎñʹÓò»Í¬×¢²áÖÐÐÄ
±ÈÈ磺CRMÓÐЩ·þÎñÊÇרÃÅΪ¹ú¼ÊÕ¾Éè¼ÆµÄ£¬ÓÐЩ·þÎñÊÇרÃÅΪÖÐÎÄÕ¾Éè¼ÆµÄ¡£
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="world" /> <!-- ¶à×¢²áÖÐÐÄÅäÖà --> <dubbo:registry id="chinaRegistry" address="10.20.141.150:9090" /> <dubbo:registry id="intlRegistry" address="10.20.154.177:9010" default="false" /> <!-- ÏòÖÐÎÄÕ¾×¢²áÖÐÐÄ×¢²á --> <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" registry="chinaRegistry" /> <!-- Ïò¹ú¼ÊÕ¾×¢²áÖÐÐÄ×¢²á --> <dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" registry="intlRegistry" /> </beans> |
(3) ¶à×¢²áÖÐÐÄÒýÓÃ
±ÈÈ磺CRMÐèͬʱµ÷ÓÃÖÐÎÄÕ¾ºÍ¹ú¼ÊÕ¾µÄPC2·þÎñ£¬PC2ÔÚÖÐÎÄÕ¾ºÍ¹ú¼ÊÕ¾¾ùÓв¿Ê𣬽ӿڼ°°æ±¾ºÅ¶¼Ò»Ñù£¬µ«Á¬µÄÊý¾Ý¿â²»Ò»Ñù¡£
consumer.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="world" /> <!-- ¶à×¢²áÖÐÐÄÅäÖà --> <dubbo:registry id="chinaRegistry" address="10.20.141.150:9090" /> <dubbo:registry id="intlRegistry" address="10.20.154.177:9010" default="false" /> <!-- ÒýÓÃÖÐÎÄÕ¾·þÎñ --> <dubbo:reference id="chinaHelloService"
interface="com.alibaba.hello.api.HelloService" version="1.0.0" registry="chinaRegistry" /> <!-- ÒýÓùú¼ÊÕ¾Õ¾·þÎñ --> <dubbo:reference id="intlHelloService"
interface="com.alibaba.hello.api.HelloService" version="1.0.0" registry="intlRegistry" /> </beans> |
Èç¹ûÖ»ÊDzâÊÔ»·¾³ÁÙʱÐèÒªÁ¬½ÓÁ½¸ö²»Í¬×¢²áÖÐÐÄ£¬Ê¹ÓÃÊúºÅ·Ö¸ô¶à¸ö²»Í¬×¢²áÖÐÐĵØÖ·£º
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="world" /> <!-- ¶à×¢²áÖÐÐÄÅäÖã¬ÊúºÅ·Ö¸ô±íʾͬʱÁ¬½Ó¶à¸ö²»Í¬×¢²áÖÐÐÄ£¬
ͬһע²áÖÐÐĵĶà¸ö¼¯ÈºµØÖ·ÓöººÅ·Ö¸ô --> <dubbo:registry address="10.20.141.150:9090|10.20.154.177:9010" /> <!-- ÒýÓ÷þÎñ --> <dubbo:reference id="helloService" interface="com.alibaba.hello.api.HelloService" version="1.0.0" /> </beans> |
·þÎñ·Ö×é
µ±Ò»¸ö½Ó¿ÚÓжàÖÖʵÏÖʱ£¬¿ÉÒÔÓÃgroupÇø·Ö¡£
<dubbo:service
group="feedback"
interface="com.xxx.IndexService"
/>
<dubbo:service
group="member"
interface="com.xxx.IndexService"
/> |
ÈÎÒâ×飺(2.2.0ÒÔÉϰ汾֧³Ö£¬×ÜÊÇÖ»µ÷Ò»¸ö¿ÉÓÃ×éµÄʵÏÖ)
<dubbo:reference
id="feedbackIndexService"
group="feedback"
interface="com.xxx.IndexService"
/>
<dubbo:reference
id="memberIndexService"
group="member"
interface="com.xxx.IndexService"
/> |
¶à°æ±¾
µ±Ò»¸ö½Ó¿ÚʵÏÖ£¬³öÏÖ²»¼æÈÝÉý¼¶Ê±£¬¿ÉÒÔÓð汾ºÅ¹ý¶É£¬°æ±¾ºÅ²»Í¬µÄ·þÎñÏ໥¼ä²»ÒýÓá£
ÔÚµÍѹÁ¦Ê±¼ä¶Î£¬ÏÈÉý¼¶Ò»°ëÌṩÕßΪа汾
ÔÙ½«ËùÓÐÏû·ÑÕßÉý¼¶ÎªÐ°汾
È»ºó½«Ê£ÏµÄÒ»°ëÌṩÕßÉý¼¶ÎªÐ°汾
<dubbo:service
interface="com.foo.BarService"
version="1.0.0"
/> |
<dubbo:service
interface="com.foo.BarService"
version="2.0.0"
/> |
<dubbo:reference
id="barService"
interface="com.foo.BarService"
version="1.0.0"
/> |
<dubbo:reference
id="barService"
interface="com.foo.BarService"
version="2.0.0"
/> |
²»Çø·Ö°æ±¾£º(2.2.0ÒÔÉϰ汾֧³Ö)
<dubbo:reference
id="barService"
interface="com.foo.BarService"
version="*"
/> |
·Ö×é¾ÛºÏ
°´×éºÏ²¢·µ»Ø½á¹û£¬±ÈÈç²Ëµ¥·þÎñ£¬½Ó¿ÚÒ»Ñù£¬µ«ÓжàÖÖʵÏÖ£¬ÓÃgroupÇø·Ö£¬ÏÖÔÚÏû·Ñ·½Ðè´ÓÿÖÖgroupÖе÷ÓÃÒ»´Î·µ»Ø½á¹û£¬ºÏ²¢½á¹û·µ»Ø£¬ÕâÑù¾Í¿ÉÒÔʵÏ־ۺϲ˵¥Ïî¡£
´Ó2.1.0°æ±¾¿ªÊ¼Ö§³Ö

´úÂë²Î¼û£ºhttps://github.com/alibaba/dubbo/tree/master/dubbo-test/dubbo-test-examples/src/main/java/com/alibaba/dubbo/examples/merge
ÅäÖÃÈ磺(ËÑË÷ËùÓзÖ×é)
<dubbo:reference
interface="com.xxx.MenuService"
group="*"
merger="true"
/> |
»ò£º(ºÏ²¢Ö¸¶¨·Ö×é)
<dubbo:reference
interface="com.xxx.MenuService"
group="aaa,bbb"
merger="true"
/> |
»ò£º(Ö¸¶¨·½·¨ºÏ²¢½á¹û£¬ÆäËüδָ¶¨µÄ·½·¨£¬½«Ö»µ÷ÓÃÒ»¸öGroup)
<dubbo:reference
interface="com.xxx.MenuService"
group="*">
<dubbo:method
name="getMenuItems"
merger="true"
/>
</dubbo:service> |
»ò£º(ij¸ö·½·¨²»ºÏ²¢½á¹û£¬ÆäËü¶¼ºÏ²¢½á¹û)
<dubbo:reference
interface="com.xxx.MenuService"
group="*"
merger="true">
<dubbo:method
name="getMenuItems"
merger="false"
/>
</dubbo:service> |
»ò£º(Ö¸¶¨ºÏ²¢²ßÂÔ£¬È±Ê¡¸ù¾Ý·µ»ØÖµÀàÐÍ×Ô¶¯Æ¥Å䣬Èç¹ûͬһÀàÐÍÓÐÁ½¸öºÏ²¢Æ÷ʱ£¬ÐèÖ¸¶¨ºÏ²¢Æ÷µÄÃû³Æ)
²Î¼û£º[ºÏ²¢½á¹ûÀ©Õ¹]
<dubbo:reference
interface="com.xxx.MenuService"
group="*">
<dubbo:method
name="getMenuItems"
merger="mymerge"
/>
</dubbo:service> |
»ò£º(Ö¸¶¨ºÏ²¢·½·¨£¬½«µ÷Ó÷µ»Ø½á¹ûµÄÖ¸¶¨·½·¨½øÐкϲ¢£¬ºÏ²¢·½·¨µÄ²ÎÊýÀàÐͱØÐëÊÇ·µ»Ø½á¹ûÀàÐͱ¾Éí)
<dubbo:reference
interface="com.xxx.MenuService"
group="*">
<dubbo:method
name="getMenuItems"
merger=".addAll"
/>
</dubbo:service> |
²ÎÊýÑéÖ¤
²ÎÊýÑéÖ¤¹¦ÄÜÊÇ»ùÓÚJSR303ʵÏֵģ¬Óû§Ö»Ðè±êʶJSR303±ê×¼µÄÑéÖ¤Annotation£¬²¢Í¨¹ýÉùÃ÷filterÀ´ÊµÏÖÑéÖ¤¡£
2.1.0ÒÔÉϰ汾֧³Ö
ÍêÕûʾÀý´úÂë²Î¼û£ºhttps://github.com/alibaba/dubbo/tree/master/dubbo-test/dubbo-test-examples/src/main/java/com/alibaba/dubbo/examples/validation
ÑéÖ¤·½Ê½¿ÉÀ©Õ¹£¬²Î¼û£ºValidationÀ©Õ¹µã
²ÎÊý±êעʾÀý£º
import
java.io.Serializable;
import
java.util.Date;
import
javax.validation.constraints.Future;
import
javax.validation.constraints.Max;
import
javax.validation.constraints.Min;
import
javax.validation.constraints.NotNull;
import
javax.validation.constraints.Past;
import
javax.validation.constraints.Pattern;
import
javax.validation.constraints.Size;
public
class
ValidationParameter implements
Serializable {
private
static
final
long
serialVersionUID = 7158911668568000392L;
@NotNull
// ²»ÔÊÐíΪ¿Õ
@Size(min
= 1,
max = 20)
//
³¤¶È»ò´óС·¶Î§
private
String name;
@NotNull(groups
= ValidationService.Save.class)
//
±£´æÊ±²»ÔÊÐíΪ¿Õ£¬¸üÐÂʱÔÊÐíΪ¿Õ £¬±íʾ²»¸üиÃ×Ö¶Î
@Pattern(regexp
= "^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$")
private
String email;
@Min(18)
//
×îСֵ
@Max(100)
//
×î´óÖµ
private
int
age;
@Past
// ±ØÐëΪһ¸ö¹ýÈ¥µÄʱ¼ä
private
Date loginDate;
@Future
// ±ØÐëΪһ¸öδÀ´µÄʱ¼ä
private
Date expiryDate;
public
String getName() {
return
name;
}
public
void
setName(String name) {
this.name
= name;
}
public
String getEmail() {
return
email;
}
public
void
setEmail(String email) {
this.email
= email;
}
public
int
getAge() {
return
age;
}
public
void
setAge(int
age) {
this.age
= age;
}
public
Date getLoginDate() {
return
loginDate;
}
public
void
setLoginDate(Date loginDate) {
this.loginDate
= loginDate;
}
public
Date getExpiryDate() {
return
expiryDate;
}
public
void
setExpiryDate(Date expiryDate) {
this.expiryDate
= expiryDate;
}
}
·Ö×éÑé֤ʾÀý£º
public
interface
ValidationService { //
ȱʡ¿É°´·þÎñ½Ó¿ÚÇø·ÖÑéÖ¤³¡¾°£¬È磺@NotNull(groups = ValidationService.class)
@interface
Save{} //
Óë·½·¨Í¬Ãû½Ó¿Ú£¬Ê××Öĸ´óд£¬ÓÃÓÚÇø·ÖÑéÖ¤³¡¾°£¬È磺@NotNull(groups = ValidationService.Save.class)£¬¿ÉÑ¡
void
save(ValidationParameter parameter);
void
update(ValidationParameter parameter);
} |
·Ö×éÑé֤ʾÀý£º
import
javax.validation.GroupSequence;
public
interface
ValidationService {
@GroupSequence(Update.class)
//
ͬʱÑéÖ¤Update×鹿Ôò
@interface
Save{}
void
save(ValidationParameter parameter);
@interface
Update{}
void
update(ValidationParameter parameter);
} |
²ÎÊýÑé֤ʾÀý£º
import
javax.validation.constraints.Min;
import
javax.validation.constraints.NotNull;
public
interface
ValidationService {
void
save(@NotNull
ValidationParameter parameter); //
ÑéÖ¤²ÎÊý²»Îª¿Õ
void
delete(@Min(1)
int
id); //
Ö±½Ó¶Ô»ù±¾ÀàÐͲÎÊýÑéÖ¤
} |
ÔÚ¿Í»§¶ËÑéÖ¤²ÎÊý£º
<dubbo:reference
id="validationService"
interface="com.alibaba.dubbo.examples.validation.api.ValidationService"
validation="true"
/> |
ÔÚ·þÎñÆ÷¶ËÑéÖ¤²ÎÊý£º
<dubbo:service
interface="com.alibaba.dubbo.examples.validation.api.ValidationService"
ref="validationService"
validation="true"
/> |
ÑéÖ¤Òì³£ÐÅÏ¢£º
import
javax.validation.ConstraintViolationException;
import
javax.validation.ConstraintViolationException;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
import
com.alibaba.dubbo.examples.validation.api.ValidationParameter;
import
com.alibaba.dubbo.examples.validation.api.ValidationService;
import
com.alibaba.dubbo.rpc.RpcException;
public
class
ValidationConsumer {
public
static
void
main(String[] args) throws
Exception {
String
config = ValidationConsumer.class.getPackage().getName().replace('.',
'/')
+ "/validation-consumer.xml";
ClassPathXmlApplicationContext
context = new
ClassPathXmlApplicationContext(config);
context.start();
ValidationService
validationService = (ValidationService)context.getBean("validationService");
//
Error
try
{
parameter
= new
ValidationParameter();
validationService.save(parameter);
System.out.println("Validation
ERROR");
}
catch
(RpcException e) { //
Å׳öµÄÊÇRpcException
ConstraintViolationException
ve = (ConstraintViolationException) e.getCause();
//
ÀïÃæÇ¶ÁËÒ»¸öConstraintViolationException
Set<ConstraintViolation<?>>
violations = ve.getConstraintViolations(); //
¿ÉÒÔÄõ½Ò»¸öÑéÖ¤´íÎóÏêϸÐÅÏ¢µÄ¼¯ºÏ
System.out.println(violations);
}
}
}
|
ÐèÒª¼ÓÈëÒÀÀµ£º
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
|
|