Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
DubboÏêϸ½éÉÜÓ밲װʹÓùý³Ì
 
  2562  次浏览      31
 2019-1-28
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷ÒªÏêϸ½éÉÜÁËDubboµÄÌØÐԺͼܹ¹¹¹³É£¬ÒÔ¼°°²×°ºóʹÓõĹý³Ì£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

1 Dubbo½éÉÜ

1.1 dubbox¼ò½é

Ëæ×Å»¥ÁªÍøµÄ·¢Õ¹£¬ÍøÕ¾Ó¦ÓõĹæÄ£²»¶ÏÀ©´ó£¬³£¹æµÄ´¹Ö±Ó¦Óüܹ¹ÒÑÎÞ·¨Ó¦¶Ô£¬·Ö²¼Ê½·þÎñ¼Ü¹¹ÒÔ¼°Á÷¶¯¼ÆËã¼Ü¹¹ÊÆÔÚ±ØÐУ¬Ø½ÐèÒ»¸öÖÎÀíϵͳȷ±£¼Ü¹¹ÓÐÌõ²»ÎɵÄÑݽø¡£

µ¥Ò»Ó¦Óüܹ¹

µ±ÍøÕ¾Á÷Á¿ºÜСʱ£¬Ö»ÐèÒ»¸öÓ¦Ó㬽«ËùÓй¦Äܶ¼²¿ÊðÔÚÒ»Æð£¬ÒÔ¼õÉÙ²¿Êð½ÚµãºÍ³É±¾¡£

´Ëʱ£¬ÓÃÓÚ¼ò»¯Ôöɾ¸Ä²é¹¤×÷Á¿µÄ Êý¾Ý·ÃÎÊ¿ò¼Ü(ORM) Êǹؼü¡£

´¹Ö±Ó¦Óüܹ¹

µ±·ÃÎÊÁ¿Öð½¥Ôö´ó£¬µ¥Ò»Ó¦ÓÃÔö¼Ó»úÆ÷´øÀ´µÄ¼ÓËÙ¶ÈÔ½À´Ô½Ð¡£¬½«Ó¦Óòð³É»¥²»Ïà¸ÉµÄ¼¸¸öÓ¦Óã¬ÒÔÌáÉýЧÂÊ¡£

´Ëʱ£¬ÓÃÓÚ¼ÓËÙǰ¶ËÒ³Ãæ¿ª·¢µÄ Web¿ò¼Ü(MVC) Êǹؼü¡£

·Ö²¼Ê½·þÎñ¼Ü¹¹

µ±´¹Ö±Ó¦ÓÃÔ½À´Ô½¶à£¬Ó¦ÓÃÖ®¼ä½»»¥²»¿É±ÜÃ⣬½«ºËÐÄÒµÎñ³éÈ¡³öÀ´£¬×÷Ϊ¶ÀÁ¢µÄ·þÎñ£¬Öð½¥ÐγÉÎȶ¨µÄ·þÎñÖÐÐÄ£¬Ê¹Ç°¶ËÓ¦ÓÃÄܸü¿ìËÙµÄÏìÓ¦¶à±äµÄÊг¡ÐèÇó¡£

´Ëʱ£¬ÓÃÓÚÌá¸ßÒµÎñ¸´Óü°ÕûºÏµÄ ·Ö²¼Ê½·þÎñ¿ò¼Ü(RPC) Êǹؼü¡£

Á÷¶¯¼ÆËã¼Ü¹¹

µ±·þÎñÔ½À´Ô½¶à£¬ÈÝÁ¿µÄÆÀ¹À£¬Ð¡·þÎñ×ÊÔ´µÄÀ˷ѵÈÎÊÌâÖð½¥ÏÔÏÖ£¬´ËʱÐèÔö¼ÓÒ»¸öµ÷¶ÈÖÐÐÄ»ùÓÚ·ÃÎÊѹÁ¦ÊµÊ±¹ÜÀí¼¯ÈºÈÝÁ¿£¬Ìá¸ß¼¯ÈºÀûÓÃÂÊ¡£

´Ëʱ£¬ÓÃÓÚÌá¸ß»úÆ÷ÀûÓÃÂ浀 ×ÊÔ´µ÷¶ÈºÍÖÎÀíÖÐÐÄ(SOA) Êǹؼü¡£

dubboxÊÇdubboµÄÀ©Õ¹£¬Ö÷ÒªÔÚdubboµÄ»ù´¡ÉϽøÐÐÁËһϵĸĽø£º

1¡¢Ö§³ÖREST·ç¸ñÔ¶³Ìµ÷Óã¨HTTP + JSON/XML)£º»ùÓڷdz£³ÉÊìµÄJBoss RestEasy¿ò¼Ü£¬ÔÚdubboÖÐʵÏÖÁËREST·ç¸ñ£¨HTTP + JSON/XML£©µÄÔ¶³Ìµ÷Óã¬ÒÔÏÔÖø¼ò»¯ÆóÒµÄÚ²¿µÄ¿çÓïÑÔ½»»¥£¬Í¬Ê±ÏÔÖø¼ò»¯ÆóÒµ¶ÔÍâµÄOpen API¡¢ÎÞÏßAPIÉõÖÁAJAX·þÎñ¶ËµÈµÈµÄ¿ª·¢¡£ÊÂʵÉÏ£¬Õâ¸öRESTµ÷ÓÃҲʹµÃDubbo¿ÉÒÔ¶Ôµ±½ñÌØ±ðÁ÷Ðеġ°Î¢·þÎñ¡±¼Ü¹¹Ìṩ»ù´¡ÐÔÖ§³Ö¡£ ÁíÍ⣬RESTµ÷ÓÃÒ²´ïµ½Á˱ȽϸߵÄÐÔÄÜ£¬ÔÚ»ù×¼²âÊÔÏ£¬HTTP + JSONÓëDubbo 2.xĬÈϵÄRPCЭÒ飨¼´TCP + Hessian2¶þ½øÖÆÐòÁл¯£©Ö®¼äÖ»ÓÐ1.5±¶×óÓҵIJî¾à£¬Ïê¼ûÎĵµÖеĻù×¼²âÊÔ±¨¸æ¡£

2¡¢Ö§³Ö»ùÓÚKryoºÍFSTµÄJava¸ßЧÐòÁл¯ÊµÏÖ£º»ùÓÚµ±½ñ±È½ÏÖªÃûµÄKryoºÍFST¸ßÐÔÄÜÐòÁл¯¿â£¬ÎªDubboĬÈϵÄRPCЭÒéÌí¼ÓеÄÐòÁл¯ÊµÏÖ£¬²¢ÓÅ»¯µ÷ÕûÁËÆäÐòÁл¯Ìåϵ£¬±È½ÏÏÔÖøµÄÌá¸ßÁËDubbo RPCµÄÐÔÄÜ£¬Ïê¼ûÎĵµÖеĻù×¼²âÊÔ±¨¸æ¡£

3¡¢Ö§³Ö»ùÓÚJacksonµÄJSONÐòÁл¯£º»ùÓÚÒµ½çÓ¦ÓÃ×î¹ã·ºµÄJacksonÐòÁл¯¿â£¬ÎªDubboĬÈϵÄRPCЭÒéÌí¼ÓеÄJSONÐòÁл¯ÊµÏÖ¡£

