DubboÊÇAlibaba¿ªÔ´µÄ·Ö²¼Ê½·þÎñ¿ò¼Ü£¬ÎÒÃÇ¿ÉÒԷdz£ÈÝÒ×µØÍ¨¹ýDubboÀ´¹¹½¨·Ö²¼Ê½·þÎñ£¬²¢¸ù¾Ý×Ô¼ºÊµ¼ÊÒµÎñÓ¦Óó¡¾°À´Ñ¡ÔñºÏÊʵļ¯ÈºÈÝ´íģʽ£¬Õâ¸ö¶ÔÓںܶàÓ¦Óö¼ÊÇÆÈÇÐÏ£ÍûµÄ£¬Ö»ÐèҪͨ¹ý¼òµ¥µÄÅäÖþÍÄܹ»ÊµÏÖ·Ö²¼Ê½·þÎñµ÷Óã¬Ò²¾ÍÊÇ˵·þÎñÌṩ·½£¨Provider£©·¢²¼µÄ·þÎñ¿ÉÒÔÌìÈ»¾ÍÊǼ¯Èº·þÎñ£¬±ÈÈ磬ÔÚʵʱÐÔÒªÇóºÜ¸ßµÄÓ¦Óó¡¾°Ï£¬¿ÉÄÜÏ£ÍûÀ´×ÔÏû·Ñ·½£¨Consumer£©µÄµ÷ÓÃÏìӦʱ¼ä×î¶Ì£¬Ö»ÐèҪѡÔñDubboµÄForking
ClusterģʽÅäÖ㬾ͿÉÒÔ¶ÔÒ»¸öµ÷ÓÃÇëÇó²¢Ðз¢Ë͵½¶ą̀¶ÔµÈµÄÌṩ·½£¨Provider£©·þÎñËùÔڵĽڵãÉÏ£¬Ö»Ñ¡Ôñ×î¿ìÒ»¸ö·µ»ØÏìÓ¦µÄ£¬È»ºó½«µ÷Óýá¹û·µ»Ø¸ø·þÎñÏû·Ñ·½£¨Consumer£©£¬ÏÔÈ»ÕâÖÖ·½Ê½ÊÇÒÔÈßÓà·þÎñΪ»ù´¡µÄ£¬ÐèÒªÏûºÄ¸ü¶àµÄ×ÊÔ´£¬µ«ÊÇÄܹ»Âú×ã¸ßʵʱӦÓõÄÐèÇó¡£
ÓйØDubbo·þÎñ¿ò¼ÜµÄ¼òµ¥Ê¹Ó㬿ÉÒԲο¼Î񵀮äËûÁ½ÆªÎÄÕ£¨¡¶»ùÓÚDubboµÄHessianÐÒéʵÏÖÔ¶³Ìµ÷Óá·£¬¡¶»ùÓÚDubboµÄHessianÐÒéʵÏÖÔ¶³Ìµ÷Óá·£¬ºóÃæ²Î¿¼Á´½ÓÖÐÒѸø³öÁ´½Ó£©£¬ÕâÀïÖ÷ÒªÎ§ÈÆDubbo·Ö²¼Ê½·þÎñÏà¹ØÅäÖõÄʹÓÃÀ´ËµÃ÷Óëʵ¼ù¡£
Dubbo·þÎñ¼¯ÈºÈÝ´í
¼ÙÉèÎÒÃÇʹÓõÄÊǵ¥»úģʽµÄDubbo·þÎñ£¬Èç¹ûÔÚ·þÎñÌṩ·½£¨Provider£©·¢²¼·þÎñÒԺ󣬷þÎñÏû·Ñ·½£¨Consumer£©·¢³öÒ»´Îµ÷ÓÃÇëÇó£¬Ç¡ºÃÕâ´ÎÓÉÓÚÍøÂçÎÊÌâµ÷ÓÃʧ°Ü£¬ÄÇôÎÒÃÇ¿ÉÒÔÅäÖ÷þÎñÏû·Ñ·½ÖØÊÔ²ßÂÔ£¬¿ÉÄÜÏû·Ñ·½µÚ¶þ´ÎÖØÊÔµ÷ÓÃÊdzɹ¦µÄ£¨ÖØÊÔ²ßÂÔÖ»ÐèÒªÅäÖü´¿É£¬ÖØÊÔ¹ý³ÌÊÇ͸Ã÷µÄ£©£»µ«ÊÇ£¬Èç¹û·þÎñÌṩ·½·¢²¼·þÎñËùÔڵĽڵ㷢Éú¹ÊÕÏ£¬ÄÇôÏû·Ñ·½ÔÙÔõÃ´ÖØÊÔµ÷Óö¼ÊÇʧ°ÜµÄ£¬ËùÒÔÎÒÃÇÐèÒª²ÉÓü¯ÈºÈÝ´íģʽ£¬ÕâÑùÈç¹ûµ¥¸ö·þÎñ½ÚµãÒò¹ÊÕÏÎÞ·¨Ìṩ·þÎñ£¬»¹¿ÉÒÔ¸ù¾ÝÅäÖõļ¯ÈºÈÝ´íģʽ£¬µ÷ÓÃÆäËû¿ÉÓõķþÎñ½Úµã£¬Õâ¾ÍÌá¸ßÁË·þÎñµÄ¿ÉÓÃÐÔ¡£
Ê×ÏÈ£¬¸ù¾ÝDubboÎĵµ£¬ÎÒÃÇÒýÓÃÎĵµÌṩµÄÒ»¸ö¼Ü¹¹Í¼ÒÔ¼°¸÷×é¼þ¹ØÏµËµÃ÷£¬ÈçÏÂËùʾ£º

