1.
Dubbo¸ÅÊö
DubboÊǰ¢Àï°Í°Í¿ªÔ´³öÀ´µÄÒ»¸ö·Ö²¼Ê½·þÎñ¿ò¼Ü£¬ÖÂÁ¦ÓÚÌṩ¸ßÐÔÄܺÍ͸Ã÷»¯µÄRPCÔ¶³Ì·þÎñµ÷Ó÷½°¸£¬ÒÔ¼°×÷ΪSOA·þÎñÖÎÀíµÄ·½°¸¡£ËüµÄºËÐŦÄܰüÀ¨£º
#remoting:Ô¶³ÌͨѶ»ù´¡£¬Ìṩ¶Ô¶àÖÖNIO¿ò¼Ü³éÏó·â×°£¬°üÀ¨¡°Í¬²½×ªÒì²½¡±ºÍ¡°ÇëÇó-ÏìÓ¦¡±Ä£Ê½µÄÐÅÏ¢½»»»·½Ê½¡£ #Cluster: ·þÎñ¿ò¼ÜºËÐÄ£¬Ìṩ»ùÓÚ½Ó¿Ú·½·¨µÄÔ¶³Ì¹ý³Ìµ÷Ó㬰üÀ¨¶àÐÒéÖ§³Ö£¬²¢ÌṩÈí¸ºÔØ¾ùºâºÍÈÝ´í»úÖÆµÄ¼¯ÈºÖ§³Ö¡£ #registry: ·þÎñ×¢²áÖÐÐÄ£¬Ê¹·þÎñÏû·Ñ·½Äܶ¯Ì¬µÄ²éÕÒ·þÎñÌṩ·½£¬Ê¹µØÖ·Í¸Ã÷£¬Ê¹·þÎñÌṩ·½¿ÉÒÔÆ½»¬Ôö¼Ó»ò¼õÉÙ»úÆ÷¡£ |
ÓÉÓÚDubboÍŶӵÄÎĵµºÍ´úÂë¶¼·Ç³£ÓÅÐ㣬ËùÒÔ¸ü¶à¹ØÓÚdubboµÄ·½·½ÃæÃæÇë²Î¿¼ÍøÕ¾http://code.alibabatech.com/wiki/display/dubbo/Home-zh¡£
ÕâÀïÎÒÃÇÖ»ÊDz¹³äһϴÓÔ´Âë¾ßÌåʵÏֽǶÈÀ´¿´µÄijЩϸ½Ú·½Ã棬°üÀ¨Invoker¡¢ExtensionLoaderµÈ·½Ãæ¡£Èκιٷ½ÒѾ½éÉܹýµÄϸ½Ú£¬ÎÒÃDz»×ö»ÉßÌí×㣬¹Ù·½ÎĵµÒѾ×ã¹»ÏêʵÁË£¬ÕâÆªÎĵµµÄ¶¨Î»ÊDz¹³äʵÏÖµÄÏà¹ØÏ¸½Ú£¬ÊÇ»ùÓÚÎÒÔÚÍùDubboÌí¼Óweb
serviceÐÒé¹ý³ÌÖУ¬ËùÅöµ½¹ýµÄһЩÀ§ÄÑ¡£
2. ·þÎñÌṩÕß±©Â¶Ò»¸ö·þÎñµÄÏêϸ¹ý³Ì

ÉÏͼÊÇ·þÎñÌṩÕß±©Â¶·þÎñµÄÖ÷¹ý³Ì£º
Ê×ÏÈServiceConfigÀàÄõ½¶ÔÍâÌṩ·þÎñµÄʵ¼ÊÀàref(È磺HelloWorldImpl),È»ºóͨ¹ýProxyFactoryÀàµÄgetInvoker·½·¨Ê¹ÓÃrefÉú³ÉÒ»¸öAbstractProxyInvokerʵÀý£¬µ½ÕâÒ»²½¾ÍÍê³É¾ßÌå·þÎñµ½InvokerµÄת»¯¡£½ÓÏÂÀ´¾ÍÊÇInvokerת»»µ½ExporterµÄ¹ý³Ì¡£
Dubbo´¦Àí·þÎñ±©Â¶µÄ¹Ø¼ü¾ÍÔÚInvokerת»»µ½ExporterµÄ¹ý³Ì(ÈçÉÏͼÖеĺìÉ«²¿·Ö)£¬ÏÂÃæÎÒÃÇÒÔDubboºÍRMIÕâÁ½ÖÖµäÐÍÐÒéµÄʵÏÖÀ´½øÐÐ˵Ã÷£º
££DubboµÄʵÏÖ
DubboÐÒéµÄInvokerתΪExporter·¢ÉúÔÚDubboProtocolÀàµÄexport·½·¨£¬ËüÖ÷ÒªÊÇ´ò¿ªsocketÕìÌý·þÎñ£¬²¢½ÓÊÕ¿Í»§¶Ë·¢À´µÄ¸÷ÖÖÇëÇó£¬Í¨Ñ¶Ï¸½ÚÓÉDubbo×Ô¼ºÊµÏÖ¡£
££RMIµÄʵÏÖ
RMIÐÒéµÄInvokerתΪExporter·¢ÉúÔÚRmiProtocolÀàµÄexport·½·¨£¬Ëüͨ¹ýSpring»òDubbo»òJDKÀ´ÊµÏÖRMI·þÎñ£¬Í¨Ñ¶Ï¸½ÚÕâÒ»¿éÓÉJDKµ×²ãÀ´ÊµÏÖ£¬Õâ¾ÍÊ¡Á˲»ÉÙ¹¤×÷Á¿¡£
3. ·þÎñÏû·ÑÕßÏû·ÑÒ»¸ö·þÎñµÄÏêϸ¹ý³Ì