4¡¢Ö§³Ö»ùÓÚǶÈëʽTomcatµÄHTTP remotingÌåϵ£º»ùÓÚǶÈëʽtomcatʵÏÖdubboµÄHTTP remotingÌåϵ£¨¼´dubbo-remoting-http£©£¬ÓÃÒÔÖð²½È¡´úDubboÖоɰ汾µÄǶÈëʽJetty£¬¿ÉÒÔÏÔÖøµÄÌá¸ßRESTµÈµÄÔ¶³Ìµ÷ÓÃÐÔÄÜ£¬²¢½«Servlet APIµÄÖ§³Ö´Ó2.5Éý¼¶µ½3.1¡££¨×¢£º³ýÁËREST£¬dubboÖеÄWebServices¡¢Hessian¡¢HTTP InvokerµÈЭÒé¶¼»ùÓÚÕâ¸öHTTP remotingÌåϵ£©¡£

5¡¢Éý¼¶Spring£º½«dubboÖÐSpringÓÉ2.xÉý¼¶µ½Ä¿Ç°×î³£ÓõÄ3.x°æ±¾£¬¼õÉÙ°æ±¾³åÍ»´øÀ´µÄÂé·³¡£

6¡¢Éý¼¶ZooKeeper¿Í»§¶Ë£º½«dubboÖеÄzookeeper¿Í»§¶ËÉý¼¶µ½×îеİ汾£¬ÒÔÐÞÕýÀϰ汾Öаüº¬µÄbug¡£

7¡¢Ö§³ÖÍêÈ«»ùÓÚJava´úÂëµÄDubboÅäÖ㺻ùÓÚSpringµÄJava Config£¬ÊµÏÖÍêÈ«ÎÞXMLµÄ´¿Java´úÂ뷽ʽÀ´ÅäÖÃdubbo

8¡¢µ÷ÕûDemoÓ¦ÓãºÔÝʱ½«dubboµÄdemoÓ¦Óõ÷Õû²¢¸ÄдÒÔÖ÷ÒªÑÝʾREST¹¦ÄÜ¡¢DubboЭÒéµÄÐÂÐòÁл¯·½Ê½¡¢»ùÓÚJava´úÂëµÄSpringÅäÖõȵȡ£

9¡¢ÐÞÕýÁËdubboµÄbug °üÀ¨ÅäÖá¢ÐòÁл¯¡¢¹ÜÀí½çÃæµÈµÈµÄbug¡£

1.2 dubbo¼Ü¹¹¹¹³É

dubboÔËÐмܹ¹ÈçÏÂͼʾ£º

½Úµã½Çɫ˵Ã÷£º

1¡¢Provider:±©Â¶·þÎñµÄ·þÎñÌṩ·½¡£ Consumer: µ÷ÓÃÔ¶³Ì·þÎñµÄ·þÎñÏû·Ñ·½¡£

2¡¢Registry:·þÎñ×¢²áÓë·¢ÏÖµÄ×¢²áÖÐÐÄ¡£ Monitor: ͳ¼Æ·þÎñµÄµ÷Óôε÷ºÍµ÷ÓÃʱ¼äµÄ¼à¿ØÖÐÐÄ¡£

3¡¢Container: ·þÎñÔËÐÐÈÝÆ÷¡£

µ÷ÓùØÏµËµÃ÷£º

1¡¢·þÎñÈÝÆ÷¸ºÔðÆô¶¯£¬¼ÓÔØ£¬ÔËÐзþÎñÌṩÕß¡£

2¡¢·þÎñÌṩÕßÔÚÆô¶¯Ê±£¬Ïò×¢²áÖÐÐÄ×¢²á×Ô¼ºÌṩµÄ·þÎñ¡£

3¡¢·þÎñÏû·ÑÕßÔÚÆô¶¯Ê±£¬Ïò×¢²áÖÐÐĶ©ÔÄ×Ô¼ºËùÐèµÄ·þÎñ¡£

4¡¢×¢²áÖÐÐÄ·µ»Ø·þÎñÌṩÕßµØÖ·ÁÐ±í¸øÏû·ÑÕߣ¬Èç¹ûÓбä¸ü£¬×¢²áÖÐÐĽ«»ùÓÚ³¤Á¬½ÓÍÆËͱä¸üÊý¾Ý¸øÏû·ÑÕß¡£

5¡¢·þÎñÏû·ÑÕߣ¬´ÓÌṩÕßµØÖ·ÁбíÖУ¬»ùÓÚÈí¸ºÔØ¾ùºâËã·¨£¬Ñ¡Ò»Ì¨ÌṩÕß½øÐе÷Óã¬Èç¹ûµ÷ÓÃʧ°Ü£¬ÔÙÑ¡Áíһ̨µ÷Óá£

6¡¢·þÎñÏû·ÑÕߺÍÌṩÕߣ¬ÔÚÄÚ´æÖÐÀۼƵ÷ÓôÎÊýºÍµ÷ÓÃʱ¼ä£¬¶¨Ê±Ã¿·ÖÖÓ·¢ËÍÒ»´Îͳ¼ÆÊý¾Ýµ½¼à¿ØÖÐÐÄ¡£

1.3 dubboµÄÌØÐÔ

(1) Á¬Í¨ÐÔ£º

×¢²áÖÐÐĸºÔð·þÎñµØÖ·µÄ×¢²áÓë²éÕÒ£¬Ï൱ÓÚĿ¼·þÎñ£¬·þÎñÌṩÕߺÍÏû·ÑÕßÖ»ÔÚÆô¶¯Ê±Óë×¢²áÖÐÐĽ»»¥£¬×¢²áÖÐÐIJ»×ª·¢ÇëÇó£¬Ñ¹Á¦½ÏС¼à¿ØÖÐÐĸºÔðͳ¼Æ¸÷·þÎñµ÷ÓôÎÊý£¬µ÷ÓÃʱ¼äµÈ£¬Í³¼ÆÏÈÔÚÄÚ´æ»ã×ܺóÿ·ÖÖÓÒ»´Î·¢Ë͵½¼à¿ØÖÐÐÄ·þÎñÆ÷£¬²¢ÒÔ±¨±íչʾ·þÎñÌṩÕßÏò×¢²áÖÐÐÄ×¢²áÆäÌṩµÄ·þÎñ£¬²¢»ã±¨µ÷ÓÃʱ¼äµ½¼à¿ØÖÐÐÄ£¬´Ëʱ¼ä²»°üº¬ÍøÂ翪Ïú·þÎñÏû·ÑÕßÏò×¢²áÖÐÐÄ»ñÈ¡·þÎñÌṩÕßµØÖ·ÁÐ±í£¬²¢¸ù¾Ý¸ºÔØËã·¨Ö±½Óµ÷ÓÃÌṩÕߣ¬Í¬Ê±»ã±¨µ÷ÓÃʱ¼äµ½¼à¿ØÖÐÐÄ£¬´Ëʱ¼ä°üº¬ÍøÂ翪Ïú×¢²áÖÐÐÄ£¬·þÎñÌṩÕߣ¬·þÎñÏû·ÑÕßÈýÕßÖ®¼ä¾ùΪ³¤Á¬½Ó£¬¼à¿ØÖÐÐijýÍâ×¢²áÖÐÐÄͨ¹ý³¤Á¬½Ó¸ÐÖª·þÎñÌṩÕߵĴæÔÚ£¬·þÎñÌṩÕßå´»ú£¬×¢²áÖÐÐĽ«Á¢¼´ÍÆËÍʼþ֪ͨÏû·ÑÕß×¢²áÖÐÐÄºÍ¼à¿ØÖÐÐÄÈ«²¿å´»ú£¬²»Ó°ÏìÒÑÔËÐеÄÌṩÕߺÍÏû·ÑÕߣ¬Ïû·ÑÕßÔÚ±¾µØ»º´æÁËÌṩÕßÁбí

