| ±à¼ÍƼö: |
| ±¾ÎÄÀ´×ÔÓÚ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 Ö´ÐÐÈçÏÂÃüÁîÆô¶¯£º
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ÖÐµÄ¼à¿ØÇé¿ö
|