ÉÏͼÊÇ·þÎñÏû·ÑµÄÖ÷¹ý³Ì£º
Ê×ÏÈReferenceConfigÀàµÄinit·½·¨µ÷ÓÃProtocolµÄrefer·½·¨Éú³ÉInvokerʵÀý(ÈçÉÏͼÖеĺìÉ«²¿·Ö)£¬ÕâÊÇ·þÎñÏû·ÑµÄ¹Ø¼ü¡£½ÓÏÂÀ´°ÑInvokerת»»Îª¿Í»§¶ËÐèÒªµÄ½Ó¿Ú(È磺HelloWorld)¡£
¹ØÓÚÿÖÖÐÒéÈçRMI/Dubbo/Web serviceµÈËüÃÇÔÚµ÷ÓÃrefer·½·¨Éú³ÉInvokerʵÀýµÄϸ½ÚºÍÉÏÒ»Õ½ÚËùÃèÊöµÄÀàËÆ¡£
4. ÂúÑÛ¶¼ÊÇInvoker
ÓÉÓÚInvokerÊÇDubboÁìÓòÄ£ÐÍÖзdz£ÖØÒªµÄÒ»¸ö¸ÅÄºÜ¶àÉè¼ÆË¼Â·¶¼ÊÇÏòËü¿¿Â£¡£Õâ¾ÍʹµÃInvokerÉøÍ¸ÔÚÕû¸öʵÏÖ´úÂëÀ¶ÔÓÚ¸Õ¿ªÊ¼½Ó´¥DubboµÄÈË£¬È·ÊµÈÝÒ׸ø¸ã»ìÁË¡£
ÏÂÃæÎÒÃÇÓÃÒ»¸ö¾«¼òµÄͼÀ´ËµÃ÷×îÖØÒªµÄÁ½ÖÖInvoker£º·þÎñÌṩInvokerºÍ·þÎñÏû·ÑInvoker£º

ΪÁ˸üºÃµÄ½âÊÍÉÏÃæÕâÕÅͼ£¬ÎÒÃǽáºÏ·þÎñÏû·ÑºÍÌṩÕߵĴúÂëʾÀýÀ´½øÐÐ˵Ã÷£º
££·þÎñÏû·ÑÕß´úÂë
££·þÎñÏû·ÑÕß´úÂë public class DemoClientAction { private DemoService demoService; public void setDemoService(DemoService demoService) { this.demoService = demoService; } public void start() { String hello = demoService.sayHello("world" + i); } } |
ÉÏÃæ´úÂëÖеġ¯DemoService¡¯¾ÍÊÇÉÏͼÖзþÎñÏû·Ñ¶ËµÄproxy£¬Óû§´úÂëͨ¹ýÕâ¸öproxyµ÷ÓÃÆä¶ÔÓ¦µÄInvoker(DubboInvoker¡¢
HessianRpcInvoker¡¢ InjvmInvoker¡¢ RmiInvoker¡¢ WebServiceInvokerÖеÄÈκÎÒ»¸ö)£¬¶ø¸ÃInvokerʵÏÖÁËÕæÕýµÄÔ¶³Ì·þÎñµ÷Óá£
££·þÎñÌṩÕß´úÂë public class DemoServiceImpl implements DemoService { public String sayHello(String name) throws RemoteException { return "Hello " + name; } } |
ÉÏÃæÕâ¸öÀà»á±»·â×°³ÉΪһ¸öAbstractProxyInvokerʵÀý£¬²¢ÐÂÉú³ÉÒ»¸öExporterʵÀý¡£ÕâÑùµ±ÍøÂçͨѶ²ãÊÕµ½Ò»¸öÇëÇóºó£¬»áÕÒµ½¶ÔÓ¦µÄExporterʵÀý£¬²¢µ÷ÓÃËüËù¶ÔÓ¦µÄAbstractProxyInvokerʵÀý£¬´Ó¶øÕæÕýµ÷ÓÃÁË·þÎñÌṩÕߵĴúÂë¡£
DubboÀﻹÓÐһЩÆäËûµÄInvokerÀ࣬µ«ÉÏÃæÁ½ÖÖÊÇ×îÖØÒªµÄ¡£
5. ExtensionLoaderµÄÍêÕû·ÖÎö
ExtensionLoaderÊÇDubboÖÐÒ»¸ö·Ç³£ÖØÒªµÄÀ࣬¸Õ½Ó´¥DubboÔ´ÂëµÄÈË¿´Õâ¸öÀàµÄʱºòÒ²¶àÉÙ»áÓеãÀ§»ó£¬Õâ¸öÀà·Ç³£ÖØÒª£¬Ëü¾ÍÏñÊdzø·¿ÀïµÄ¡°´ó³ø¡±£¬°´ÕÕÓû§µÄËæÊ±ÐèÒª°Ñ¸÷ÖÖ¡°Ê³²Ä¡±Åëµ÷³öÀ´¡£
ÎÒÃǽáºÏ¾ßÌå´úÂëÏêϸ˵һÏÂExtensionLoaderµÄʵÏÖ£¬ÏÂÃæÊÇServiceConfigÀàÀïµÄÒ»ÐдúÂ룺
private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension(); |
ÉÏÃæ´úÂëµÄ³ÌÐòÁ÷³ÌͼÈçÏÂËùʾ(¼Ù¶¨ÊǵÚÒ»´ÎÖ´ÐÐÕâÐдúÂë)£º