×¢²áÖÐÐÄºÍ¼à¿ØÖÐÐͼÊÇ¿ÉÑ¡µÄ£¬·þÎñÏû·ÑÕß¿ÉÒÔÖ±Á¬·þÎñÌṩÕß

(2) ½¡×´ÐÔ£º

¼à¿ØÖÐÐÄå´µô²»Ó°ÏìʹÓã¬Ö»ÊǶªÊ§²¿·Ö²ÉÑùÊý¾ÝÊý¾Ý¿âå´µôºó£¬×¢²áÖÐÐÄÈÔÄÜͨ¹ý»º´æÌṩ·þÎñÁбí²éѯ£¬µ«²»ÄÜ×¢²áзþÎñ×¢²áÖÐÐĶԵȼ¯Èº£¬ÈÎÒâһ̨崵ôºó£¬½«×Ô¶¯Çл»µ½Áíһ̨ע²áÖÐÐÄÈ«²¿å´µôºó£¬·þÎñÌṩÕߺͷþÎñÏû·ÑÕßÈÔÄÜͨ¹ý±¾µØ»º´æÍ¨Ñ¶·þÎñÌṩÕßÎÞ״̬£¬ÈÎÒâһ̨崵ôºó£¬²»Ó°ÏìʹÓ÷þÎñÌṩÕßÈ«²¿å´µôºó£¬·þÎñÏû·ÑÕßÓ¦Óý«ÎÞ·¨Ê¹Ó㬲¢ÎÞÏÞ´ÎÖØÁ¬µÈ´ý·þÎñÌṩÕ߻ָ´

(3) ÉìËõÐÔ£º

×¢²áÖÐÐÄΪ¶ÔµÈ¼¯Èº£¬¿É¶¯Ì¬Ôö¼Ó»úÆ÷²¿ÊðʵÀý£¬ËùÓпͻ§¶Ë½«×Ô¶¯·¢ÏÖеÄ×¢²áÖÐÐÄ

·þÎñÌṩÕßÎÞ״̬£¬¿É¶¯Ì¬Ôö¼Ó»úÆ÷²¿ÊðʵÀý£¬×¢²áÖÐÐĽ«ÍÆËÍеķþÎñÌṩÕßÐÅÏ¢¸øÏû·ÑÕß

(4) Éý¼¶ÐÔ£º

µ±·þÎñ¼¯Èº¹æÄ£½øÒ»²½À©´ó£¬´ø¶¯ITÖÎÀí½á¹¹½øÒ»²½Éý¼¶£¬ÐèҪʵÏÖ¶¯Ì¬²¿Ê𣬽øÐÐÁ÷¶¯¼ÆË㣬ÏÖÓзֲ¼Ê½·þÎñ¼Ü¹¹²»»á´øÀ´×èÁ¦£º

1.4 dubboµÄµ÷Ó÷½Ê½

Òì²½µ÷ÓÃ

»ùÓÚNIOµÄ·Ç×èÈûʵÏÖ²¢Ðе÷Ó㬿ͻ§¶Ë²»ÐèÒªÆô¶¯¶àÏ̼߳´¿ÉÍê³É²¢Ðе÷Óöà¸öÔ¶³Ì·þÎñ£¬Ïà¶Ô¶àÏ߳̿ªÏú½ÏС¡£

±¾µØµ÷ÓÃ

±¾µØµ÷Óã¬Ê¹ÓÃÁËInjvmЭÒ飬ÊÇÒ»¸öαЭÒ飬Ëü²»¿ªÆô¶Ë¿Ú£¬²»·¢ÆðÔ¶³Ìµ÷Óã¬Ö»ÔÚJVMÄÚÖ±½Ó¹ØÁª£¬µ«Ö´ÐÐDubboµÄFilterÁ´¡£

Define injvm protocol:

<dubbo:protocol name="injvm" />

Set default protocol:

<dubbo:provider protocol="injvm" />

Set service protocol:

<dubbo:service protocol="injvm" />

Use injvm first:

<dubbo:consumer injvm="true" .../>
<dubbo:provider injvm="true" .../>
»ò
<dubbo:reference injvm="true" .../>
<dubbo:service injvm="true" .../>

×¢Ò⣺·þÎñ±©Â¶Óë·þÎñÒýÓö¼ÐèÒªÉùÃ÷injvm=¡°true¡±

1.5 dubboÖ§³ÖµÄ×¢²áÖÐÐÄ

DubboÌṩµÄ×¢²áÖÐÐÄÓÐÈçϼ¸ÖÖÀàÐͿɹ©Ñ¡Ôñ£º

1.Multicast×¢²áÖÐÐÄ

2.Zookeeper×¢²áÖÐÐÄ

3.Redis×¢²áÖÐÐÄ

4.Simple×¢²áÖÐÐÄ

ZooKeeperÊÇÒ»¸ö¿ªÔ´µÄ·Ö²¼Ê½·þÎñ¿ò¼Ü£¬ËüÊÇApache HadoopÏîÄ¿µÄÒ»¸ö×ÓÏîÄ¿£¬Ö÷ÒªÓÃÀ´½â¾ö·Ö²¼Ê½Ó¦Óó¡¾°ÖдæÔÚµÄһЩÎÊÌ⣬È磺ͳһÃüÃû·þÎñ¡¢×´Ì¬Í¬²½·þÎñ¡¢¼¯Èº¹ÜÀí¡¢·Ö²¼Ê½Ó¦ÓÃÅäÖùÜÀíµÈ£¬ËüÖ§³ÖStandaloneģʽºÍ·Ö²¼Ê½Ä£Ê½£¬ÔÚ·Ö²¼Ê½Ä£Ê½Ï£¬Äܹ»Îª·Ö²¼Ê½Ó¦ÓÃÌṩ¸ßÐÔÄܺͿɿ¿µØÐ­µ÷·þÎñ£¬¶øÇÒʹÓÃZooKeeper¿ÉÒÔ´ó´ó¼ò»¯·Ö²¼Ê½Ð­µ÷·þÎñµÄʵÏÖ£¬Îª¿ª·¢·Ö²¼Ê½Ó¦Óü«´óµØ½µµÍÁ˳ɱ¾¡£

