±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËDubboÊÇʲô£¿Ö÷ÒªºËÐIJ¿¼þ
¡¢ÓÐÊ²Ã´ÌØÐÔÒÔ¼°Ó¦Óá£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
DubboÊǸßÐÔÄÜ, »ùÓÚjavaʵÏֵĿªÔ´RPC¿ò¼Ü£¬Ê¹µÃÓ¦ÓÿÉͨ¹ý¸ßÐÔÄܵÄ
RPC ʵÏÖ·þÎñµÄÊä³öºÍÊäÈ빦ÄÜ£¬¿ÉÒÔºÍ Spring¿ò¼ÜÎ޷켯³É¡£
DubboÊÇÒ»¿î¸ßÐÔÄÜ¡¢ÇáÁ¿¼¶µÄ¿ªÔ´Java RPC¿ò¼Ü£¬ËüÌṩÁËÈý´óºËÐÄÄÜÁ¦£ºÃæÏò½Ó¿ÚµÄÔ¶³Ì·½·¨µ÷Óã¬ÖÇÄÜÈÝ´íºÍ¸ºÔؾùºâ£¬ÒÔ¼°·þÎñ×Ô¶¯×¢²áºÍ·¢ÏÖ¡£
Ö÷ÒªºËÐIJ¿¼þ
Remoting: ÍøÂçͨÐÅ¿ò¼Ü£¬ÊµÏÖÁË sync-over-async ºÍrequest-response
ÏûÏ¢»úÖÆ
RPC: Ò»¸öÔ¶³Ì¹ý³Ìµ÷ÓõijéÏó£¬Ö§³Ö¸ºÔؾùºâ¡¢ÈÝÔֺͼ¯Èº¹¦ÄÜ
Registry: ·þÎñĿ¼¿ò¼ÜÓÃÓÚ·þÎñµÄ×¢²áºÍ·þÎñʼþ·¢²¼ºÍ¶©ÔÄ
¹¤×÷ÔÀí