ÉÏÊö¸÷¸ö×é¼þÖ®¼äµÄ¹ØÏµ£¨Òý×ÔDubboÎĵµ£©ËµÃ÷ÈçÏ£º
ÕâÀïµÄInvokerÊÇProviderµÄÒ»¸ö¿Éµ÷ÓÃServiceµÄ³éÏó£¬Invoker·â×°ÁËProviderµØÖ·¼°Service½Ó¿ÚÐÅÏ¢¡£
Directory´ú±í¶à¸öInvoker£¬¿ÉÒÔ°ÑËü¿´³ÉList£¬µ«ÓëList²»Í¬µÄÊÇ£¬ËüµÄÖµ¿ÉÄÜÊǶ¯Ì¬±ä»¯µÄ£¬±ÈÈç×¢²áÖÐÐÄÍÆËͱä¸ü¡£
Cluster½«DirectoryÖеĶà¸öInvokerαװ³ÉÒ»¸öInvoker£¬¶ÔÉϲã͸Ã÷£¬Î±×°¹ý³Ì°üº¬ÁËÈÝ´íÂß¼£¬µ÷ÓÃʧ°Üºó£¬ÖØÊÔÁíÒ»¸ö¡£
Router¸ºÔð´Ó¶à¸öInvokerÖа´Â·ÓɹæÔòÑ¡³ö×Ó¼¯£¬±ÈÈç¶Áд·ÖÀ룬ӦÓøôÀëµÈ¡£
LoadBalance¸ºÔð´Ó¶à¸öInvokerÖÐÑ¡³ö¾ßÌåµÄÒ»¸öÓÃÓÚ±¾´Îµ÷Óã¬Ñ¡µÄ¹ý³Ì°üº¬Á˸ºÔؾùºâËã·¨£¬µ÷ÓÃʧ°Üºó£¬ÐèÒªÖØÑ¡¡£
ÎÒÃÇÒ²¼òµ¥ËµÃ÷ĿǰDubboÖ§³ÖµÄ¼¯ÈºÈÝ´íģʽ£¬Ã¿ÖÖģʽÊÊÓ¦ÌØ¶¨µÄÓ¦Óó¡¾°£¬¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèÒª½øÐÐÑ¡Ôñ¡£DubboÄÚÖÃÖ§³ÖÈçÏÂ6ÖÖ¼¯ÈºÄ£Ê½£º
Failover Clusterģʽ
ÅäÖÃֵΪfailover¡£ÕâÖÖģʽÊÇDubbo¼¯ÈºÈÝ´íĬÈϵÄģʽѡÔñ£¬µ÷ÓÃʧ°Üʱ£¬»á×Ô¶¯Çл»£¬ÖØÐ³¢ÊÔµ÷ÓÃÆäËû½ÚµãÉÏ¿ÉÓõķþÎñ¡£¶ÔÓÚһЩÃݵÈÐÔ²Ù×÷¿ÉÒÔʹÓøÃģʽ£¬Èç¶Á²Ù×÷£¬ÒòΪÿ´Îµ÷Óõĸ±×÷ÓÃÊÇÏàͬµÄ£¬ËùÒÔ¿ÉÒÔÑ¡Ôñ×Ô¶¯Çл»²¢ÖØÊÔµ÷Ó㬶Ե÷ÓÃÕßÍêȫ͸Ã÷¡£¿ÉÒÔ¿´µ½£¬Èç¹ûÖØÊÔµ÷ÓñØÈ»»á´øÀ´ÏìÓ¦¶ËµÄÑÓ³Ù£¬Èç¹û³öÏÖ´óÁ¿µÄÖØÊÔµ÷Ó㬿ÉÄÜ˵Ã÷ÎÒÃǵķþÎñÌṩ·½·¢²¼µÄ·þÎñÓÐÎÊÌ⣬ÈçÍøÂçÑÓ³ÙÑÏÖØ¡¢Ó²¼þÉ豸ÐèÒªÉý¼¶¡¢³ÌÐòËã·¨·Ç³£ºÄʱ£¬µÈµÈ£¬Õâ¾ÍÐèÒª×Ðϸ¼ì²âÅŲéÁË¡£
ÀýÈ磬¿ÉÒÔÕâÑùÏÔʽָ¶¨Failoverģʽ£¬»òÕß²»ÅäÖÃÔòĬÈÏ¿ªÆôFailoverģʽ£¬ÅäÖÃʾÀýÈçÏ£º
<dubbo:service interface="org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService" version="1.0.0" 2 cluster="failover" retries="2" timeout="100" ref="chatRoomOnlineUserCounterService" protocol="dubbo" > 3 <dubbo:method name="queryRoomUserCount" timeout="80" retries="2" /> 4 </dubbo:service>
|
ÉÏÊöÅäÖÃʹÓÃFailover Clusterģʽ£¬Èç¹ûµ÷ÓÃʧ°ÜÒ»´Î£¬¿ÉÒÔÔÙ´ÎÖØÊÔ2´Îµ÷Ó㬷þÎñ¼¶±ðµ÷Óó¬Ê±Ê±¼äΪ100ms£¬µ÷Ó÷½·¨queryRoomUserCountµÄ³¬Ê±Ê±¼äΪ80ms£¬ÔÊÐíÖØÊÔ2´Î£¬×Çé¿öµ÷Óû¨·Ñʱ¼ä160ms¡£Èç¹û¸Ã·þÎñ½Ó¿Úorg.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService»¹ÓÐÆäËûµÄ·½·¨¿É¹©µ÷Óã¬ÔòÆäËû·½·¨Ã»ÓÐÏÔʽÅäÖÃÔò»á¼Ì³ÐʹÓÃdubbo:serviceÅäÖõÄÊôÐÔÖµ¡£
Failfast Clusterģʽ
ÅäÖÃֵΪfailfast¡£ÕâÖÖģʽ³ÆÎª¿ìËÙʧ°Üģʽ£¬µ÷ÓÃÖ»Ö´ÐÐÒ»´Î£¬Ê§°ÜÔòÁ¢¼´±¨´í¡£ÕâÖÖģʽÊÊÓÃÓÚ·ÇÃݵÈÐÔ²Ù×÷£¬Ã¿´Îµ÷Óõĸ±×÷ÓÃÊDz»Í¬µÄ£¬Èçд²Ù×÷£¬±ÈÈç½»Ò×ϵͳÎÒÃÇҪ϶©µ¥£¬Èç¹ûÒ»´Îʧ°Ü¾ÍÓ¦¸ÃÈÃËüʧ°Ü£¬Í¨³£ÓÉ·þÎñÏû·Ñ·½¿ØÖÆÊÇ·ñÖØÐ·¢Æð϶©µ¥²Ù×÷ÇëÇó£¨ÁíÒ»¸öÐµĶ©µ¥£©¡£
Failsafe Clusterģʽ
ÅäÖÃֵΪfailsafe¡£Ê§°Ü°²È«Ä£Ê½£¬Èç¹ûµ÷ÓÃʧ°Ü£¬ ÔòÖ±½ÓºöÂÔʧ°ÜµÄµ÷Ó㬶øÊÇÒª¼Ç¼ÏÂʧ°ÜµÄµ÷Óõ½ÈÕÖ¾Îļþ£¬ÒÔ±ãºóÐøÉ󼯡£
Failback Clusterģʽ
ÅäÖÃֵΪfailback¡£Ê§°Ü×Ô¶¯»Ö¸´£¬ºǫ́¼Ç¼ʧ°ÜÇëÇ󣬶¨Ê±ÖØ·¢¡£Í¨³£ÓÃÓÚÏûϢ֪ͨ²Ù×÷¡£
Forking Clusterģʽ
ÅäÖÃֵΪforking¡£²¢Ðе÷Óöà¸ö·þÎñÆ÷£¬Ö»ÒªÒ»¸ö³É¹¦¼´·µ»Ø¡£Í¨³£ÓÃÓÚʵʱÐÔÒªÇó½Ï¸ßµÄ¶Á²Ù×÷£¬µ«ÐèÒªÀ˷Ѹü¶à·þÎñ×ÊÔ´¡£
Broadcast Clusterģʽ
ÅäÖÃֵΪbroadcast¡£¹ã²¥µ÷ÓÃËùÓÐÌṩÕߣ¬Öð¸öµ÷Óã¬ÈÎÒâһ̨±¨´íÔò±¨´í£¨2.1.0¿ªÊ¼Ö§³Ö£©¡£Í¨³£ÓÃÓÚ֪ͨËùÓÐÌṩÕ߸üлº´æ»òÈÕÖ¾µÈ±¾µØ×ÊÔ´ÐÅÏ¢¡£
ÉÏÃæµÄ6ÖÖģʽ¶¼¿ÉÒÔÓ¦ÓÃÓÚÉú²ú»·¾³£¬ÎÒÃÇ¿ÉÒÔ¸ù¾Ýʵ¼ÊÓ¦Óó¡¾°Ñ¡ÔñºÏÊʵļ¯ÈºÈÝ´íģʽ¡£Èç¹ûÎÒÃǾõµÃDubboÄÚÖÃÌṩµÄ¼¸ÖÖ¼¯ÈºÈÝ´íģʽ¶¼²»ÄÜÂú×ãÓ¦ÓÃÐèÒª£¬Ò²¿ÉÒÔ¶¨ÖÆÊµÏÖ×Ô¼ºµÄ¼¯ÈºÈÝ´íģʽ£¬ÒòΪDubbo¿ò¼Ü¸øÎÒÌṩµÄÀ©Õ¹µÄ½Ó¿Ú£¬Ö»ÐèҪʵÏÖ½Ó¿Úcom.alibaba.dubbo.rpc.cluster.Cluster¼´¿É£¬½Ó¿Ú¶¨ÒåÈçÏÂËùʾ£º
@SPI(FailoverCluster.NAME) 02 public interface Cluster { 03 04 /** 05 * Merge the directory invokers to a virtual invoker. 06 * @param <T> 07 * @param directory 08 * @return cluster invoker 09 * @throws RpcException 10 */ 11 @Adaptive 12 <T> Invoker<T> join(Directory<T> directory) throws RpcException; 13 14 }
|
¹ØÓÚÈçºÎʵÏÖÒ»¸ö×Ô¶¨ÒåµÄ¼¯ÈºÈÝ´íģʽ£¬¿ÉÒԲο¼DubboÔ´ÂëÖÐÄÚÖÃÖ§³ÖµÄ¼³È¡ÄãÈÝ´íģʽµÄʵÏÖ£¬6ÖÖģʽ¶ÔÓ¦µÄʵÏÖÀàÈçÏÂËùʾ£º
com.alibaba.dubbo.rpc.cluster.support.FailoverCluster 2 com.alibaba.dubbo.rpc.cluster.support.FailfastCluster 3 com.alibaba.dubbo.rpc.cluster.support.FailsafeCluster 4 com.alibaba.dubbo.rpc.cluster.support.FailbackCluster 5 com.alibaba.dubbo.rpc.cluster.support.ForkingCluster 6 com.alibaba.dubbo.rpc.cluster.support.AvailableCluster
|
¿ÉÄÜÎÒÃdzõ´Î½Ó´¥Dubboʱ£¬²»ÖªµÀÈçºÎÔÚʵ¼Ê¿ª·¢¹ý³ÌÖÐʹÓÃDubboµÄ¼¯ÈºÄ£Ê½£¬ºóÃæÎÒÃÇ»áÒÔFailover
ClusterģʽΪÀý¿ª·¢ÎÒÃǵķֲ¼Ê½Ó¦Óã¬ÔÙ½øÐÐÏêϸµÄ½éÉÜ¡£
Dubbo·þÎñ¸ºÔؾùºâ
Dubbo¿ò¼ÜÄÚÖÃÌṩ¸ºÔؾùºâµÄ¹¦ÄÜÒÔ¼°À©Õ¹½Ó¿Ú£¬ÎÒÃÇ¿ÉÒÔ͸Ã÷µØÀ©Õ¹Ò»¸ö·þÎñ»ò·þÎñ¼¯Èº£¬¸ù¾ÝÐèÒª·Ç³£ÈÝÒ×µØÔö¼Ó/ÒÆ³ý½Úµã£¬Ìá¸ß·þÎñµÄ¿ÉÉìËõÐÔ¡£Dubbo¿ò¼ÜÄÚÖÃÌṩÁË4ÖÖ¸ºÔؾùºâ²ßÂÔ£¬ÈçÏÂËùʾ£º
Random LoadBalance£ºËæ»ú²ßÂÔ£¬ÅäÖÃֵΪrandom¡£¿ÉÒÔÉèÖÃÈ¨ÖØ£¬ÓÐÀûÓÚ³ä·ÖÀûÓ÷þÎñÆ÷µÄ×ÊÔ´£¬¸ßÅäµÄ¿ÉÒÔÉèÖÃÈ¨ÖØ´óһЩ£¬µÍÅäµÄ¿ÉÒÔÉÔ΢СһЩ
RoundRobin LoadBalance£ºÂÖѯ²ßÂÔ£¬ÅäÖÃֵΪroundrobin¡£
LeastActive LoadBalance£ºÅäÖÃֵΪleastactive¡£¸ù¾ÝÇëÇóµ÷ÓõĴÎÊý¼ÆÊý£¬´¦ÀíÇëÇó¸üÂýµÄ½Úµã»áÊܵ½¸üÉÙµÄÇëÇó
ConsistentHash LoadBalance£ºÒ»ÖÂÐÔHash²ßÂÔ£¬¾ßÌåÅäÖ÷½·¨¿ÉÒԲο¼DubboÎĵµ¡£Ïàͬµ÷ÓòÎÊýµÄÇëÇó»á·¢Ë͵½Í¬Ò»¸ö·þÎñÌṩ·½½ÚµãÉÏ£¬Èç¹ûij¸ö½Úµã·¢Éú¹ÊÕÏÎÞ·¨Ìṩ·þÎñ£¬Ôò»á»ùÓÚÒ»ÖÂÐÔHashËã·¨Ó³Éäµ½ÐéÄâ½ÚµãÉÏ£¨ÆäËû·þÎñÌṩ·½£©
ÔÚʵ¼ÊʹÓÃÖУ¬Ö»ÐèҪѡÔñºÏÊʵĸºÔؾùºâ²ßÂÔÖµ£¬ÅäÖü´¿É£¬ÏÂÃæÊÇÉÏÊöËÄÖÖ¸ºÔؾùºâ²ßÂÔÅäÖõÄʾÀý£º
<dubbo:service interface="org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService" version="1.0.0" 2 cluster="failover" retries="2" timeout="100" loadbalance="random" 3 ref="chatRoomOnlineUserCounterService" protocol="dubbo" > 4 <dubbo:method name="queryRoomUserCount" timeout="80" retries="2" loadbalance="leastactive" /> 5 </dubbo:service>
|
ÉÏÊöÅäÖã¬Ò²ÌåÏÖÁËDubboÅäÖõļ̳ÐÐÔÌØµã£¬Ò²¾ÍÊÇdubbo:serviceÔªËØÅäÖÃÁËloadbalance=¡±random¡±£¬Ôò¸ÃÔªËØµÄ×ÓÔªËØdubbo:methodÈç¹ûûÓÐÖ¸¶¨¸ºÔؾùºâ²ßÂÔ£¬ÔòĬÈÏΪloadbalance=¡±random¡±£¬·ñÔòÈç¹ûdubbo:methodÖ¸¶¨ÁËloadbalance=¡±leastactive¡±£¬ÔòʹÓÃ×ÓÔªËØÅäÖõĸºÔؾùºâ²ßÂÔ¸²¸ÇÁ˸¸ÔªËØÖ¸¶¨µÄ²ßÂÔ£¨ÕâÀïµ÷ÓÃqueryRoomUserCount·½·¨Ê¹ÓÃleastactive¸ºÔؾùºâ²ßÂÔ£©¡£
µ±È»£¬Dubbo¿ò¼ÜÒ²ÌṩÁËʵÏÖ×Ô¶¨Òå¸ºÔØ¾ùºâ²ßÂԵĽӿڣ¬¿ÉÒÔʵÏÖcom.alibaba.dubbo.rpc.cluster.LoadBalance½Ó¿Ú£¬½Ó¿Ú¶¨ÒåÈçÏÂËùʾ£º
/** 02 * LoadBalance. (SPI, Singleton, ThreadSafe) 03 * 04 * <a href="http://en.wikipedia.org/wiki/Load_balancing_(computing)">Load-Balancing</a> 05 * 06 * @see com.alibaba.dubbo.rpc.cluster.Cluster#join(Directory) 07 * @author qian.lei 08 * @author william.liangf 09 */ 10 @SPI(RandomLoadBalance.NAME) 11 public interface LoadBalance { 12 13 /** 14 * select one invoker in list. 15 * @param invokers invokers. 16 * @param url refer url 17 * @param invocation invocation. 18 * @return selected invoker. 19 */ 20 @Adaptive("loadbalance") 21 <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException; 22 23 }
|
ÈçºÎʵÏÖÒ»¸ö×Ô¶¨Òå¸ºÔØ¾ùºâ²ßÂÔ£¬¿ÉÒԲο¼Dubbo¿ò¼ÜÄÚÖõÄʵÏÖ£¬ÈçÏÂËùʾµÄ3¸öʵÏÖÀࣺ
com.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalance 2 com.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance 3 com.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance
|
Dubbo·þÎñ¼¯ÈºÈÝ´íʵ¼ù
ÊÖ»úÓ¦ÓÃÊÇÒÔÁÄÌìÊÒΪ»ù´¡µÄ£¬ÎÒÃÇÐèÒªÊÕ¼¯Óû§µÄ²Ù×÷ÐÐΪ£¬È»ºó¼ÆËãÁÄÌìÊÒÖÐÔÚÏßÈËÊý£¬²¢ÊµÊ±ÔÚÊÖ»úÓ¦ÓöËÏÔʾÈËÊý£¬Õû¸öϵͳµÄ¼Ü¹¹ÈçͼËùʾ£º