ZooKeeper×ÜÌå¼Ü¹¹

ZooKeeper¼¯ÈºÓÉÒ»×éServer½Úµã×é³É£¬ÕâÒ»×éServer½ÚµãÖдæÔÚÒ»¸ö½ÇɫΪLeaderµÄ½Úµã£¬ÆäËû½Úµã¶¼ÎªFollower¡£µ±¿Í»§¶ËClientÁ¬½Óµ½ZooKeeper¼¯Èº£¬²¢ÇÒÖ´ÐÐдÇëÇóʱ£¬ÕâЩÇëÇó»á±»·¢Ë͵½Leader½ÚµãÉÏ£¬È»ºóLeader½ÚµãÉÏÊý¾Ý±ä¸ü»áͬ²½µ½¼¯ÈºÖÐÆäËûµÄFollower½Úµã¡£

1.6 dubboÖ§³ÖµÄÔ¶³ÌͨÐÅЭÒé

Ô¶³ÌͨÐÅÐèÒªÖ¸¶¨Í¨ÐÅË«·½ËùÔ¼¶¨µÄЭÒ飬ÔÚ±£Ö¤Í¨ÐÅË«·½Àí½âЭÒéÓïÒåµÄ»ù´¡ÉÏ£¬»¹Òª±£Ö¤¸ßЧ¡¢Îȶ¨µÄÏûÏ¢´«Êä¡£Dubbo¼Ì³ÐÁ˵±Ç°Ö÷Á÷µÄÍøÂçͨÐÅ¿ò¼Ü£¬Ö÷Òª°üÀ¨Èçϼ¸¸ö£º

1.Mina

2.Netty

3.Grizzly

1.7 dubboÖ§³ÖµÄÔ¶³Ìµ÷ÓÃЭÒé

DubboÖ§³Ö¶àÖÖЭÒ飬ÈçÏÂËùʾ£º

1.DubboЭÒé

2.HessianЭÒé

3.HTTPЭÒé

4.RMIЭÒé

5.WebServiceЭÒé

6.ThriftЭÒé

7.MemcachedЭÒé

RedisЭÒéÔÚͨÐŹý³ÌÖУ¬²»Í¬µÄ·þÎñµÈ¼¶Ò»°ã¶ÔÓ¦×Ų»Í¬µÄ·þÎñÖÊÁ¿£¬ÄÇôѡÔñºÏÊʵÄЭÒé±ãÊÇÒ»¼þ·Ç³£ÖØÒªµÄÊÂÇé¡£Äã¿ÉÒÔ¸ù¾ÝÄãÓ¦ÓõĴ´½¨À´Ñ¡Ôñ¡£ÀýÈ磬ʹÓÃRMIЭÒ飬һ°ã»áÊܵ½·À»ðǽµÄÏÞÖÆ£¬ËùÒÔ¶ÔÓÚÍⲿÓëÄÚ²¿½øÐÐͨÐŵij¡¾°£¬¾Í²»ÒªÊ¹ÓÃRMIЭÒ飬¶øÊÇ»ùÓÚHTTPЭÒé»òÕßHessianЭÒé¡£

1.8 dubbo¼¯ÈºÈÝ´íºÍ¸ºÔؾùºâ

1¡¢¼¯ÈºÈÝ´í

ÔÚ¼¯Èºµ÷ÓÃʧ°Üʱ£¬DubboÌṩÁ˶àÖÖÈÝ´í·½°¸£¬È±Ê¡ÎªfailoverÖØÊÔ¡£

Failover Cluster

ʧ°Ü×Ô¶¯Çл»£¬µ±³öÏÖʧ°Ü£¬ÖØÊÔÆäËü·þÎñÆ÷¡£(ȱʡ)

ͨ³£ÓÃÓÚ¶Á²Ù×÷£¬µ«ÖØÊÔ»á´øÀ´¸ü³¤ÑÓ³Ù¡£

¿Éͨ¹ýretries=¡°2¡±À´ÉèÖÃÖØÊÔ´ÎÊý(²»º¬µÚÒ»´Î)¡£

Failfast Cluster

¿ìËÙʧ°Ü£¬Ö»·¢ÆðÒ»´Îµ÷Óã¬Ê§°ÜÁ¢¼´±¨´í¡£

ͨ³£ÓÃÓÚ·ÇÃݵÈÐÔµÄд²Ù×÷£¬±ÈÈçÐÂÔö¼Ç¼¡£

Failsafe Cluster

ʧ°Ü°²È«£¬³öÏÖÒ쳣ʱ£¬Ö±½ÓºöÂÔ¡£

ͨ³£ÓÃÓÚдÈëÉó¼ÆÈÕÖ¾µÈ²Ù×÷¡£

Failback Cluster

ʧ°Ü×Ô¶¯»Ö¸´£¬ºǫ́¼Ç¼ʧ°ÜÇëÇ󣬶¨Ê±ÖØ·¢¡£

ͨ³£ÓÃÓÚÏûϢ֪ͨ²Ù×÷¡£

Forking Cluster

²¢Ðе÷Óöà¸ö·þÎñÆ÷£¬Ö»ÒªÒ»¸ö³É¹¦¼´·µ»Ø¡£

ͨ³£ÓÃÓÚʵʱÐÔÒªÇó½Ï¸ßµÄ¶Á²Ù×÷£¬µ«ÐèÒªÀ˷Ѹü¶à·þÎñ×ÊÔ´¡£

¿Éͨ¹ýforks=¡°2¡±À´ÉèÖÃ×î´ó²¢ÐÐÊý¡£

Broadcast Cluster

¹ã²¥µ÷ÓÃËùÓÐÌṩÕߣ¬Öð¸öµ÷Óã¬ÈÎÒâһ̨±¨´íÔò±¨´í¡£(2.1.0¿ªÊ¼Ö§³Ö)

ͨ³£ÓÃÓÚ֪ͨËùÓÐÌṩÕ߸üлº´æ»òÈÕÖ¾µÈ±¾µØ×ÊÔ´ÐÅÏ¢¡£

2¡¢¸ºÔؾùºâ

- Random LoadBalanceËæ»ú£¬°´È¨ÖØÉèÖÃËæ»ú¸ÅÂÊ¡£

ÔÚÒ»¸ö½ØÃæÉÏÅöײµÄ¸ÅÂʸߣ¬µ«µ÷ÓÃÁ¿Ô½´ó·Ö²¼Ô½¾ùÔÈ£¬¶øÇÒ°´¸ÅÂÊʹÓÃÈ¨ÖØºóÒ²±È½Ï¾ùÔÈ£¬ÓÐÀûÓÚ¶¯Ì¬µ÷ÕûÌṩÕßÈ¨ÖØ¡£

RoundRobin LoadBalance ÂÖÑ­£¬°´¹«Ô¼ºóµÄÈ¨ÖØÉèÖÃÂÖÑ­±ÈÂÊ¡£