Provider
±©Â¶·þÎñ·½³ÆÖ®Îª¡°·þÎñÌṩÕß¡±¡£
Consumer
µ÷ÓÃÔ¶³Ì·þÎñ·½³ÆÖ®Îª¡°·þÎñÏû·ÑÕß¡±¡£
Registry
·þÎñ×¢²áÓë·¢ÏÖµÄÖÐÐÄĿ¼·þÎñ³ÆÖ®Îª¡°·þÎñ×¢²áÖÐÐÄ¡±¡£
Monitor
ͳ¼Æ·þÎñµÄµ÷ÓôÎÊýºÍµ÷ÓÃʱ¼äµÄÈÕÖ¾·þÎñ³ÆÖ®Îª¡°·þÎñ¼à¿ØÖÐÐÄ¡±¡£
(1) Á¬Í¨ÐÔ£º
×¢²áÖÐÐĸºÔð·þÎñµØÖ·µÄ×¢²áÓë²éÕÒ£¬Ï൱ÓÚĿ¼·þÎñ£¬·þÎñÌṩÕߺÍÏû·ÑÕßÖ»ÔÚÆô¶¯Ê±Óë×¢²áÖÐÐĽ»»¥£¬×¢²áÖÐÐIJ»×ª·¢ÇëÇó£¬Ñ¹Á¦½ÏС
¼à¿ØÖÐÐĸºÔðͳ¼Æ¸÷·þÎñµ÷ÓôÎÊý£¬µ÷ÓÃʱ¼äµÈ£¬Í³¼ÆÏÈÔÚÄÚ´æ»ã×ܺóÿ·ÖÖÓÒ»´Î·¢Ë͵½¼à¿ØÖÐÐÄ·þÎñÆ÷£¬²¢ÒÔ±¨±íչʾ
·þÎñÌṩÕßÏò×¢²áÖÐÐÄ×¢²áÆäÌṩµÄ·þÎñ£¬²¢»ã±¨µ÷ÓÃʱ¼äµ½¼à¿ØÖÐÐÄ£¬´Ëʱ¼ä²»°üº¬ÍøÂ翪Ïú
·þÎñÏû·ÑÕßÏò×¢²áÖÐÐÄ»ñÈ¡·þÎñÌṩÕßµØÖ·ÁÐ±í£¬²¢¸ù¾Ý¸ºÔØËã·¨Ö±½Óµ÷ÓÃÌṩÕߣ¬Í¬Ê±»ã±¨µ÷ÓÃʱ¼äµ½¼à¿ØÖÐÐÄ£¬´Ëʱ¼ä°üº¬ÍøÂ翪Ïú
×¢²áÖÐÐÄ£¬·þÎñÌṩÕߣ¬·þÎñÏû·ÑÕßÈýÕßÖ®¼ä¾ùΪ³¤Á¬½Ó£¬¼à¿ØÖÐÐijýÍâ
×¢²áÖÐÐÄͨ¹ý³¤Á¬½Ó¸ÐÖª·þÎñÌṩÕߵĴæÔÚ£¬·þÎñÌṩÕßå´»ú£¬×¢²áÖÐÐĽ«Á¢¼´ÍÆËÍʼþ֪ͨÏû·ÑÕß
×¢²áÖÐÐÄºÍ¼à¿ØÖÐÐÄÈ«²¿å´»ú£¬²»Ó°ÏìÒÑÔËÐеÄÌṩÕߺÍÏû·ÑÕߣ¬Ïû·ÑÕßÔÚ±¾µØ»º´æÁËÌṩÕßÁбí
×¢²áÖÐÐÄºÍ¼à¿ØÖÐÐͼÊÇ¿ÉÑ¡µÄ£¬·þÎñÏû·ÑÕß¿ÉÒÔÖ±Á¬·þÎñÌṩÕß
(2) ½¡×³ÐÔ£º
¼à¿ØÖÐÐÄå´µô²»Ó°ÏìʹÓã¬Ö»ÊǶªÊ§²¿·Ö²ÉÑùÊý¾Ý
Êý¾Ý¿âå´µôºó£¬×¢²áÖÐÐÄÈÔÄÜͨ¹ý»º´æÌṩ·þÎñÁбí²éѯ£¬µ«²»ÄÜ×¢²áзþÎñ
×¢²áÖÐÐĶԵȼ¯Èº£¬ÈÎÒâһ̨崵ôºó£¬½«×Ô¶¯Çл»µ½Áíһ̨
×¢²áÖÐÐÄÈ«²¿å´µôºó£¬·þÎñÌṩÕߺͷþÎñÏû·ÑÕßÈÔÄÜͨ¹ý±¾µØ»º´æÍ¨Ñ¶
·þÎñÌṩÕßÎÞ״̬£¬ÈÎÒâһ̨崵ôºó£¬²»Ó°ÏìʹÓÃ
·þÎñÌṩÕßÈ«²¿å´µôºó£¬·þÎñÏû·ÑÕßÓ¦Óý«ÎÞ·¨Ê¹Ó㬲¢ÎÞÏÞ´ÎÖØÁ¬µÈ´ý·þÎñÌṩÕ߻ָ´
(3) ÉìËõÐÔ£º
×¢²áÖÐÐÄΪ¶ÔµÈ¼¯Èº£¬¿É¶¯Ì¬Ôö¼Ó»úÆ÷²¿ÊðʵÀý£¬ËùÓпͻ§¶Ë½«×Ô¶¯·¢ÏÖеÄ×¢²áÖÐÐÄ
·þÎñÌṩÕßÎÞ״̬£¬¿É¶¯Ì¬Ôö¼Ó»úÆ÷²¿ÊðʵÀý£¬×¢²áÖÐÐĽ«ÍÆËÍеķþÎñÌṩÕßÐÅÏ¢¸øÏû·ÑÕß
ÌØÐÔ
ÃæÏò½Ó¿Ú´úÀíµÄ¸ßÐÔÄÜRPCµ÷ÓÃ
Ìṩ¸ßÐÔÄܵĻùÓÚ´úÀíµÄÔ¶³Ìµ÷ÓÃÄÜÁ¦£¬·þÎñÒÔ½Ó¿ÚΪÁ£¶È£¬Îª¿ª·¢Õ߯Á±ÎÔ¶³Ìµ÷Óõײãϸ½Ú¡£
ÖÇÄܸºÔؾùºâ
ÄÚÖöàÖÖ¸ºÔؾùºâ²ßÂÔ£¬ÖÇÄܸÐÖªÏÂÓνڵ㽡¿µ×´¿ö£¬ÏÔÖø¼õÉÙµ÷ÓÃÑÓ³Ù£¬Ìá¸ßϵͳÍÌÍÂÁ¿¡£
·þÎñ×Ô¶¯×¢²áÓë·¢ÏÖ
Ö§³Ö¶àÖÖ×¢²áÖÐÐÄ·þÎñ£¬·þÎñʵÀýÉÏÏÂÏßʵʱ¸ÐÖª¡£
¸ß¶È¿ÉÀ©Õ¹ÄÜÁ¦
×ñÑ΢ÄÚºË+²å¼þµÄÉè¼ÆÔÔò£¬ËùÓкËÐÄÄÜÁ¦ÈçProtocol¡¢Transport¡¢Serialization±»Éè¼ÆÎªÀ©Õ¹µã£¬Æ½µÈ¶Ô´ýÄÚÖÃʵÏֺ͵ÚÈý·½ÊµÏÖ¡£
ÔËÐÐÆÚÁ÷Á¿µ÷¶È
ÄÚÖÃÌõ¼þ¡¢½Å±¾µÈ·ÓɲßÂÔ£¬Í¨¹ýÅäÖò»Í¬µÄ·ÓɹæÔò£¬ÇáËÉʵÏÖ»Ò¶È·¢²¼£¬Í¬»ú·¿ÓÅÏȵȹ¦ÄÜ¡£
¿ÉÊÓ»¯µÄ·þÎñÖÎÀíÓëÔËά
Ìṩ·á¸»·þÎñÖÎÀí¡¢ÔËά¹¤¾ß£ºËæÊ±²éѯ·þÎñÔªÊý¾Ý¡¢·þÎñ½¡¿µ×´Ì¬¼°µ÷ÓÃͳ¼Æ£¬ÊµÊ±Ï·¢Â·ÓɲßÂÔ¡¢µ÷ÕûÅäÖòÎÊý¡£
Àý×Ó
·þÎñ¶Ë
¶¨ÒåÒ»¸öService Interface£º£¨HelloService.java£©
package com.alibaba.hello.api;
public interface HelloService
{
String sayHello(String name);
} |
½Ó¿ÚµÄʵÏÖÀࣺ£¨HelloServiceImpl.java£©
package com.alibaba.hello.impl;
import com.alibaba.hello.api.HelloService;
public class HelloServiceImpl implements HelloService{
public String sayHello(String name){
return "Hello" + name;
}
} |
SpringÅäÖ㺣¨provider.xml£©

²âÊÔ´úÂ룺£¨Provider.java£©

¿Í»§¶Ë
SpringÅäÖÃÎļþ£º(consumer.xml)

¿Í»§¶Ë²âÊÔ´úÂ룺£¨Consumer.java£©

|