ÉÏͼÖУ¬Ö÷Òª°üÀ¨ÁËÁ½´óÖ÷ÒªÁ÷³Ì£ºÈÕÖ¾ÊÕ¼¯²¢ÊµÊ±´¦ÀíÁ÷³Ì¡¢µ÷ÓöÁȡʵʱ¼ÆËã½á¹ûÁ÷³Ì£¬ÎÒÃÇʹÓûùÓÚDubbo¿ò¼Ü¿ª·¢µÄ·þÎñÀ´Ìṩʵʱ¼ÆËã½á¹û¶ÁÈ¡ÁÄÌìÈËÊýµÄ¹¦ÄÜ¡£ÉÏͼÖУ¬Êµ¼ÊÉÏÒµÎñ½Ó¿Ú·þÎñÆ÷¼¯ÈºÒ²¿ÉÒÔ»ùÓÚDubbo¿ò¼Ü¹¹½¨·þÎñ£¬¾Í¿´ÎÒÃÇÏëÒª¹¹½¨Ê²Ã´ÑùµÄϵͳÀ´Âú×ãÎÒÃǵÄÐèÒª¡£
Èç¹û²»Ê¹ÓÃ×¢²áÖÐÐÄ£¬·þÎñÏû·Ñ·½Ò²Äܹ»Ö±½Óµ÷Ó÷þÎñÌṩ·½·¢²¼µÄ·þÎñ£¬ÕâÑùÐèÒª·þÎñÌṩ·½½«·þÎñµØÖ·±©Â¶¸ø·þÎñÏû·Ñ·½£¬¶øÇÒÒ²ÎÞ·¨Ê¹ÓÃ¼à¿ØÖÐÐĵŦÄÜ£¬ÕâÖÖ·½Ê½³ÉΪֱÁ¬¡£
Èç¹ûÎÒÃÇʹÓÃ×¢²áÖÐÐÄ£¬·þÎñÌṩ·½½«·þÎñ·¢²¼µ½×¢²áÖÐÐÄ£¬¶ø·þÎñÏû·Ñ·½¿ÉÒÔͨ¹ý×¢²áÖÐÐĶ©ÔÄ·þÎñ£¬½ÓÊÕ·þÎñÌṩ·½·þÎñ±ä¸ü֪ͨ£¬ÕâÖÖ·½Ê½¿ÉÒÔÒþ²Ø·þÎñÌṩ·½µÄϸ½Ú£¬°üÀ¨·þÎñÆ÷µØÖ·µÈÃô¸ÐÐÅÏ¢£¬¶ø·þÎñÏû·Ñ·½Ö»ÄÜͨ¹ý×¢²áÖÐÐÄÀ´»ñÈ¡µ½ÒÑ×¢²áµÄÌṩ·½·þÎñ£¬¶ø²»ÄÜÖ±½Ó¿ç¹ý×¢²áÖÐÐÄÓë·þÎñÌṩ·½Ö±½ÓÁ¬½Ó¡£ÕâÖÖ·½Ê½µÄºÃ´¦ÊÇ»¹¿ÉÒÔʹÓÃ¼à¿ØÖÐÐÄ·þÎñ£¬Äܹ»¶Ô·þÎñµÄµ÷ÓÃÇé¿ö½øÐÐ¼à¿Ø·ÖÎö£¬»¹ÄÜʹÓÃDubbo·þÎñ¹ÜÀíÖÐÐÄ£¬·½±ã¹ÜÀí·þÎñ£¬ÎÒÃÇÔÚÕâÀïʹÓõÄÊÇÕâÖÖ·½Ê½£¬Ò²ÍƼöʹÓÃÕâÖÖ·½Ê½¡£Ê¹ÓÃ×¢²áÖÐÐĵÄDubbo·Ö²¼Ê½·þÎñÏà¹Ø×é¼þ½á¹¹£¬ÈçÏÂͼËùʾ£º