´æÔÚÂýµÄÌṩÕßÀÛ»ýÇëÇóÎÊÌ⣬±ÈÈ磺µÚ¶þ̨»úÆ÷ºÜÂý£¬µ«Ã»¹Ò£¬µ±ÇëÇóµ÷µ½µÚ¶þ̨ʱ¾Í¿¨ÔÚÄÇ£¬¾Ã¶ø¾ÃÖ®£¬ËùÓÐÇëÇ󶼿¨ÔÚµ÷µ½µÚ¶þ̨ÉÏ¡£

LeastActive LoadBalance ×îÉÙ»îÔ¾µ÷ÓÃÊý£¬Ïàͬ»îÔ¾ÊýµÄËæ»ú£¬»îÔ¾ÊýÖ¸µ÷ÓÃǰºó¼ÆÊý²î¡£

ʹÂýµÄÌṩÕßÊÕµ½¸üÉÙÇëÇó£¬ÒòΪԽÂýµÄÌṩÕߵĵ÷ÓÃǰºó¼ÆÊý²î»áÔ½´ó¡£

ConsistentHash LoadBalance Ò»ÖÂÐÔHash£¬Ïàͬ²ÎÊýµÄÇëÇó×ÜÊÇ·¢µ½Í¬Ò»ÌṩÕß¡£

µ±Ä³Ò»Ì¨ÌṩÕß¹Òʱ£¬Ô­±¾·¢Íù¸ÃÌṩÕßµÄÇëÇ󣬻ùÓÚÐéÄâ½Úµã£¬Æ½Ì¯µ½ÆäËüÌṩÕߣ¬²»»áÒýÆð¾çÁұ䶯¡£

ÅäÖÃÈ磺

<dubbo:service interface="..." loadbalance="roundrobin" />

1.9 dubboÔ´´úÂë½á¹¹

DubboÒÔ°ü½á¹¹À´×éÖ¯¸÷¸öÄ£¿é£¬¸÷¸öÄ£¿é¼°Æä¹ØÏµ£¬ÈçͼËùʾ£º

dubbo-common ¹«¹²Âß¼­Ä£¿é£¬°üÀ¨UtilÀàºÍͨÓÃÄ£ÐÍ¡£

dubbo-remoting Ô¶³ÌͨѶģ¿é£¬Ï൱ÓÚDubboЭÒéµÄʵÏÖ£¬Èç¹ûRPCÓÃRMIЭÒéÔò²»ÐèҪʹÓô˰ü¡£

dubbo-rpc Ô¶³Ìµ÷ÓÃÄ£¿é£¬³éÏó¸÷ÖÖЭÒ飬ÒÔ¼°¶¯Ì¬´úÀí£¬Ö»°üº¬Ò»¶ÔÒ»µÄµ÷Ó㬲»¹ØÐļ¯ÈºµÄ¹ÜÀí¡£

dubbo-cluster ¼¯ÈºÄ£¿é£¬½«¶à¸ö·þÎñÌṩ·½Î±×°ÎªÒ»¸öÌṩ·½£¬°üÀ¨£º¸ºÔؾùºâ¡¢ÈÝ´í¡¢Â·Óɵȣ¬¼¯ÈºµÄµØÖ·Áбí¿ÉÒÔÊǾ²Ì¬ÅäÖõģ¬Ò²¿ÉÒÔÊÇÓÉ×¢²áÖÐÐÄÏ·¢¡£

dubbo-registry ×¢²áÖÐÐÄÄ£¿é£¬»ùÓÚ×¢²áÖÐÐÄÏ·¢µØÖ·µÄ¼¯Èº·½Ê½£¬ÒÔ¼°¶Ô¸÷ÖÖ×¢²áÖÐÐĵijéÏó¡£

dubbo-monitor ¼à¿ØÄ£¿é£¬Í³¼Æ·þÎñµ÷ÓôÎÊý£¬µ÷ÓÃʱ¼äµÄ£¬µ÷ÓÃÁ´¸ú×ٵķþÎñ¡£

dubbo-config ÅäÖÃÄ£¿é£¬ÊÇDubbo¶ÔÍâµÄAPI£¬Óû§Í¨¹ýConfigʹÓÃDubbo£¬Òþ²ØDubboËùÓÐϸ½Ú¡£

dubbo-container ÈÝÆ÷Ä£¿é£¬ÊÇÒ»¸öStandaloneµÄÈÝÆ÷£¬ÒÔ¼òµ¥µÄMain¼ÓÔØSpringÆô¶¯£¬ÒòΪ·þÎñͨ³£²»ÐèÒªTomcat/JBossµÈWebÈÝÆ÷µÄÌØÐÔ£¬Ã»±ØÒªÓÃWebÈÝÆ÷È¥¼ÓÔØ·þÎñ¡£

1.10 DubboÄÚºËʵÏÖÖ®SPI¼òµ¥½éÉÜ

Dubbo²ÉÓÃ΢ÄÚºË+²å¼þÌåϵ£¬Ê¹µÃÉè¼ÆÓÅÑÅ£¬À©Õ¹ÐÔÇ¿¡£ÄÇËùνµÄ΢ÄÚºË+²å¼þÌåϵÊÇÈçºÎʵÏÖµÄÄØ£¡¼´ÎÒÃǶ¨ÒåÁË·þÎñ½Ó¿Ú±ê×¼£¬Èó§ÉÌȥʵÏÖ£¨Èç¹û²»Á˽âspiµÄÇë¹È¸è°Ù¶ÈÏ£©, jdkͨ¹ýServiceLoaderÀàʵÏÖspi»úÖÆµÄ·þÎñ²éÕÒ¹¦ÄÜ¡£

JDKʵÏÖspi·þÎñ²éÕÒ: ServiceLoader

Ê×Ïȶ¨ÒåÏÂʾÀý½Ó¿Ú

package com.example;

public interface Spi {

booleanisSupport(String name);

String sayHello();

}

ServiceLoader»á±éÀúËùÓÐjar²éÕÒMETA-INF/services/com.example.SpiÎļþ

A³§ÉÌÌṩʵÏÖ

package com.a.example;

public class SpiAImpl implements Spi {

publicboolean isSupport(String name) {

return"SPIA".equalsIgnoreCase(name.trim());

} public String syaHello() {

return ¡°hello ÎÒÊdz§ÉÌA¡±;

}

}

ÔÚA³§ÉÌÌṩµÄjar°üÖеÄMETA-INF/services/com.example.SpiÎļþÄÚÈÝΪ£º

com.a.example.SpiAImpl #³§ÉÌAµÄspiʵÏÖȫ·¾¶ÀàÃû

B³§ÉÌÌṩʵÏÖ

package com.b.example;

public class SpiBImpl implements Spi {

publicboolean isSupport(String name) {

return"SPIB".equalsIgnoreCase(name.trim());

}

public String syaHello() {

return ¡°hello ÎÒÊdz§ÉÌB¡±;

}

}

ÔÚB³§ÉÌÌṩµÄjar°üÖеÄMETA-INF/services/com.example.SpiÎļþÄÚÈÝΪ£º

com.b.example.SpiBImpl #³§ÉÌBµÄspiʵÏÖȫ·¾¶ÀàÃû