ÔÚÕâ¸ö¹ý³ÌÖÐ×îÖØÒªµÄÁ½¸ö·½·¨ÊÇgetExtensionClassesºÍcreateAdaptiveExtensionClass(ͼÖкìÉ«²¿·Ö)£¬ÏÂÃæÏêϸ¶ÔÕâÁ½¸ö·½·¨½øÐзÖÎö£º
Õâ¸ö·½·¨Ö÷Òª¶ÁÈ¡META-INF/services/Ŀ¼Ï¶ÔÓ¦ÎļþÄÚÈÝ£¬ÔÚ±¾Ê¾Àý´úÂëÖУ¬ÊǶÁÈ¡META-INF/services/com.alibaba.dubbo.rpc.ProtocolÎļþÖеÄÄÚÈÝ£¬¾ßÌåÄÚÈÝÈçÏ£º
com.alibaba.dubbo.registry.support.RegistryProtocol com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol com.alibaba.dubbo.rpc.protocol.injvm.InjvmProtocol com.alibaba.dubbo.rpc.protocol.rmi.RmiProtocol com.alibaba.dubbo.rpc.protocol.hessian.HessianProtocol com.alibaba.dubbo.rpc.protocol.webservice.WebServiceProtocol |
Ëü·ÖÎö¸ÃÎļþÖеÄÿһÐÐ(ÿһÐжÔÓ¦Ò»¸öÀà)£¬·ÖÎöÕâЩÀ࣬Èç¹û·¢ÏÖÓÐÄĸöÀàµÄAnnotationÊÇ@Adaptive£¬ÔòÕÒµ½¶ÔÓ¦µÄAdaptiveClassÁË£¬µ«ÓÉÓÚProtocolÎļþÀïûÓÐÄĸöÀàµÄAnnotationÊÇ@Adaptive£¬ËùÒÔÔÚÕâ¸öÀý×ÓÖи÷½·¨Ã»ÕÒµ½¶ÔÓ¦µÄAdaptiveClass¡£
££createAdaptiveExtensionClass |
¸Ã·½·¨ÊÇÔÚgetExtensionClasses·½·¨ÕÒ²»µ½AdaptiveClassµÄÇé¿öϱ»µ÷Ó㬸÷½·¨Ö÷ÒªÊÇͨ¹ý×Ö½ÚÂëµÄ·½Ê½ÔÚÄÚ´æÖÐÐÂÉú³ÉÒ»¸öÀ࣬Ëü¾ßÓÐAdaptiveClassµÄ¹¦ÄÜ£¬Protocol¾ÍÊÇͨ¹ýÕâÖÖ·½Ê½»ñµÃAdaptiveClassÀàµÄ¡£
AdaptiveClassÀàµÄ×÷ÓÃÊÇÄÜÔÚÔËÐÐʱ¶¯Ì¬ÅжϾßÌåÊÇÒªµ÷ÓÃÄĸöÀàµÄ·½·¨£¬¸ü¶à¹ØÓÚAdaptiveClassµÄÄÚÈÝÇë²Î¿¼Dubbo¹Ù·½Îĵµ¡£
|