ÏÂÃæ£¬¿ª·¢²¿ÊðÎÒÃǵÄÓ¦Óã¬Í¨¹ýÈçÏÂ4¸ö²½ÖèÀ´Íê³É£º
·þÎñ½Ó¿Ú¶¨Òå
·þÎñ½Ó¿Ú½«·þÎñÌṩ·½£¨Provider£©ºÍ·þÎñÏû·Ñ·½£¨Consumer£©Á¬½ÓÆðÀ´£¬·þÎñÌṩ·½ÊµÏÖ½Ó¿ÚÖж¨ÒåµÄ·þÎñ£¬¼´¸ø³ö·þÎñµÄʵÏÖ£¬¶ø·þÎñÏû·Ñ·½¸ºÔðµ÷Ó÷þÎñ¡£ÎÒÃǽӿÚÖиø³öÁË2¸ö·½·¨£¬Ò»¸öÊÇʵʱ²éѯ»ñÈ¡µ±Ç°ÁÄÌìÊÒÄÚÈËÊý£¬ÁíÒ»¸öÊDzéѯһÌìÖÐij¸ö/ijЩÁÄÌìÊÒÖÐÔÚÏßÈËÊý·åÖµ£¬½Ó¿Ú¶¨ÒåÈçÏÂËùʾ£º
package org.shirdrn.dubbo.api; 02 03 import java.util.List; 04 05 public interface ChatRoomOnlineUserCounterService { 06 07 String queryRoomUserCount(String rooms); 08 09 List<String> getMaxOnlineUserCount(List<String> rooms, String date, String dateFormat); 10 }
|
½Ó¿ÚÊÇ·þÎñÌṩ·½ºÍ·þÎñÏû·Ñ·½¹«¹²×ñÊØµÄÐÒ飬һ°ãÇé¿öÏÂÊÇ·þÎñÌṩ·½½«½Ó¿Ú¶¨ÒåºÃºóÌṩ¸ø·þÎñÏû·Ñ·½¡£
·þÎñÌṩ·½
·þÎñÌṩ·½ÊµÏÖ½Ó¿ÚÖж¨ÒåµÄ·þÎñ£¬ÆäʵÏÖºÍÆÕͨµÄ·þÎñÃ»Ê²Ã´Çø±ð£¬ÎÒÃǵÄʵÏÖÀàΪChatRoomOnlineUserCounterServiceImpl£¬´úÂëÈçÏÂËùʾ£º
package org.shirdrn.dubbo.provider.service; 02 03 import java.util.List; 04 05 import org.apache.commons.logging.Log; 06 import org.apache.commons.logging.LogFactory; 07 import org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService; 08 import org.shirdrn.dubbo.common.utils.DateTimeUtils; 09 10 import redis.clients.jedis.Jedis; 11 import redis.clients.jedis.JedisPool; 12 13 import com.alibaba.dubbo.common.utils.StringUtils; 14 import com.google.common.base.Strings; 15 import com.google.common.collect.Lists; 16 17 public class ChatRoomOnlineUserCounterServiceImpl implements ChatRoomOnlineUserCounterService { 18 19 private static final Log LOG = LogFactory.getLog(ChatRoomOnlineUserCounterServiceImpl.class); 20 private JedisPool jedisPool; 21 private static final String KEY_USER_COUNT = "chat::room::play::user::cnt"; 22 private static final String KEY_MAX_USER_COUNT_PREFIX = "chat::room::max::user::cnt::"; 23 private static final String DF_YYYYMMDD = "yyyyMMdd"; 24 25 public String queryRoomUserCount(String rooms) { 26 LOG.info("Params[Server|Recv|REQ] rooms=" + rooms); 27 StringBuffer builder = new StringBuffer(); 28 if(!Strings.isNullOrEmpty(rooms)) { 29 Jedis jedis = null; 30 try { 31 jedis = jedisPool.getResource(); 32 String[] fields = rooms.split(","); 33 List<String> results = jedis.hmget(KEY_USER_COUNT, fields); 34 builder.append(StringUtils.join(results, ",")); 35 } catch (Exception e) { 36 LOG.error("", e); 37 } finally { 38 if(jedis != null) { 39 jedis.close(); 40 } 41 } 42 } 43 LOG.info("Result[Server|Recv|RES] " + builder.toString()); 44 return builder.toString(); 45 } 46 47 @Override 48 public List<String> getMaxOnlineUserCount(List<String> rooms, String date, String dateFormat) { 49 // HGETALL chat::room::max::user::cnt::20150326 50 LOG.info("Params[Server|Recv|REQ] rooms=" + rooms + ",date=" + date + ",dateFormat=" + dateFormat); 51 String whichDate = DateTimeUtils.format(date, dateFormat, DF_YYYYMMDD); 52 String key = KEY_MAX_USER_COUNT_PREFIX + whichDate; 53 StringBuffer builder = new StringBuffer(); 54 if(rooms != null && !rooms.isEmpty()) { 55 Jedis jedis = null; 56 try { 57 jedis = jedisPool.getResource(); 58 return jedis.hmget(key, rooms.toArray(new String[rooms.size()])); 59 } catch (Exception e) { 60 LOG.error("", e); 61 } finally { 62 if(jedis != null) { 63 jedis.close(); 64 } 65 } 66 } 67 LOG.info("Result[Server|Recv|RES] " + builder.toString()); 68 return Lists.newArrayList(); 69 } 70 71 public void setJedisPool(JedisPool jedisPool) { 72 this.jedisPool = jedisPool; 73 } 74 75 }
|
´úÂëÖÐͨ¹ý¶ÁÈ¡RedisÖÐÊý¾ÝÀ´Íê³Éµ÷Óã¬Âß¼±È½Ï¼òµ¥¡£¶ÔÓ¦µÄMaven POMÒÀÀµÅäÖã¬ÈçÏÂËùʾ£º
<dependencies> 02 <dependency> 03 <groupId>org.shirdrn.dubbo</groupId> 04 <artifactId>dubbo-api</artifactId> 05 <version>0.0.1-SNAPSHOT</version> 06 </dependency> 07 <dependency> 08 <groupId>org.shirdrn.dubbo</groupId> 09 <artifactId>dubbo-commons</artifactId> 10 <version>0.0.1-SNAPSHOT</version> 11 </dependency> 12 <dependency> 13 <groupId>redis.clients</groupId> 14 <artifactId>jedis</artifactId> 15 <version>2.5.2</version> 16 </dependency> 17 <dependency> 18 <groupId>org.apache.commons</groupId> 19 <artifactId>commons-pool2</artifactId> 20 <version>2.2</version> 21 </dependency> 22 <dependency> 23 <groupId>org.jboss.netty</groupId> 24 <artifactId>netty</artifactId> 25 <version>3.2.7.Final</version> 26 </dependency> 27 </dependencies>
|
ÓйضÔDubbo¿ò¼ÜµÄһЩÒÀÀµ£¬ÎÒÃǵ¥¶À·Åµ½Ò»¸öͨÓõÄMaven ModuleÖУ¨Ïê¼ûºóÃæ¡°¸½Â¼£ºDubboʹÓÃMaven¹¹½¨ÒÀÀµÅäÖá±£©£¬ÕâÀï²»ÔÙ¶à˵¡£·þÎñÌṩ·½ÊµÏÖ£¬×î¹Ø¼üµÄ¾ÍÊÇ·þÎñµÄÅäÖã¬ÒòΪDubbo»ùÓÚSpringÀ´¹ÜÀíÅäÖúÍʵÀý£¬ËùÒÔͨ¹ýÅäÖÿÉÒÔÖ¸¶¨·þÎñÊÇ·ñÊÇ·Ö²¼Ê½·þÎñ£¬ÒÔ¼°Í¨¹ýÅäÖÃÔö¼ÓºÜ¶àÆäËüÌØÐÔ¡£ÎÒÃǵÄÅäÖÃÎļþΪprovider-cluster.xml£¬ÄÚÈÝÈçÏÂËùʾ£º
<?xml version="1.0" encoding="UTF-8"?> 02 03 <beans xmlns="http://www.springframework.org/schema/beans" 04 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 05 xmlns:p="http://www.springframework.org/schema/p" 06 xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 07 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 08 09 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 10 <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 11 <property name="ignoreResourceNotFound" value="true" /> 12 <property name="locations"> 13 <list> 14 <value>classpath*:jedis.properties</value> 15 </list> 16 </property> 17 </bean> 18 19 <dubbo:application name="chatroom-cluster-provider" /> 20 <dubbo:registry address="zookeeper://zk1:2181?backup=zk2:2181,zk3:2181" /> 21 22 <dubbo:protocol name="dubbo" port="20880" /> 23 24 <dubbo:service interface="org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService" version="1.0.0" 25 cluster="failover" retries="2" timeout="1000" loadbalance="random" actives="100" executes="200" 26 ref="chatRoomOnlineUserCounterService" protocol="dubbo" > 27 <dubbo:method name="queryRoomUserCount"
timeout="500" retries="2" loadbalance="roundrobin" actives="50" /> 28 </dubbo:service> 29 30 <bean id="chatRoomOnlineUserCounterService"
class="org.shirdrn.dubbo.provider.service.ChatRoomOnlineUserCounterServiceImpl" > 31 <property name="jedisPool" ref="jedisPool" /> 32 </bean> 33 34 <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy"> 35 <constructor-arg index="0"> 36 <bean class="org.apache.commons.pool2.impl.GenericObjectPoolConfig"> 37 <property name="maxTotal" value="${redis.pool.maxTotal}" /> 38 <property name="maxIdle" value="${redis.pool.maxIdle}" /> 39 <property name="minIdle" value="${redis.pool.minIdle}" /> 40 <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" /> 41 <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" /> 42 <property name="testOnReturn" value="${redis.pool.testOnReturn}" /> 43 <property name="testWhileIdle" value="true" /> 44 </bean> 45 </constructor-arg> 46 <constructor-arg index="1" value="${redis.host}" /> 47 <constructor-arg index="2" value="${redis.port}" /> 48 <constructor-arg index="3" value="${redis.timeout}" /> 49 </bean> 50 51 </beans>
|
ÉÏÃæÅäÖÃÖУ¬Ê¹ÓÃdubboÐÒ飬¼¯ÈºÈÝ´íģʽΪfailover£¬·þÎñ¼¶±ð¸ºÔؾùºâ²ßÂÔΪrandom£¬·½·¨¼¶±ð¸ºÔؾùºâ²ßÂÔΪroundrobin£¨Ëü¸²¸ÇÁË·þÎñ¼¶±ðµÄÅäÖÃÄÚÈÝ£©£¬ÆäËûһЩÅäÖÃÄÚÈÝ¿ÉÒԲο¼DubboÎĵµ¡£ÎÒÃÇÕâÀïÊÇ´ÓRedis¶ÁÈ¡Êý¾Ý£¬ËùÒÔʹÓÃÁËRedisÁ¬½Ó³Ø¡£
Æô¶¯·þÎñʾÀý´úÂëÈçÏÂËùʾ£º
package org.shirdrn.dubbo.provider; 02 03 import org.shirdrn.dubbo.provider.common.DubboServer; 04 05 public class ChatRoomClusterServer { 06 07 public static void main(String[] args) throws Exception { 08 DubboServer.startServer("classpath:provider-cluster.xml"); 09 } 10 11 }
|
ÉÏÃæµ÷ÓÃÁËDubboServerÀàµÄ¾²Ì¬·½·¨startServer£¬ÈçÏÂËùʾ£º
public static void startServer(String config) { 02 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(config); 03 try { 04 context.start(); 05 System.in.read(); 06 } catch (IOException e) { 07 e.printStackTrace(); 08 } finally { 09 context.close(); 10 } 11 }
|
·½·¨ÖÐÖ÷ÒªÊdzõʼ»¯Spring IoCÈÝÆ÷£¬È«²¿¶ÔÏó¶¼½»ÓÉÈÝÆ÷À´¹ÜÀí¡£
·þÎñÏû·Ñ·½
·þÎñÏû·Ñ·½¾ÍÈÝÒ×ÁË£¬Ö»ÐèÒªÖªµÀ×¢²áÖÐÐĵØÖ·£¬²¢ÒýÓ÷þÎñÌṩ·½ÌṩµÄ½Ó¿Ú£¬Ïû·Ñ·½µ÷Ó÷þÎñʵÏÖÈçÏÂËùʾ£º
package org.shirdrn.dubbo.consumer; 02 03 import java.util.Arrays; 04 import java.util.List; 05 06 import org.apache.commons.logging.Log; 07 import org.apache.commons.logging.LogFactory; 08 import org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService; 09 import org.springframework.context.support.AbstractXmlApplicationContext; 10 import org.springframework.context.support.ClassPathXmlApplicationContext; 11 12 public class ChatRoomDubboConsumer { 13 14 private static final Log LOG = LogFactory.getLog(ChatRoomDubboConsumer.class); 15 16 public static void main(String[] args) throws Exception { 17 AbstractXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:consumer.xml"); 18 try { 19 context.start(); 20 ChatRoomOnlineUserCounterService chatRoomOnlineUserCounterService
= (ChatRoomOnlineUserCounterService) context.getBean("chatRoomOnlineUserCounterService"); 21 getMaxOnlineUserCount(chatRoomOnlineUserCounterService); 22 getRealtimeOnlineUserCount(chatRoomOnlineUserCounterService); 23 System.in.read(); 24 } finally { 25 context.close(); 26 } 27 28 } 29 30 private static void getMaxOnlineUserCount
(ChatRoomOnlineUserCounterService liveRoomOnlineUserCountService) { 31 List<String> maxUserCounts = liveRoomOnlineUserCountService.getMaxOnlineUserCount( 32 Arrays.asList(new String[] {"1482178010" , "1408492761", "1430546839", "1412517075", "1435861734"}),
"20150327", "yyyyMMdd"); 33 LOG.info("After getMaxOnlineUserCount invoked: maxUserCounts= " + maxUserCounts); 34 } 35 36 private static void getRealtimeOnlineUserCount(ChatRoomOnlineUserCounterService liveRoomOnlineUserCountService) 37 throws InterruptedException { 38 String rooms = "1482178010,1408492761,1430546839,1412517075,1435861734"; 39 String onlineUserCounts = liveRoomOnlineUserCountService.queryRoomUserCount(rooms); 40 LOG.info("After queryRoomUserCount invoked: onlineUserCounts= " + onlineUserCounts); 41 } 42 }
|
¶ÔÓ¦µÄÅäÖÃÎļþΪconsumer.xml£¬ÄÚÈÝÈçÏÂËùʾ£º
<?xml version="1.0" encoding="UTF-8"?> 02 03 <beans xmlns="http://www.springframework.org/schema/beans" 04 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 05 xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 06 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 07 08 <dubbo:application name="chatroom-consumer" /> 09 <dubbo:registry address="zookeeper://zk1:2181?backup=zk2:2181,zk3:2181" /> 10 11 <dubbo:reference id="chatRoomOnlineUserCounterService"
interface="org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService" version="1.0.0"> 12 <dubbo:method name="queryRoomUserCount" retries="2" /> 13 </dubbo:reference> 14 15 </beans>
|
Ò²¿ÉÒÔ¸ù¾ÝÐèÒªÅäÖÃdubbo:referenceÏà¹ØµÄÊôÐÔÖµ£¬Ò²¿ÉÒÔÅäÖÃdubbo:methodÖ¸¶¨µ÷Óõķ½·¨µÄÅäÖÃÐÅÏ¢£¬ÏêϸÅäÖÃÊôÐÔ¿ÉÒԲο¼Dubbo¹Ù·½Îĵµ¡£
²¿ÊðÓëÑéÖ¤
¿ª·¢Íê³ÉÌṩ·½·þÎñºó£¬ÔÚ±¾µØ¿ª·¢µ÷ÊÔµÄʱºò¿ÉÒÔÔõô¼òµ¥Ôõô×ö£¬Èç¹ûÊÇÒª²¿Êðµ½Éú²ú»·¾³£¬ÔòÐèÒª´ò°üºó½øÐв¿Ê𣬿ÉÒԲο¼ÏÂÃæµÄMaven
POMÅäÖãº
<build> 02 <plugins> 03 <plugin> 04 <groupId>org.apache.maven.plugins</groupId> 05 <artifactId>maven-shade-plugin</artifactId> 06 <version>1.4</version> 07 <configuration> 08 <createDependencyReducedPom>true</createDependencyReducedPom> 09 </configuration> 10 <executions> 11 <execution> 12 <phase>package</phase> 13 <goals> 14 <goal>shade</goal> 15 </goals> 16 <configuration> 17 <transformers> 18 <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> 19 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 20 <mainClass>org.shirdrn.dubbo.provider.ChatRoomClusterServer</mainClass> 21 </transformer> 22 </transformers> 23 </configuration> 24 </execution> 25 </executions> 26 </plugin> 27 </plugins> 28 </build>
|
ÕâÀïÒ²¸ø³öMaven POMÒÀÀµµÄ¼òµ¥ÅäÖãº
<dependencies> 2 <dependency> 3 <groupId>org.shirdrn.dubbo</groupId> 4 <artifactId>dubbo-api</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 </dependency> 7 </dependencies>
|
ÎÒÃÇ¿ª·¢µÄ·þÎñÓ¦¸ÃÊÇ·Ö²¼Ê½µÄ£¬Ê×ÏÈÊÇͨ¹ýÅäÖÃÄÚÈÝÀ´¾ö¶¨£¬ÀýÈçÉèÖü¯ÈºÄ£Ê½¡¢ÉèÖøºÔؾùºâģʽµÈ£¬È»ºóÔÚ²¿ÊðµÄʱºò£¬¿ÉÒÔÔÚ¶à¸ö½ÚµãÉÏͬһ¸ö·þÎñ£¬ÕâÑù¶à¸ö·þÎñ¶¼»á×¢²áµ½Dubbo×¢²áÖÐÐÄ£¬Èç¹ûij¸ö½ÚµãÉϵķþÎñ²»¿ÉÓÃÁË£¬¿ÉÒÔ¸ù¾ÝÎÒÃÇÅäÖõIJßÂÔÀ´Ñ¡ÔñÆäËû½ÚµãÉϵĿÉÓ÷þÎñ£¬ºóÃæÍ¨¹ýDubbo·þÎñ¹ÜÀíÖÐÐÄºÍ¼à¿ØÖÐÐľÍÄܸü¼ÓÇå³þÃ÷ÁË¡£
Dubbo·þÎñ¹ÜÀíÓë¼à¿Ø
ÎÒÃÇÐèÒªÔÚ°²×°ºÃ¹ÜÀíÖÐÐÄºÍ¼à¿ØÖÐÐÄÒÔºó£¬ÔÙ½«ÉÏÃæµÄ¿ª·¢µÄÌṩ·½·þÎñ²¿Êðµ½ÎïÀí½ÚµãÉÏ£¬È»ºó¾ÍÄܹ»Í¨¹ý¹ÜÀíÖÐÐÄºÍ¼à¿ØÖÐÐÄÀ´²é¿´¶ÔÓ¦µÄÏêϸÇé¿ö¡£
Dubbo·þÎñ¹ÜÀíÖÐÐÄ
°²×°Dubbo·þÎñ¹ÜÀíÖÐÐÄ£¬ÐèҪѡÔñÒ»¸öWebÈÝÆ÷£¬ÎÒÃÇʹÓÃTomcat·þÎñÆ÷¡£Ê×ÏÈÏÂÔØDubbo¹ÜÀíÖÐÐݲװÎļþdubbo-admin-2.5.3.war£¬»òÕßÖ±½Ó´ÓÔ´Âë¹¹½¨µÃµ½¸ÃWARÎļþ¡£ÕâÀÎÒÃÇÒѾ¹¹½¨ºÃ¶ÔÓ¦µÄWARÎļþ£¬È»ºó½øÐа²×°£¬Ö´ÐÐÈçÏÂÃüÁ
cd apache-tomcat-6.0.35 2 rm -rf webapps/ROOT 3 unzip ~/dubbo-admin-2.5.3.war -d webapps/ROOT
|
ÐÞ¸ÄÅäÖÃÎļþ~/apache-tomcat-6.0.35/webapps/ROOT/WEB-INF/dubbo.properties£¬Ö¸¶¨ÎÒÃǵÄ×¢²áÖÐÐĵØÖ·ÒÔ¼°µÇ¼ÃÜÂ룬ÄÚÈÝÈçÏÂËùʾ£º
dubbo.registry.address=zookeeper://zk1:2181?backup=zk2:2181,zk3:2181 2 dubbo.admin.root.password=root 3 dubbo.admin.guest.password=guest
|
È»ºó£¬¸ù¾ÝÐèÒªÐÞ¸Ä~/apache-tomcat-6.0.35/conf/server.xmlÅäÖÃÎļþ£¬Ö÷ÒªÊÇTomcat
HTTP ¶Ë¿ÚºÅ£¨ÎÒÕâÀïʹÓÃ8083¶Ë¿Ú£©£¬Íê³Éºó¿ÉÒÔÖ±½ÓÆô¶¯Tomcat·þÎñÆ÷£º
cd ~/apache-tomcat-6.0.35/ 2 bin/catalina.sh start
|
È»ºó·ÃÎʵØÖ·http://10.10.4.130:8083/¼´¿É£¬¸ù¾ÝÅäÖÃÎļþÖ¸¶¨µÄrootÓû§ÃÜÂ룬¾Í¿ÉÒԵǼDubbo¹ÜÀí¿ØÖÆÌ¨¡£
ÎÒÃǽ«ÉÏÃæ¿ª·¢µÄ·þÎñÌṩ·½·þÎñ£¬²¿Êðµ½2¸ö¶ÀÁ¢µÄ½ÚµãÉÏ£¨192.168.14.1ºÍ10.10.4.125£©£¬È»ºó¿ÉÒÔͨ¹ýDubbo¹ÜÀíÖÐÐIJ鿴¶ÔÓ¦·þÎñµÄ×´¿ö£¬ÈçͼËùʾ£º
dubbo-admin-providers
ÉÏͼÖпÉÒÔ¿´³ö£¬¸Ã·þÎñÓÐÁ½¸ö¶ÀÁ¢µÄ½Úµã¿ÉÒÔÌṩ£¬ÒòΪÅäÖõļ¯ÈºÄ£Ê½Îªfailover£¬Èç¹ûij¸ö½ÚµãµÄ·þÎñ·¢Éú¹ÊÕÏÎÞ·¨Ê¹Óã¬Ôò»á×Ô¶¯Í¸Ã÷µØÖØÊÔÁíÒ»¸ö½ÚµãÉϵķþÎñ£¬ÕâÑù¾Í²»ÖÁÓÚ³öÏ־ܾø·þÎñµÄÇé¿ö¡£Èç¹ûÏëÒª²é¿´Ìṩ·½Ä³¸ö½ÚµãÉϵķþÎñÏêÇ飬¿ÉÒÔµã»÷¶ÔÓ¦µÄIP:PortÁ´½Ó£¬Ê¾ÀýÈçͼËùʾ£º
dubbo-admin-providers-detail
ÉÏͼ¿ÉÒÔ¿´µ½·þÎñµØÖ·£º
dubbo://10.10.4.125:20880/org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService?actives=100
&anyhost=true&application=chatroom-cluster-provider&cluster=failover&dubbo=0.0.1-SNAPSHOT
&executes=200&interface=org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService&loadbalance=random
&methods=getMaxOnlineUserCount,queryRoomUserCount&pid=30942&queryRoomUserCount.actives=50
&queryRoomUserCount.loadbalance=leastactive&queryRoomUserCount.retries=2&queryRoomUserCount.timeout=500
&retries=2&revision=0.0.1-SNAPSHOT&side=provider&timeout=1000¡Átamp=1427793652814&version=1.0.0 |
Èç¹ûÎÒÃÇÖ±½Ó±©Â¶¸ÃµØÖ·Ò²ÊÇ¿ÉÒԵ쬲»¹ýÕâÖÖÖ±Á¬µÄ·½Ê½¶Ô·þÎñÏû·Ñ·½²»ÊÇ͸Ã÷µÄ£¬Èç¹ûÒÔºóIPµØÖ·¸ü»»£¬Ò²»áÓ°Ïìµ÷Ó÷½£¬ËùÒÔ×îºÃÊÇͨ¹ý×¢²áÖÐÐÄÀ´Òþ±Î·þÎñµØÖ·¡£Í¬Ò»¸ö·þÎñËù²¿ÊðÔڵĶà¸ö½ÚµãÉÏ£¬Ò²¾Í¶ÔÓ¦¶ÔÓ¦×Ŷà¸ö·þÎñµØÖ·¡£ÁíÍ⣬Ҳ¿ÉÒÔ¶ÔÒѾ·¢²¼µÄ·þÎñ½øÐпØÖÆ£¬ÈçÐ޸ķÃÎÊ¿ØÖÆ¡¢¸ºÔؾùºâÏà¹ØÅäÖÃÄÚÈݵȣ¬¿ÉÒÔͨ¹ýÉÏͼÖС°Ïû·ÑÕß¡±²é¿´·þÎñÏû·Ñ·½µ÷Ó÷þÎñµÄÇé¿ö£¬ÈçͼËùʾ£º
dubbo-admin-consumers
Ò²ÔÚ¹ÜÀí¿ØÖÆÌ¨¿ÉÒÔ¶ÔÏû·Ñ·½½øÐйÜÀí¿ØÖÆ¡£
Dubbo¼à¿ØÖÐÐÄ
Dubbo¼à¿ØÖÐÐÄÊÇÒÔDubbo·þÎñµÄÐÎʽ·¢²¼µ½×¢²áÖÐÐÄ£¬ºÍÆÕͨµÄ·þÎñʱһÑùµÄ¡£ÀýÈ磬ÎÒÕâÀïÏÂÔØÁËDubbo×Ô´øµÄ¼òÒ×¼à¿ØÖÐÐÄÎļþdubbo-monitor-simple-2.5.3-assembly.tar.gz£¬¿ÉÒÔ½âѹËõÒÔºó£¬ÐÞ¸ÄÅäÖÃÎļþ~/dubbo-monitor-simple-2.5.3/conf/dubbo.propertiesµÄÄÚÈÝ£¬ÈçÏÂËùʾ£º
dubbo.container=log4j,spring,registry,jetty 02 dubbo.application.name=simple-monitor 03 dubbo.application.owner= 04 dubbo.registry.address=zookeeper://zk1:2181?backup=zk2:2181,zk3:2181 05 dubbo.protocol.port=7070 06 dubbo.jetty.port=8087 07 dubbo.jetty.directory=${user.home}/monitor 08 dubbo.charts.directory=${dubbo.jetty.directory}/charts 09 dubbo.statistics.directory=${user.home}/monitor/statistics 10 dubbo.log4j.file=logs/dubbo-monitor-simple.log 11 dubbo.log4j.level=WARN
|
È»ºóÆô¶¯¼òÒ×¼à¿ØÖÐÐÄ£¬Ö´ÐÐÈçÏÂÃüÁ
cd ~/dubbo-monitor-simple-2.5.3 2 bin/start.sh
|
ÕâÀïʹÓÃÁËJetty WebÈÝÆ÷£¬·ÃÎʵØÖ·http://10.10.4.130:8087/¾Í¿ÉÒԲ鿴¼à¿ØÖÐÐÄ£¬ApplicationsÑ¡Ïî¿¨Ò³Ãæ°üº¬ÁË·þÎñÌṩ·½ºÍÏû·Ñ·½µÄ»ù±¾ÐÅÏ¢£¬ÈçͼËùʾ£º
dubbo-monitor-applications
ÉÏͼÖ÷ÒªÁгöÁËËùÓÐÌṩ·½·¢²¼µÄ·þÎñ¡¢Ïû·Ñ·½µ÷ÓᢷþÎñÒÀÀµ¹ØÏµµÈÄÚÈÝ¡£
½Ó×Å£¬²é¿´ServicesÑ¡Ïî¿¨Ò³Ãæ£¬°üº¬ÁË·þÎñÌṩ·½ÌṩµÄ·þÎñÁÐ±í£¬ÈçͼËùʾ£º
dubbo-monitor-services
µã»÷ÉÏͼÖÐProvidersÁ´½Ó¾ÍÄÜ¿´µ½·þÎñÌṩ·½µÄ»ù±¾ÐÅÏ¢£¬°üÀ¨·þÎñµØÖ·µÈ£¬ÈçͼËùʾ£º
dubbo-monitor-providers
µã»÷ÉÏͼÖÐConsumersÁ´½Ó¾ÍÄÜ¿´µ½·þÎñÏû·Ñ·½µÄ»ù±¾ÐÅÏ¢£¬°üÀ¨·þÎñµØÖ·µÈ£¬ÈçͼËùʾ£º
dubbo-monitor-consumers
ÓÉÓÚÉÏÃæÊÇDubbo×Ô´øµÄÒ»¸ö¼òÒ×¼à¿ØÖÐÐÄ£¬¿ÉÄÜËùÕ¹ÏÖµÄÄÚÈݲ¢²»ÄÜÂú×ãÎÒÃǵÄÐèÒª£¬ËùÒÔ¿ÉÒÔ¸ù¾ÝÐèÒª¿ª·¢×Ô¼ºµÄ¼à¿ØÖÐÐÄ¡£DubboÒ²ÌṩÁË¼à¿ØÖÐÐĵÄÀ©Õ¹½Ó¿Ú£¬Èç¹ûÏëҪʵÏÖ×Ô¼ºµÄ¼à¿ØÖÐÐÄ£¬¿ÉÒÔʵÏÖ½Ó¿Úcom.alibaba.dubbo.monitor.MonitorFactoryºÍcom.alibaba.dubbo.monitor.Monitor£¬ÆäÖÐMonitorFactory½Ó¿Ú¶¨ÒåÈçÏÂËùʾ£º
/** 02 * MonitorFactory. (SPI, Singleton, ThreadSafe) 03 * 04 * @author william.liangf 05 */ 06 @SPI("dubbo") 07 public interface MonitorFactory { 08 09 /** 10 * Create monitor. 11 * @param url 12 * @return monitor 13 */ 14 @Adaptive("protocol") 15 Monitor getMonitor(URL url); 16 17 }
|
Monitor½Ó¿Ú¶¨ÒåÈçÏÂËùʾ£º
/** 2 * Monitor. (SPI, Prototype, ThreadSafe) 3 * 4 * @see com.alibaba.dubbo.monitor.MonitorFactory#getMonitor(com.alibaba.dubbo.common.URL) 5 * @author william.liangf 6 */ 7 public interface Monitor extends Node, MonitorService { 8 9 }
|
¾ßÌ嶨ÒåÄÚÈÝ¿ÉÒԲ鿴MonitorService½Ó¿Ú£¬²»ÔÙÀÛÊö¡£
×ܽá
Dubbo»¹ÌṩÁËÆäËûºÜ¶à¸ß¼¶ÌØÐÔ£¬Èç·ÓɹæÔò¡¢²ÎÊý»Øµ÷¡¢·þÎñ·Ö×é¡¢·þÎñ½µ¼¶µÈµÈ£¬¶øÇҺܶàÌØÐÔÔÚ¸ø³öÄÚÖÃʵÏֵĻù´¡ÉÏ£¬»¹¸ø³öÁËÀ©Õ¹µÄ½Ó¿Ú£¬ÎÒÃÇ¿ÉÒÔ¸ø³ö×Ô¶¨ÒåµÄʵÏÖ£¬·Ç³£·½±ã¶øÇÒÇ¿´ó¡£¸ü¶à¿ÉÒԲο¼Dubbo¹ÙÍøÓû§ÊÖ²áºÍ¿ª·¢ÈËÔ±Êֲᡣ
¸½Â¼£ºDubboʹÓÃMaven¹¹½¨ÒÀÀµÅäÖÃ
<properties> <spring.version>3.2.8.RELEASE</spring.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> 13 <groupId>org.springframework</groupId> 14 <artifactId>spring</artifactId> 15 </exclusion> 16 <exclusion> 17 <groupId>org.apache.zookeeper</groupId> 18 <artifactId>zookeeper</artifactId> 19 </exclusion> 20 <exclusion> 21 <groupId>org.jboss.netty</groupId> 22 <artifactId>netty</artifactId> 23 </exclusion> 24 </exclusions> 25 </dependency> 26 <dependency> 27 <groupId>org.springframework</groupId> 28 <artifactId>spring-core</artifactId> 29 <version>${spring.version}</version> 30 </dependency> 31 <dependency> 32 <groupId>org.springframework</groupId> 33 <artifactId>spring-beans</artifactId> 34 <version>${spring.version}</version> 35 </dependency> 36 <dependency> 37 <groupId>org.springframework</groupId> 38 <artifactId>spring-context</artifactId> 39 <version>${spring.version}</version> 40 </dependency> 41 <dependency> 42 <groupId>org.springframework</groupId> 43 <artifactId>spring-context-support</artifactId> 44 <version>${spring.version}</version> 45 </dependency> 46 <dependency> 47 <groupId>org.springframework</groupId> 48 <artifactId>spring-web</artifactId> 49 <version>${spring.version}</version> </dependency> <dependency> 53 <groupId>org.slf4j</groupId> 54 <artifactId>slf4j-api</artifactId> 55 <version>1.6.2</version> 56 </dependency> 57 <dependency> 58 <groupId>log4j</groupId> 59 <artifactId>log4j</artifactId> 60 <version>1.2.16</version> 61 </dependency> 62 <dependency> 63 <groupId>org.javassist</groupId> 64 <artifactId>javassist</artifactId> 65 <version>3.15.0-GA</version> 66 </dependency> 67 <dependency> 68 <groupId>com.alibaba</groupId> 69 <artifactId>hessian-lite</artifactId> 70 <version>3.2.1-fixed-2</version> 71 </dependency> 72 <dependency> 73 <groupId>com.alibaba</groupId> 74 <artifactId>fastjson</artifactId> 75 <version>1.1.8</version> 76 </dependency> 77 <dependency> 78 <groupId>org.jvnet.sorcerer</groupId> 79 <artifactId>sorcerer-javac</artifactId> 80 <version>0.8</version> 81 </dependency> 82 <dependency> 83 <groupId>org.apache.zookeeper</groupId> 84 <artifactId>zookeeper</artifactId> 85 <version>3.4.5</version> 86 </dependency> 87 <dependency> 88 <groupId>com.github.sgroschupf</groupId> 89 <artifactId>zkclient</artifactId> 90 <version>0.1</version> 91 </dependency> 92 <dependency> 93 <groupId>org.jboss.netty</groupId> 94 <artifactId>netty</artifactId> <version>3.2.7.Final</version> </dependency>
</dependencies>
|
|