ServiceLoader.load(Spi.class)¶ÁÈ¡³§ÉÌA¡¢BÌṩjar°üÖеÄÎļþ£¬ServiceLoaderʵÏÖÁËIterable½Ó¿Ú¿Éͨ¹ýwhile forÑ­»·Óï¾ä±éÀú³öËùÓÐʵÏÖ¡£

Ò»¸ö½Ó¿Ú¶àÖÖʵÏÖ£¬¾ÍÈç²ßÂÔģʽһÑùÌṩÁ˲ßÂÔµÄʵÏÖ£¬µ«ÊÇûÓÐÌṩ²ßÂÔµÄÑ¡Ôñ£¬ ʹÓ÷½¿ÉÒÔ¸ù¾ÝisSupport·½·¨¸ù¾ÝÒµÎñ´«Èë³§ÉÌÃûÀ´Ñ¡Ôñ¾ßÌåµÄ³§ÉÌ¡£

public class SpiFactory {

//¶ÁÈ¡ÅäÖûñÈ¡ËùÓÐʵÏÖ

privatestatic ServiceLoader spiLoader = ServiceLoader.load(Spi.class);

//¸ù¾ÝÃû×Öѡȡ¶ÔӦʵÏÖ

publicstatic Spi getSpi(String name) {

for(Spi spi : spiLoader) {

if(spi.isSupport(name) ) {

returnspi;

}

}

returnnull;

}

}

SPI½Ó¿Ú¶¨Òå

¶¨ÒåÁË@SPI×¢½â

public @interface SPI {

Stringvalue() default ""; //Ö¸¶¨Ä¬ÈϵÄÀ©Õ¹µã

}

Ö»ÓÐÔÚ½Ó¿Ú´òÁË@SPI×¢½âµÄ½Ó¿ÚÀà²Å»áÈ¥²éÕÒÀ©Õ¹µãʵÏÖ£¬»áÒÀ´Î´ÓÕ⼸¸öÎļþÖжÁÈ¡À©Õ¹µã

META-INF/dubbo/internal/ //dubboÄÚ²¿ÊµÏֵĸ÷ÖÖÀ©Õ¹¶¼·ÅÔÚÁËÕâ¸öĿ¼ÁË

META-INF/dubbo/

META-INF/services/

ÎÒÃÇÒÔProtocol½Ó¿ÚΪÀý£¬ ½Ó¿ÚÉÏ´òÉÏSPI×¢½â£¬Ä¬ÈÏÀ©Õ¹µãÃû×ÖΪdubbo

@SPI("dubbo")

public interface Protocol{

}

¾ßÌåʵÏÖµÄÀàÓÐ:

ËùÒÔ˵£ºRemotingʵÏÖÊÇDubboЭÒéµÄʵÏÖ

2 Dubbo¼Ü¹¹²¿Êð´î½¨

2.1 ×¼±¸¹¤×÷

ÔÚ¿ªÊ¼´î½¨dubbox·þÎñ¼Ü¹¹Ç°ÐèÒªÍê³ÉÒÔÏÂ×¼±¸¹¤×÷£º

ÏÂÔØ°²×°ÔËÐÐzookeeper ¾ßÌå°²×°¹ý³ÌÏê¼ûzookeeper¹ÙÍø£ºhttp://zookeeper.apache.org/ ʹÓð汾Ϊ

3.4.7

ÏÂÔØ°²×°tomcat ¾ßÌå°²×°¹ý³ÌÏê¼ûzookeeper¹ÙÍø£ºhttp://tomcat.apache.org/ ʹÓð汾Ϊ£º7.0.67

ÏÂÔØdubbox´úÂë githubµØÖ·£ºhttp://dangdangdotcom.github.io/dubbox

2.2 build dubboxÔ´Âë

ÏÂÔØºÃdubboxµÄÔ´´úÂëÖ®ºó£¬¿ÉÒÔ¿´µ½dubboxµÄÏîÄ¿¼Ü¹¹¹¹³ÉÈçÏ£º

´ÓÉÏͼ¿ÉÒÔ¿´³ödubbox°üº¬µÄ¸÷¸ö×é¼þºÍ¹¦ÄÜÄ£¿é¡£

ÆäÖÐdubbo-adminΪdubboxµÄ¼à¿Ø¹ÜÀíÆ½Ì¨¡£dubbo-demoÖÐÓÐÌṩһЩdubboxµÄ¸÷ÖÖʹÓÃʵÀý¡£ÎÒÃÇͨ¹ýÔËÐÐdubbo-demoÖÐÌṩµÄ¹¦ÄÜʵÀýÀ´Á˽âdubboxµÄʹÓúʹóÖÂÔËÐÐÔ­Àí¡£

ÔÚdubboxÖеĹٷ½githubÖÐÌṩÁËÈçϵÄ˵Ã÷£º

1¡¢git clone https://github.com/dangdangdotcom/dubbox

2¡¢ÔÚcheckout³öÀ´µÄdubboxĿ¼ִÐÐmvn install -Dmaven.test.skip=trueÀ´³¢ÊÔ±àÒëÒ»ÏÂdubbo£¨²¢½«dubboµÄjar°²×°µ½±¾µØmaven¿â£©

3¡¢ÔÚcheckout³öÀ´µÄdubbox¸ùĿ¼ִÐÐmvn idea:idea»òÕßmvn

eclipse:eclipse£¬À´´´½¨IDE¹¤³ÌÎļþ

4¡¢½«ÏîÄ¿µ¼ÈëIDE

5¡¢ÏÂÔØ½âѹһ¸özookeeper£¬±à¼­Æäconf/zoo.cfgºóÆô¶¯zookeeperÓÃ×÷dubbo×¢²áÖÐÐÄ£ºbin/zkServer.sh start

6¡¢ÓÃIDEÔËÐÐ/dubbo-demo/dubbo-demo-provider/¡­/testĿ¼ÏµÄDemoProviderÆô¶¯dubbo·þÎñ¶Ë£¬Ä¿Ç°Ëû»á·Ö±ðÆô¶¯dubboЭÒ飨°üÀ¨ÓÃkryoºÍFSTÐòÁл¯£©ºÍRESTЭÒéµÄ·þÎñ

7¡¢ÓÃIDEÔËÐÐ/dubbo-demo/dubbo-demo-consumer/¡­/testĿ¼ÏµÄDemoConsumerÀ´Æô¶¯dubbo¿Í»§¶Ëµ÷ÓÃÉÏÃæµÄ·þÎñ¶Ë£¬Ö±½Ó¿´consoleµÄÊä³ö¼´¿É

8¡¢ÓÃIDEÔËÐÐ/dubbo-demo/dubbo-demo-consumer/¡­/testĿ¼ÏµÄRestClientÀ´Æô¶¯rest¿Í»§¶Ë£¨Ä£Äâ·ÇdubboµÄrest¿Í»§¶Ë£©µ÷ÓÃÉÏÃæµÄ·þÎñ¶Ë£¬Ö±½Ó¿´consoleµÄÊä³ö¼´¿É

9¡¢¿ÉÒÔÔÚä¯ÀÀÆ÷ÖÐÖ±½Ó·ÃÎÊhttp://localhost:8888/services/users/100.xml»òÕßhttp://localhost:8888/services/users/101.jsonÖ®ÀàÀ´²âÊÔREST·þÎñ

10¡¢Á˽âtomcatºÍIDE¼¯³ÉµÄͬÊ£¬¿ÉÒÔÖ±½ÓÔÚIDEÖн«/dubbo-demo/dubbo-demo-provider/²¿Êðµ½tomcatÉÏ£¬ÓÃtomcatµÄservletÈÝÆ÷À´·¢²¼REST·þÎñ£¨ÒªÍ¬Ê±ÐÞ¸Ädubbo-demo-provider.xml£¬Çë¿´ÄǸöÎļþÖеÄ×¢ÊÍ£©£¬È»ºóÓÃ6¡¢7¡¢8Öеķ½Ê½À´·ÃÎÊËü¡££¨µ±È»Ò²¿ÉÒÔÔÚÃüÁîÐÐÖ±½Ómvn package£¬È»ºó½«Éú³ÉµÄwar²¿Êðµ½ÍâÃæµÄtomcatÖÐ×ö²âÊÔ£©

11¡¢Èç¹ûÏë¿´·þÎñ¼à¿ØÐ§¹û£¬»òÕß±ÜÃâdemoÅ׳öÕÒ²»µ½¼à¿ØµÄÒì³£¾¯¸æ£¬ÓÃIDEÔËÐÐ/dubbo-simple/dubbo-simple-monitor/¡­/testĿ¼ÏµÄSimpleMonitorÀ´Æô¶¯¼à¿ØÖÐÐļ´¿É¡£

ÏÂÔØ´úÂ룬ִÐÐϱߵÄÃüÁ

mvn install -Dmaven.test.skip=true

µ«ÊǾ­²âÊÔÈçÖ±½Ómvn install µÄ»°»á³öÏÖһϵÁеÄbuild ʧ°ÜÐÅÏ¢¡£

ÐèÒªÏÈÐÞ¸Ädubbox¸ùĿ¼ÏµÄpom.xmlÎļþ£¬×¢ÊÍ£º

<!--<plugin>-->
<!--<groupId>org.apache.maven.plugins</groupId>-->
<!--<artifactId>maven-surefire-plugin</artifactId>-->
<!--<configuration>-->
<!--<testFailureIgnore>true</testFailureIgnore>-->
<!--</configuration>-->
<!--</plugin>-->
<!--<plugin>-->
<!--<groupId>org.apache.maven.plugins</groupId>-->
<!--<artifactId>maven-surefire-plugin</artifactId>-->
<!--<version>${maven-surefire-plugin_version}</version>-->
<!--<configuration>-->
<!--<useSystemClassLoader>true</useSystemClassLoader>-->
<!--<forkMode>once</forkMode>-->
<!--<argLine>${argline}</argLine>-->
<!--<systemProperties>-->
<!--<!¨C common shared ¨C>-->
<!--<property>-->
<!--<name>transporter</name>-->
<!--<value>${transporter}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>serialization</name>-->
<!--<value>${serialization}</value>-->
<!--</property>-->
<!--<!¨C server side ¨C>-->
<!--<property>-->
<!--<name>port</name>-->
<!--<value>${port}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>threadpool</name>-->
<!--<value>${threadpool}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>threads</name>-->
<!--<value>${threads}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>iothreads</name>-->
<!--<value>${iothreads}</value>-->
<!--</property>-->
<!--<!¨C client side ¨C>-->
<!--<property>-->
<!--<name>server</name>-->
<!--<value>${server}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>timeout</name>-->
<!--<value>${timeout}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>length</name>-->
<!--<value>${length}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>connections</name>-->
<!--<value>${connections}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>base</name>-->
<!--<value>${base}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>concurrent</name>-->
<!--<value>${concurrent}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>runs</name>-->
<!--<value>${runs}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>onerror</name>-->
<!--<value>${onerror}</value>-->
<!--</property>-->
<!--</systemProperties>-->
<!--</configuration>-->
<!--</plugin>-->
<!--<plugin>-->
<!--<groupId>org.apache.maven.plugins</groupId>-->
<!--<artifactId>maven-surefire-plugin</artifactId>-->
<!--<version>${maven-surefire-plugin_version}</version>-->
<!--<configuration>-->
<!--<useSystemClassLoader>true</useSystemClassLoader>-->
<!--<forkMode>once</forkMode>-->
<!--<argLine>${argline}</argLine>-->
<!--<systemProperties>-->
<!--<!¨C common shared ¨C>-->
<!--<property>-->
<!--<name>transporter</name>-->
<!--<value>${transporter}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>serialization</name>-->
<!--<value>${serialization}</value>-->
<!--</property>-->
<!--<!¨C server side ¨C>-->
<!--<property>-->
<!--<name>port</name>-->
<!--<value>${port}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>threadpool</name>-->
<!--<value>${threadpool}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>threads</name>-->
<!--<value>${threads}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>iothreads</name>-->
<!--<value>${iothreads}</value>-->
<!--</property>-->
<!--<!¨C client side ¨C>-->
<!--<property>-->
<!--<name>server</name>-->
<!--<value>${server}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>timeout</name>-->
<!--<value>${timeout}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>length</name>-->
<!--<value>${length}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>connections</name>-->
<!--<value>${connections}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>base</name>-->
<!--<value>${base}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>concurrent</name>-->
<!--<value>${concurrent}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>runs</name>-->
<!--<value>${runs}</value>-->
<!--</property>-->
<!--<property>-->
<!--<name>onerror</name>-->
<!--<value>${onerror}</value>-->
<!--</property>-->
<!--</systemProperties>-->
<!--</configuration>-->
<!--</plugin>-->

µÈ²¿·Ö¡£

È»ºóÔÙÔËÐÐmvn install£¬ Ò»°ãÇé¿öÏÂÓпÉÄÜ»¹ÊÇ»ábuildʧ°Ü¡£

³¢ÊÔ²»Í¬µÄÍøÂç»·¾³ÏÂbuild£¬×Ü»á³É¹¦µÄ¡£

2.3 ÔËÐÐdubbox-admin

Ôڳɹ¦µÄbuildºÃdubboxÔ´´úÂëÖ®ºó£¬¿ÉÒÔÔÚIDEÖÐÔËÐÐdubbo-demoÏîÄ¿ÖеÄÀý×Ó¡£

ÔÚÔËÐÐ֮ǰÐèÒª£º

1.Æô¶¯zookeeper Ö´ÐÐÈçÏÂÃüÁîÆô¶¯£º

bin/zkServer.sh start

2.²âÊÔÁ¬½Ózookeeper Ö´ÐÐÈçÏÂÃüÁî²âÊÔÁ¬½Ó

bin/zkCli.sh -server ip:¶Ë¿Ú

Èç¹û·¢ÏÖÄãȷʵÆô¶¯ÁËzookeeper,µ«ÊÇÁ¬½Ó²»ÉϵÄÇé¿ö¡£Çë¼ì²é·À»ðǽÉèÖá£

3.²¿Êðdubbo-adminµ½ÄãµÄtomcat

Ê×ÏÈÐèÒª½«dubbo-admin.war½âѹºó¿½±´ËùÓеÄÎļþµ½ webappϵÄ/ROOTĿ¼ÖУ¨Ê×ÏÈÇëɾ³ýROOTĿ¼ÖеÄËùÓÐÎļþ£©¡£ È»ºóÔÚ²¿ÊðĿ¼£¨¼´/ROOTĿ¼£©ÏµÄWEB-INFĿ¼ÖÐÕÒµ½dubbo.propertiesÎļþ£¬´ò¿ª¸ÃÎļþÓÐÈçÏÂÅäÖÃÏ

dubbo.registry.address=zookeeper://121.40.97.224:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest

ÆäÖÐdubbo.registry.addressÏîÐèÒªÅäÖÃΪע²áÖÐÐĵĵØÖ·ºÍ¶Ë¿Ú£¬Ò²¾ÍÊÇzookeeperµÄµØÖ·ºÍ¶Ë¿Ú

dubbo.admin.root.passwordΪroot¹ÜÀíÓû§µÄµÇ¼ÃÜÂë¡£

dubbo.admin.guest.passwordΪguestÓû§µÄµÇ¼ÃÜÂë¡£

Æô¶¯tomcat·ÃÎÊdubbo-admin£º

http://127.0.0.1:8686 ¿ÉÒÔ¿´µ½×¢²áÖÐÐĵÄϵͳ»·¾³£¬ÏµÍ³×´Ì¬ÒѾ­¹©ÕßÇé¿ö

2.4 ÉèÖÃdubbo-demoÖеÄÅäÖã¬Ìí¼Ódubbo·þÎñÌṩÕß

1.ÐÞ¸ÄÅäÖÃÎļþ£¬ÉèÖÃ×¢²áÖÐÐĵĵØÖ·Îª°²×°ºÃµÄzookeeper

<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright 1999-2011 Alibaba Group.
-
- Licensed under the Apache License, Version 2.0

(the "License");
- you may not use this file except in compliance

with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to

in writing, software
- distributed under the License is distributed on

an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,

either express or implied.
- See the License for the specific language

governing permissions and
- limitations under the License.
-->
<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-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-provider" owner=

"programmer" organization="dubbox"/>
<!--´Ë´¦ÐÞ¸ÄΪ°²×°µÄ×¢²áÖÐÐÄzookeeperµØÖ·-->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!--uncomment this if you want to test dubbo's monitor-->
<!--<dubbo:monitor protocol="registry"/>-->
<!-- here we demonstrate both annotation-based and

xml-based configs -->
<dubbo:annotation package="com.alibaba.dubbo.demo.

user.facade" />
<dubbo:protocol name="dubbo" serialization="kryo" optimizer="com.alibaba.dubbo.demo.Serialization

OptimizerImpl"/>
<!--<dubbo:protocol name="dubbo" serialization="fst" optimizer="com.alibaba.dubbo.demo.Serialization

OptimizerImpl"/>-->
<!--<dubbo:protocol name="dubbo" serialization=

"nativejava"/>-->
<!--<dubbo:protocol name="dubbo" serialization=

"hessian2"/>-->
<!--<dubbo:protocol name="dubbo" serialization=

"fastjson"/>-->
<!--<dubbo:protocol name="dubbo" serialization=

"dubbo"/>--> <!--TODO according to the spring

convention, we should use something like keep-alive-->
<!-- use netty server -->
<!--<dubbo:protocol name="rest" port="8888"

keepalive="true" server="netty" iothreads="5" threads="100" contextpath="services"/>-->
<!-- use tjws server -->
<!--<dubbo:protocol name="rest" port="8888" server="tjws" contextpath="services"/>-->
<!-- use tomcat server 8888 -->
<dubbo:protocol name="rest" port="8888" threads="500" contextpath="services" server="tomcat" accepts="500"
extension="com.alibaba.dubbo.demo.extension.

TraceInterceptor,
com.alibaba.dubbo.demo.extension.TraceFilter,
com.alibaba.dubbo.demo.extension.ClientTraceFilter,
com.alibaba.dubbo.demo.extension.DynamicTraceBinding,
com.alibaba.dubbo.demo.extension.CustomExceptionMapper,
com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter"/>
<!-- use the external tomcat or other server with the servlet approach; the port and contextpath must be exactly

the same as those in external server -->
<!-- <dubbo:protocol name="rest" port="6080"

contextpath="services" server="servlet"/> -->
<!-- <dubbo:protocol name="rest" server="servlet"/> -->
<dubbo:protocol name="http" port="8889"/>
<dubbo:protocol name="hessian" port="8890"/>
<dubbo:protocol name="webservice" port="8892"/>
<dubbo:service interface="com.alibaba.dubbo.demo.

bid.BidService" ref="bidService" protocol="dubbo"/>
<!-- we add the group property since there's another

annotation-configured service impl: com.alibaba.dubbo.demo.user.facade.Annotation

DrivenUserRestServiceImpl -->
<dubbo:service interface="com.alibaba.dubbo.demo.user.

UserService" ref="userService" protocol="dubbo"

group="xmlConfig"/><dubbo:service interface="com.alibaba.dubbo.demo.user.facade.UserRestService" ref="userRestService" protocol="rest" validation="true"/>
<dubbo:service interface="com.alibaba.dubbo.demo.user.facade.

AnotherUserRestService" ref="anotherUserRestService"

protocol="rest" timeout="2000" connections="100"

validation="true"/>
<bean id="bidService" class="com.alibaba.dubbo.demo.

bid.BidServiceImpl" />
<bean id="userService" class="com.alibaba.dubbo.demo.user.UserServiceImpl" />
<bean id="userRestService" class="com.alibaba.dubbo.demo.user.facade.UserRest

ServiceImpl">
<property name="userService" ref="userService"/>
</bean>
<bean id="anotherUserRestService" class="com.alibaba.dubbo.demo.user.facade.Another

UserRestServiceImpl">
<property name="userService" ref="userService"/>
</bean>
</beans>

2.5 ²¿ÊðÔËÐÐdubbo-demo-provider,dubbo-demo-consumerµ½²âÊÔ·þÎñÆ÷

½«buildÖ®ºóµÄdubbo-demo-provider,dubbo-demo-consumerµÄtargetĿ¼´ò°üÉÏ´«ÖÁÐèÒª²¿ÊðµÄ·þÎñ¶Ë¡£

½âѹºóÔÚtargetĿ¼±àдÆô¶¯½Å±¾£º

#!/bin/bash
java -classpath /root/dubbox/demo/WEB-INF/classes:/root/dubbox/demo/WEB-INF/lib/*:/root/tomcat/apache-tomcat-7.0.65/lib/* com.alibaba.dubbo.demo.user.facade.DemoProvider >>dubbox.log 2>&1&

ÐèҪעÒ⽫ËùÓÐÒÀÀµµÄjar°ü ÀàÎļþÌí¼Óµ½classpath.

ÔËÐиýű¾£¬¹Û²ìdubbo-adminÖÐµÄ¼à¿ØÇé¿ö

 

   
2562 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö