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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
΢¹ÛSOA£º·þÎñÉè¼ÆÔ­Ôò¼°Æäʵ¼ù·½Ê½
 
×÷Õß ÉòÀí£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-10-28
  3816  次浏览      33
 

΢¹ÛSOA£º·þÎñÉè¼ÆÔ­Ôò¼°Æäʵ¼ù·½Ê½£¨ÉÏÆª£©

´óÁ¿»¥ÁªÍø¹«Ë¾¶¼ÔÚÓµ±§SOAºÍ·þÎñ»¯£¬µ«Òµ½ç¶ÔSOAµÄºÜ¶àÌÖÂÛ¶¼±È½ÏÆ«Ïò¸ß´óÉÏ¡£±¾ÎÄÊÔͼ´ÓÉÔ΢²»Í¬µÄ½Ç¶È£¬ÒÔÏà¶Ô½ÓµØÆøµÄ·½Ê½À´ÌÖÂÛSOA£¬¼¯ÖÐÌÖÂÛSOAÔÚ΢¹Ûʵ¼ù²ãÃæÖеÄÔµÆð¡¢±¾Öʺ;ßÌå²Ù×÷·½Ê½£¬ÁíÍâÒ²ÓÃÏ൱ƪ·ù½éÉÜÁ˵±½ñ»¥ÁªÍøÐÐÒµÖи÷ÖÖÁ÷ÐеÄÔ¶³Ìµ÷Óü¼ÊõµÈµÈ£¬±È½ÏÊʺϴÓÊÂʵ¼Ê¹¤×÷µÄ¼Ü¹¹Ê¦ºÍ³ÌÐòÔ±À´ÔĶÁ¡£

ΪÁË·½±ãÔĶÁ£¬±¾»°Ì⽫·ÖΪÁ½ÆªÕ¹ÏÖ¡£±¾ÎÄÊÇÉÏÆª£¬×ÅÑÛÓÚ΢¹ÛSOAµÄ¶¨Ò壬²¢¼òµ¥·ÖÎöÆäºËÐÄÔ­Ôò¡£

ÑÇÂíÑ·CEO½Ü·ò?±´×ô˹£ºÏÊΪÈËÖªµÄSOA´óʦ

ÓÉÓÚSOAÓÐÏ൱µÄÄѶȺÍÃż÷£¬²»·ÁÏÈ´ÓÒ»¸öС¹ÊÊÂ˵Æð£¬´ÓÖпÉÒԹܿúÒ»µãSOAµÄ´óÒâºÍ×÷Óá£

°´ÕÕÑÇÂíÑ·Ç°ÖøÃûÔ±¹¤Steve YeggeÖøÃûµÄ¡°¾ÆºóͲۡ±£¬2002Äê×óÓÒ£¬CEO±´×ô˹¾ÍÔÚÑÇÂíÑ·Ç¿ÖÆÍÆÐÐÁËÒÔÏÂÁù¸öÔ­Ôò£¨Õª×Ô¿á¿Ç£©£º

1.ËùÓÐÍŶӵijÌÐòÄ£¿é¶¼ÒªÒÔͨ¹ýService Interface ·½Ê½½«ÆäÊý¾ÝÓ빦ÄÜ¿ª·Å³öÀ´¡£

2.ÍŶӼäµÄ³ÌÐòÄ£¿éµÄÐÅϢͨÐÅ£¬¶¼ÒªÍ¨¹ýÕâЩ½Ó¿Ú¡£

3.³ý´ËÖ®ÍâûÓÐÆäËüµÄͨÐÅ·½Ê½¡£ÆäËûÐÎʽһ¸Å²»ÔÊÐí£º²»ÄÜʹÓÃÖ±½ÓÁ´½á³ÌÐò¡¢²»ÄÜÖ±½Ó¶ÁÈ¡ÆäËûÍŶӵÄÊý¾Ý¿â¡¢²»ÄÜʹÓù²ÏíÄÚ´æÄ£Ê½¡¢²»ÄÜʹÓñðÈËÄ£¿éµÄºóÃÅ¡¢µÈµÈ£¬µÈµÈ£¬Î¨Ò»ÔÊÐíµÄͨÐÅ·½Ê½Ö»ÄÜÊÇÄܹýµ÷Óà Service Interface¡£

4.Èκμ¼Êõ¶¼¿ÉÒÔʹÓᣱÈÈ磺HTTP¡¢Corba¡¢Pubsub¡¢×Ô¶¨ÒåµÄÍøÂçЭÒé¡¢µÈµÈ£¬¶¼¿ÉÒÔ£¬±´×ô˹²»¹ÜÕâЩ¡£

5.ËùÓеÄService Interface£¬ºÁÎÞÀýÍ⣬¶¼±ØÐë´Ó¹Ç×ÓÀïµ½±íÃæÉÏÉè¼Æ³ÉÄܶÔÍâ½ç¿ª·ÅµÄ¡£Ò²¾ÍÊÇ˵£¬ÍŶӱØÐë×öºÃ¹æ»®ÓëÉè¼Æ£¬ÒÔ±ãδÀ´°Ñ½Ó¿Ú¿ª·Å¸øÈ«ÊÀ½çµÄ³ÌÐòÔ±£¬Ã»ÓÐÈκÎÀýÍâ¡£

6.²»ÕâÑùµÄ×öµÄÈ˻ᱻ³´öÏÓã¡£

¾Ý˵£¬ÑÇÂíÑ·ÍøÕ¾Õ¹Ê¾Ò»¸ö²úÆ·Ã÷ϸµÄÒ³Ãæ£¬¿ÉÄÜÒªµ÷ÓÃ200-300¸öService£¬ÒÔ±ãÉú³É¸ß¶È¸öÐÔ»¯µÄÄÚÈÝ¡£

Steve»¹Ìáµ½£º

AmazonÒѾ­°ÑÎÄ»¯×ª±ä³ÉÁË¡°Ò»ÇÐÒÔServiceµÚÒ»¡±ÎªÏµÍ³¼Ü¹¹µÄ¹«Ë¾£¬½ñÌ죬ÕâÒѾ­³ÉΪËûÃǽøÐÐËùÓÐÉè¼ÆÊ±µÄ»ù´¡£¬°üÀ¨ÄÇЩ¾ø²»»á±»Íâ½çËùÖªµÄ½öÔÚÄÚ²¿Ê¹ÓõŦÄÜ¡£

ÄÇʱ£¬Èç¹ûûÓб»½â¹ÍµÄµÄ¿Ö¾åËûÃÇÒ»¶¨²»»áÈ¥×ö¡£ÎÒÊÇ˵£¬ËûÃǽñÌìÈÔȻű»½â¹Í£¬ÒòΪÕâ»ù±¾ÉÏÊÇÄǶùÿÌìµÄÉú»î£¬ÎªÄǿֲÀµÄº£µÁÍ·×Ó±´×ô˹¹¤×÷¡£²»¹ý£¬ËûÃÇÕâô×öµÄÈ·ÊÇÒòΪËûÃÇÒѾ­ÏàÐÅServiceÕâ¾ÍÊÇÕýÈ·µÄ·½Ïò¡£ËûÃǶÔÓÚSOAµÄÓŵãºÍȱµãûÓÐÒÉÎÊ£¬Ä³Ð©È±µã»¹ºÜ´ó£¬Ò²²»ÒÉÎÊ¡£µ«×ܵÄÀ´Ëµ£¬ÕâÊÇÕýÈ·µÄ£¬ÒòΪ£¬SOAÇý¶¯³öÀ´µÄÉè¼Æ»á²úÉú³öƽ̨£¨Platform£©¡£

½ñÌ죬ÎÒÃǶ¼ÖªµÀÑÇÂíÑ·´ÓÊÀ½çÉÏ×î´óͼÊéÂô³¡½ø»¯ÎªÁËÊÀ½çÉÏ×î³É¹¦µÄÔÆÆ½Ì¨¡­¡­

±´×ô˹µÄÁùÔ­Ôòչʾ³ö¸ß¶ÈµÄÔ¶¼ûºÍ³¬Ç¿µÄÐÅÄ¼´Ê¹·Åµ½Ê®¼¸ÄêºóµÄ½ñÌ죬ÒÀÈ»¾õµÃÕñÁû·¢ñù¡­¡­ÏëÆðÒ»¾äÀÏ»°£º¡°²»Ä±ÍòÊÀÕߣ¬²»×ãÒÔıһʱ£»²»Ä±È«¾ÖÕߣ¬²»×ãÒÔıһÓç¡£¡±

µ±È»£¬Ïñ±´×ô˹ÕâÖÖ½«ÉñÐÔÓëħÐÔ¼¯ÓÚÒ»ÉíµÄרºáÈËÎ¼È¿ÉÄÜ´´Ô컮ʱ´úµÄ½ø²½£¬Ò²¿ÉÄÜÖÆÔìǰËùδÓеÄÔÖÄÑ¡£

SOAÂþ̸£ººê¹ÛÓë΢¹Û

SOA¼´ÃæÏò·þÎñ¼Ü¹¹£¬ÊÇÒ»¸öÌØ±ð´óµÄ»°Ìâ¡£

ΪÁË·½±ãÌÖÂÛ£¬ÎÒÔÚ´ËÏȲÝÂʵĽ«SOA·ÖΪÁ½¸ö²ãÃæ£¨´ó¸ÅÄ£·Âºê¹ÛºÍ΢¹Û¾­¼Ãѧ£¬µ«ÕâÀïµÄ»®·ÖûÓоø¶Ô½çÏÞ£©£º

1.ºê¹ÛSOA£ºÃæÏò¸ß²ã´ÎµÄ²¿Ãż¶±ð¡¢¹«Ë¾¼¶±ðÉõÖÁÐÐÒµ¼¶±ð£»Éæ¼°ÉÌÒµ¡¢¹ÜÀí¡¢¼¼ÊõµÈ·½ÃæµÄ×ۺϵġ¢È«¾ÖµÄ¿¼ÂÇ£»¼Ü¹¹ÌåϵÉϰüÀ¨·þÎñÖÎÀí£¨governance£¬Èç·þÎñ×¢²á£¬·þÎñ¼à¿Ø£©£¬·þÎñ±àÅÅ£¨orchestration£¬ÈçBPM£¬ESB)£¬·þÎñЭͬ£¨choreography£¬¸ü¶àÃæÏò¿çÆóÒµ¼¯³É£©µÈµÈ¡£ÎÒÈÏΪSOA±¾Éí×îÖ÷ÒªÊÇÃæÏòºê¹Û²ãÃæµÄ¼Ü¹¹£¬Æä´øÀ´Òæ´¦Ò²×îÄÜÔÚºê¹Û¸ß²ã´ÎÉÏÌåÏÖ³öÀ´£¬Í¬Ê±´ó²¿·ÖSOAµÄÒµ½çÌÖÂÛÒ²¼¯ÖÐÔÚÕâ·½Ãæ¡£

2.΢¹ÛSOA£ºÃæÏòÓÐÏ޵ġ¢¾Ö²¿µÄÍŶӺ͸öÈË£»Éæ¼°¶ÀÁ¢µÄ¡¢¾ßÌåµÄ·þÎñÔÚÒµÎñ¡¢¼Ü¹¹¡¢¿ª·¢ÉϵĿ¼ÂÇ¡£

ºÜ¶àÒµ½çר¼Ò¶¼ÈÏΪSOA¸ÅÄî¹ýÓÚ³éÏ󣬲»½ÓµØÆø£¬ÎÒÈÏΪÖ÷ÒªÊǺê¹ÛSOAÉæ¼°ÃæÌ«¹ã£¬¾­³£ÐèÒª×öͨÅÌ¿¼ÂÇ£¬¶øÆäÖÐºÜ¶à·½Ãæ¾àÀëÒ»°ãÈËÓֱȽÏÔ¶¡£¶øÔÚ΢¹Û²ãÃæµÄSOA¸üÈÝÒ×´ïµ½Ìθç¹ýÈ¥Ìá³öµÄ¡°ÈýÌù½ü¡±£ºÌù½üʵ¼Ê¡¢Ìù½üÉú»î¡¢Ìù½üȺÖÚ¡£

ͬʱ£¬ºê¹ÛSOAҪȡµÃ³É¹¦£¬Í¨³£µÄǰÌáÒ²ÊÇSOAÔÚ΢¹Û²ãÃæµÄÂ䵨ÓëÂäʵ£¬ÕýÈçºê¹Û¾­¼Ãѧһ°ãÒªÓмáʵµÄ΢¹Û»ù´¡£¨±ÈÈç´óÃû¶¦¶¦µÄ¿­¶÷˹Ö÷ÒåÔø¹ãÊÜÚ¸²¡µÄÒ»µã¾ÍÊÇȱ·¦Î¢¹Û»ù´¡£©

Òò´Ë£¬ÎÒÃÇ×ÅÑÛÓÚSOAÂ䵨µÄÄ¿µÄ£¬×ÅÖØÀ´·ÖÎö΢¹ÛSOA£¬Ò²ËãÊǶÔÒµ½çÖ÷Á÷̽ÌÖµÄÒ»¸öССµÄ²¹³ä¡£

SOA¶¨Òå

°´ÕÕÓ¢ÎÄά»ù°Ù¿Æ¶¨Ò壺SOAÊÇÒ»ÖÖ¡°Èí¼þ¡±ºÍ¡°Èí¼þ¼Ü¹¹¡±µÄÉè¼ÆÄ£Ê½£¨»òÕß½ÐÉè¼ÆÔ­Ôò£©¡£ËüÊÇ»ùÓÚÏ໥¶ÀÁ¢µÄÈí¼þƬ¶ÎÒª½«×ÔÉíµÄ¹¦ÄÜͨ¹ý¡°·þÎñ¡±Ìṩ¸øÆäËûÓ¦Óá£

ʲôÊÇ¡°·þÎñ¡±£¿°´ÕÕOASISµÄ¶¨Ò壺ServiceÊÇÒ»ÖÖ°´Õռȶ¨¡°½Ó¿Ú¡°À´·ÃÎÊÒ»¸ö»ò¶à¸öÈí¼þ¹¦ÄܵĻúÖÆ£¨ÁíÍâÕâÖÖ·ÃÎÊÒª·ûºÏ¡°·þÎñÃèÊö¡±ÖвßÂÔºÍÏÞÖÆ£©

ServiceʾÀý£¨´úÂëͨ³£ÒÔjavaʾÀý£©

public interface Echo {
String echo(String text);
}

public class EchoImpl implements Echo {
public String echo(String text) {
return text;
}
}

¿ÉÄÜÿ¸ö¿ª·¢ÈËԱÿÌì¶¼ÔÚдÀàËÆµÄÃæÏò¶ÔÏóµÄService£¬ÄѵÀÕâ¾ÍÊÇÔÚʵʩSOAÂð£¿

SOAÉè¼ÆÔ­Ôò

¼ÈÈ»SOAÊÇÉè¼ÆÔ­Ôò£¨Ä£Ê½£©£¬ÄÇôËü°üº¬ÄÄЩÄÚÈÝÄØ£¿ÊÂʵÉÏ£¬Õâ·½Ãæ²¢Ã»ÓÐ×î±ê×¼µÄ´ð°¸£¬¶àÊýÊÇ×ñ´ÓÖøÃûSOAר¼ÒThomas ErlµÄ¹éÄÉ£º

±ê×¼»¯µÄ·þÎñÆõÔ¼ Standardized service contract ·þÎñµÄËÉñîºÏ Service loose coupling ·þÎñµÄ³éÏó Service abstraction ·þÎñµÄ¿ÉÖØÓÃÐÔ Service reusability ·þÎñµÄ×ÔÖÎÐÔ Service autonomy ·þÎñµÄÎÞ״̬ÐÔ Service statelessness ·þÎñµÄ¿É·¢ÏÖÐÔ Service discoverability ·þÎñµÄ¿É×éºÏÐÔ Service composability ....

ÕâЩԭÔò×ܵÄÀ´ËµÒª´ïµ½µÄÄ¿µÄÊÇ£ºÌá¸ßÈí¼þµÄÖØÓÃÐÔ£¬¼õÉÙ¿ª·¢ºÍά»¤µÄ³É±¾£¬×îÖÕÔö¼ÓÒ»¸ö¹«Ë¾ÒµÎñµÄÃô½Ý¶È¡£

µ«ÊÇ£¬Òµ½çÖøÃûר¼ÒÈçDon Box£¬David OrchardµÈÈ˶ÔSOAÓÖÓи÷×Ô²»Í¬µÄ×ܽáºÍ²àÖØ¡£

SOA²»µ«Ã»Óоø¶ÔͳһµÄÔ­Ôò£¬¶øÇҺܶàÔ­Ôò±¾ÉíµÄÄÚÈÝÒ²¾ß±¸Ï൱ģºýÐÔºÍ¿í·ºÐÔ£ºÀýÈ磬ËùνËÉñîºÏÔ­ÔòÐèÒªËÉÉ¢µ½Ê²Ã´³Ì¶È²ÅËãÊÇ·ûºÏ±ê×¼µÄÄØ£¿Õâ¾ÍºÃ±ÈÒ»¸öÈËҪ˧µ½Ê²Ã´³Ì¶È²ÅËãÊÇ˧¸çÄØ£¿Ò»¶°Â¥Òª¸ßµ½¶àÉÙÃײÅËãÊǸßÂ¥ÄØ£¿¿ÉÄܲ»Í¬ÈËÐÄÖж¼ÓÐ×Ô¼ºµÄÒ»¸Ë³Ó¡­¡­²¿·ÖÓÉÓÚÕâЩÀíÂÛÉϵIJ»È·¶¨ÒòËØ£¬²»Í¬µÄÈËÀí½â»òÕßʵʩµÄSOAÊÂʵÉÏÒ²¿ÉÄÜÓбȽϴóµÄ²î±ð¡£

dzÎöËÉñîºÏÔ­Ôò

SOAÔ­Ôò±È½Ï¶à£¬ÕæÕýµÄÀí½âÍùÍùÐèÒªÖ𲽵ĻýÀÛºÍÌå»á£¬ËùÒÔÔڴ˲»Ïêϸչ¿ª¡£ÕâÀï½öÒÔ·þÎñµÄËÉñîºÏΪÀý£¬´Ó²»Í¬Î¬¶ÈÀ´¼òµ¥ÆÊÎöÒ»ÏÂÕâ¸öÔ­Ôò£¬ÒÔ˵Ã÷SOAÔ­ÔòÄÚº­µÄ·á¸»ÐÔ£º

1.ʵÏÖµÄËÉñîºÏ£ºÕâÊÇ×î»ù±¾µÄËÉñîºÏ£¬¼´·þÎñÏû·Ñ¶Ë²»ÐèÒªÒÀÀµ·þÎñÆõÔ¼µÄij¸öÌØ¶¨ÊµÏÖ£¬ÕâÑù·þÎñÌṩ¶ËµÄÄÚ²¿±ä¸ü¾Í²»»áÓ°Ïìµ½Ïû·Ñ¶Ë£¬¶øÇÒÏû·Ñ¶ËδÀ´»¹¿ÉÒÔ×ÔÓÉÇл»µ½¸ÃÆõÔ¼µÄÆäËûÌṩ·½¡£

2.ʱ¼äµÄËÉñîºÏ£ºµäÐ;ÍÊÇÒì²½ÏûÏ¢¶ÓÁÐϵͳ£¬ÓÉÓÚÓÐÖнéÕߣ¨broker£©£¬ËùÒÔÉú²úÕߺÍÏû·ÑÕß²»±ØÔÚͬһʱ¼ä¶¼±£³Ö¿ÉÓÃÐÔÒÔ¼°ÏàͬµÄÍÌÍÂÁ¿£¬¶øÇÒÉú²úÕßÒ²²»ÐèÒªÂíÉϵȵ½»Ø¸´¡£

3.λÖõÄËÉñîºÏ£ºµäÐ;ÍÊÇ·þÎñ×¢²áÖÐÐÄºÍÆóÒµ·þÎñ×ÜÏߣ¨ESB£©£¬Ïû·Ñ¶ËÍêÈ«²»ÐèÒªÖ±½ÓÖªµÀÌṩ¶ËµÄ¾ßÌåλÖ㬶ø¶¼Í¨¹ý×¢²áÖÐÐÄÀ´²éÕÒ»òÕß·þÎñ×ÜÏßÀ´Â·ÓÉ¡£

4.°æ±¾µÄËÉñîºÏ£ºÏû·Ñ¶Ë²»ÐèÒªÒÀÀµ·þÎñÆõÔ¼µÄij¸öÌØ¶¨°æ±¾À´¹¤×÷£¬Õâ¾ÍÒªÇó·þÎñµÄÆõÔ¼ÔÚÉý¼¶Ê±Òª¾¡¿ÉÄܵÄÌṩÏòϼæÈÝÐÔ¡£

SOAÓ봫ͳÈí¼þÉè¼Æ

ÎÒÃÇ¿ÉÒÔÈÏΪ£ºSOA ¡Ö Ä£¿é»¯¿ª·¢ + ·Ö²¼Ê½¼ÆËã

½«Á½Õß´«Í³ÉϵÄ×î¼Ñʵ¼ù½áºÏÔÚÒ»Æð£¬»ù±¾ÉÏ¿ÉÒÔÍÆµ¼³öSOAµÄ¶àÊýÉè¼ÆÔ­Ôò¡£SOA´ÓÈí¼þÉè¼Æ£¨Ôݲ»¿¼ÂÇÒµÎñ¼Ü¹¹Ö®ÀࣩÉÏÀ´½²£¬×ÔÉíµÄж«Î÷Æäʵ²»ËãºÜ¶à¡£

SOAÔ­ÔòµÄÓ¦ÓÃ

»ùÓÚSOAµÄÔ­Ôò£¬Ò²ÐíÎÒÃǺÜÄÑ˵ʲôӦÓÃÊǾø¶Ô·ûºÏSOAµÄ£¬µ«ÊÇÈ´ÄÜÌÞ³ýÃ÷ÏÔ²»·ûºÏSOAµÄÓ¦Óá£

ÓÃÉÏÊö±ê×¼»¯ÆõÔ¼£¬ËÉñîºÏºÍ¿ÉÖØÓÃÕ⼸¸öÔ­ÔòÀ´³¢ÊÔ·ÖÎöÒ»ÏÂÉÏÃæEchoʾÀý£º

1.EchoµÄ·þÎñÆõÔ¼ÊÇÓÃJava½Ó¿Ú¶¨Ò壬¶ø²»ÊÇÒ»ÖÖÓëÆ½Ì¨ºÍÓïÑÔÎ޹صıê×¼»¯Ð­Ò飬ÈçWSDL£¬CORBA IDL¡£µ±È»¿ÉÒÔ̧¸Ü£¬JavaÒ²ÊÇÐÐÒµ±ê×¼£¬ÉõÖÁÈ«¹úÑÀ·À×éÒ»ÖÂÈ϶¨µÄ¶«Î÷Ò²ÊÇÐÐÒµ±ê×¼¡£

2.Java½Ó¿Ú´ó´ó¼ÓÖØÁËÓëService¿Í»§¶ËµÄñîºÏ¶È£¬¼´ÒªÇó¿Í»§¶Ë±ØÐëÒ²ÊÇJava£¬»òÕßJVMÉϵĶ¯Ì¬ÓïÑÔ£¨ÈçGroovy¡¢Jython£©µÈµÈ¡­¡­

3.ͬʱ£¬EchoÊÇÒ»¸öJavaµÄ±¾µØ½Ó¿Ú£¬¾ÍÒªÇóµ÷ÓÃÕß×îºÃÔÚͬһ¸öJVM½ø³ÌÖ®ÄÚ¡­¡­

4.EchoµÄÒµÎñÂß¼­ËäÈ»¼òµ¥¶ÀÁ¢£¬µ«ÒÔÉϼ¼Êõ·½ÃæµÄ¾ÖÏ޾͵¼ÖÂËüÎÞ·¨ÒÔºóÔÚÆäËû³¡ºÏ±»ÇáÒ×ÖØÓ㬱ÈÈç·Ö²¼Ê½»·¾³£¬Ò칹ƽ̨µÈµÈ¡£

Òò´Ë£¬ÎÒÃÇ¿ÉÒÔÈÏΪEcho²¢²»Ì«·ûºÏSOAµÄ»ù±¾Éè¼ÆÔ­Ôò¡£

͸Ã÷»¯µÄתÏòSOA£¿

ÐÞ¸ÄÒ»ÏÂÉÏÃæµÄEcho£¬Ìí¼ÓJava EEµÄ@WebServices×¢½â£¨annotation£©

@WebServices
public class EchoImpl implements Echo {
public String echo(String text) {
return text;
}
}

ÏÖÔÚ½«Echo·¢²¼ÎªJava WebServices£¬²¢Óɵײã¿ò¼Ü×Ô¶¯Éú³ÉWSDLÀ´×÷Ϊ±ê×¼»¯µÄ·þÎñÆõÔ¼£¬ÕâÑù¾ÍÄÜÓëÔ¶³ÌµÄ¸÷ÖÖÓïÑÔºÍÆ½Ì¨»¥²Ù×÷ÁË£¬½ÏºÃµÄ½â¾öÁËÉÏÃæÌáµ½µÄËÉñîºÏºÍ¿ÉÖØÓõÄÎÊÌâ¡£°´ÕÕÒ»°ãµÄÀí½â£¬EchoËÆºõ¾Í³ÉΪ±È½ÏÀíÏëµÄSOA serviceÁË¡£

µ«ÊÇ¡­¡­¼´Ê¹Õâ¸ö¼«¶Ë¼ò»¯µÄÀý×Ó£¬Ò²»áÒý³ö²»ÉٺܹؼüµÄÎÊÌ⣬ËüÃǾö¶¨SOAÉè¼Æ¿ª·¢µÄijЩÄѶȣº

1.½«Ò»¸öÆÕͨµÄJava¶ÔÏóͨ¹ýÌí¼Ó×¢½â¡°Í¸Ã÷µÄ¡±±ä³ÉWebServices¾ÍÍê³ÉÁË´ÓÃæÏò¶ÔÏóµ½ÃæÏò·þÎñµÄ¿çÔ½£¿

2.ͨ¹ýJava½Ó¿ÚÉú³ÉWSDL·þÎñÆõÔ¼ÊǺõķ½Ê½Âð£¿

3.WebServicesÊÇ×îºÏÊÊÔ¶³Ì·ÃÎʼ¼ÊõÂð£¿

ÃæÏò¶ÔÏóºÍÃæÏò·þÎñµÄ¶Ô±È

ÃæÏò¶ÔÏó£¨OO£©ºÍÃæÏò·þÎñ£¨SO£©ÔÚ»ù´¡ÀíÄîÉÏÓдóÁ¿¹²Í¨Ö®´¦£¬±ÈÈç¶¼¾¡¿ÉÄÜ×·Çó³éÏó¡¢·â×°ºÍµÍñîºÏ¡£

µ«SOÏà¶ÔÓÚOO£¬ÓÖÓзdz£²»Í¬µÄµäÐÍÓ¦Óó¡¾°£¬±ÈÈ磺

¶àÊýOO½Ó¿Ú£¨interface£©¶¼Ö»±»ÓÐÏÞµÄÈËʹÓ㨱ÈÈçÍŶӺͲ¿ÃÅÄÚ£©£¬¶øSO½Ó¿Ú£¨»òÕß½ÐÆõÔ¼£©Ò»°ãÀ´Ëµ¶¼²»Ó¦¸Ã¶ÔʹÓÃÕߵķ¶Î§×÷³öÌ«¶àµÄÏÞ¶¨ºÍ¼ÙÉ裨¿ÉÒÔÊDz»Í¬²¿ÃÅ£¬²»Í¬ÆóÒµ£¬²»Í¬¹ú¼Ò£©¡£»¹¼ÇµÃ±´×ô˹ԭÔòÂ𣿡°ÍŶӱØÐë×öºÃ¹æ»®ÓëÉè¼Æ£¬ÒÔ±ãδÀ´°Ñ½Ó¿Ú¿ª·Å¸øÈ«ÊÀ½çµÄ³ÌÐòÔ±£¬Ã»ÓÐÈκÎÀýÍ⡱¡£

¶àÊýOO½Ó¿Ú¶¼Ö»ÔÚ½ø³ÌÄÚ±»·ÃÎÊ£¬¶øSO½Ó¿Úͨ³£¶¼ÊDZ»Ô¶³Ìµ÷Óá£

¼òµ¥½²£¬¾ÍÊÇSO½Ó¿ÚʹÓ÷¶Î§±ÈÒ»°ãOO½Ó¿Ú¿ÉÄܹ㷺µÃ¶à¡£ÎÒÃÇÓÃÍøÕ¾´ò¸ö±È·½£ºÒ»¸ö´óÐÍÍøÕ¾µÄweb½çÃæ¾ÍÊÇËüÕû¸öϵͳÈë¿ÚµãºÍ±ß½ç£¬¿ÉÄÜÒªÃæ¶ÔÈ«ÊÀ½çµÄ·ÃÎÊÕߣ¨ËùÒÔ¾­³£»á×ö¹ú¼Ê»¯Ö®ÀàµÄ¹¤×÷£©£¬¶øÏµÍ³ÄÚ²¿´«Í³µÄOO½Ó¿ÚºÍ³ÌÐòÔò±»Òþ²ØÔÚweb½çÃæÖ®ºó£¬Ö»±»ÄÚ²¿½ÏС·¶Î§Ê¹Ó᣶øÀíÏëµÄSO½Ó¿ÚºÍweb½çÃæÒ»Ñù£¬Ò²ÊDZä³ÉϵͳÈë¿ÚºÍ±ß½ç£¬¿ÉÄÜÒª¶ÔÈ«ÊÀ½ç¿ª·¢Õß¿ª·Å£¬Òò´ËSOÔÚÉè¼Æ¿ª·¢Ö®ÖÐÓëOOÏà±ÈÆäʵ»áÓкܶ಻ͬ¡£

С½á

ÔÚǰÊö±È½Ï³éÏóµÄSOA´óÔ­ÔòµÄ»ù´¡ÉÏ£¬ÎÒÃǿɳ¢ÊÔÍÆµ¼Ò»Ð©½Ïϸ»¯ºÍ¿É²Ù×÷µÄÔ­Ôò£¬ÔÚ¾ßÌåʵ¼ùÖÐÌåÏÖSOµÄ¶ÀÌØÖ®´¦¡£Çë¹Ø×¢±¾ÏµÁÐÎÄÕµÄÏÂÆª£¡

΢¹ÛSOA£º·þÎñÉè¼ÆÔ­Ôò¼°Æäʵ¼ù·½Ê½£¨ÏÂÆª£©

ÔÚÉÏһƪÎÄÕÂÖУ¬ÎÒ˵µ½SOAÊÇÒ»¸öÌØ±ð´óµÄ»°Ì⣬²»µ«Ã»Óоø¶ÔͳһµÄÔ­Ôò£¬¶øÇҺܶàÔ­Ôò±¾ÉíµÄÄÚÈÝÒ²¾ß±¸Ï൱ģºýÐÔºÍ¿í·ºÐÔ¡£ËäÈ»ÎÒÃÇ¿ÉÒÔ˵SOA ¡Ö Ä£¿é»¯¿ª·¢ + ·Ö²¼Ê½¼ÆË㣬µ«ÓÉÓÚÆäÔ­ÔòµÄÄ£ºýÐÔ£¬ÎÒÃÇÈÔÈ»ºÜÄÑ˵ʲôӦÓÃÊǾø¶Ô·ûºÏSOAµÄ£¬Ö»ÄÜʶ±ð³öÄÄЩÊDz»·ûºÏSOAµÄ¡£

±¾Æª½«¶Ô8ÖֿɲÙ×÷µÄ·þÎñÉè¼ÆÔ­Ôò½øÐÐϸ»¯µÄ·ÖÎö£¬×÷ΪSOAʵ¼ùµÄ²Î¿¼¡£

·þÎñÉè¼ÆÔ­Ôò1£ºÓÅ»¯Ô¶³Ìµ÷ÓÃ

ÕâÀïµÄÔ¶³Ìµ÷ÓÃÌØÖ¸RPC£¨Remote Procedure Call£©¡£µ±È»¸üÃæÏò¶ÔÏóµÄ˵·¨Ó¦¸ÃÊÇÔ¶³Ì·½·¨µ÷ÓûòÕßÔ¶³Ì·þÎñµ÷Óõȵȡ£

ÓÉÓÚSO½Ó¿Úͨ³£Òª±»Ô¶³Ì·ÃÎÊ£¬¶øÍøÂç´«Ê䣬¶ÔÏóÐòÁл¯/·´ÐòÁл¯µÈ¿ªÏú¶¼Ô¶Ô¶³¬¹ý±¾µØObject·ÃÎʼ¸¸öÊýÁ¿¼¶£¬ËùÒÔÒª¼Ó¿ìϵͳµÄÏìÓ¦ËÙ¶È¡¢¼õÉÙ´ø¿íÕ¼ÓúÍÌá¸ßÍÌÍÂÁ¿£¬Ñ¡Ôñ¸ßÐÔÄܵÄÔ¶³Ìµ÷Ó÷½Ê½¾­³£ÊǺÜÖØÒªµÄ¡£

µ«ÊÇÔ¶³Ìµ÷Ó÷½Ê½ÍùÍùÓÖÒªÊÜÏÞÓÚ¾ßÌåµÄÒµÎñºÍ²¿Êð»·¾³£¬±ÈÈçÄÚÍø¡¢ÍâÍø¡¢Í¬¹¹Æ½Ì¨¡¢Ò칹ƽ̨µÈµÈ¡£ÓÐʱ»¹Òª¿¼ÂÇËü¶ÔÖîÈç·Ö²¼Ê½ÊÂÎñ£¬ÏûÏ¢¼¶±ðÇ©Ãû/¼ÓÃÜ£¬¿É¿¿Òì²½´«ÊäµÈ·½ÃæµÄÖ§³Ö³Ì¶È£¨ÕâЩ·½ÃæÍ¨³£±»³ÆÎªSLA£ºservice level agreement£©£¬ÉõÖÁ»¹°üÀ¨¿ª·¢ÕßµÄÊìϤºÍ½ÓÊ̶ܳȵȵȡ£

Òò´Ë£¬Ô¶³Ìµ÷Ó÷½Ê½ÍùÍùÐèÒª¸ù¾Ý¾ßÌåÇé¿ö×ö³öÑ¡ÔñºÍȨºâ¡£

ÒÔJavaÔ¶³ÌServiceΪÀý·ÖÎö²»Í¬³¡¾°Ï£¬´«Ê䷽ʽµÄijЩ¿ÉÄܽϺÃÑ¡Ôñ£º

1.ÄÚÍø + ͬ¿ò¼ÜJava¿Í»§¶Ë + ´ó²¢·¢£º¶à·¸´ÓõÄTCP³¤Á¬½Ó + kryo £¨¶þ½øÖÆÐòÁл¯£© £¨kryoÒ²¿ÉÒÔÓÃProtostuff£¬FSTµÈ´úÌæ£©

2.ÄÚÍø + ²»Í¬¿ò¼ÜJava¿Í»§¶Ë£ºTCP + Kryo

3.ÄÚÍø + Java¿Í»§¶Ë + 2PC·Ö²¼Ê½ÊÂÎñ£ºRMI/IIOP £¨TCP + ¶þ½øÖÆ£©

4.ÄÚÍø + Java¿Í»§¶Ë + ¿É¿¿Òì²½µ÷ÓãºJMS + Kryo £¨TCP + ¶þ½øÖÆ£©

5.ÄÚÍø + ²»Í¬ÓïÑÔ¿Í»§¶Ë£ºthrift£¨TCP + ¶þ½øÖÆÐòÁл¯£©

6.ÍâÍø + ²»Í¬ÓïÑÔ¿Í»§¶Ë + ÆóÒµ¼¶ÌØÐÔ£ºHTTP + WSDL + SOAP £¨Îı¾£©

7.ÍâÍø + ¼æ¹Ëä¯ÀÀÆ÷¡¢ÊÖ»úµÈ¿Í»§¶Ë£ºHTTP + JSON £¨Îı¾£©

8.ÍâÍø + ²»Í¬ÓïÑÔ¿Í»§¶Ë + ¸ßÐÔÄÜ£ºHTTP + ProtocolBuffer £¨¶þ½øÖÆ£©

¼òµ¥À´Ëµ£¬´ÓÐÔÄÜÉϽ²£¬tcpЭÒé + ¶þ½øÖÆÐòÁл¯¸üÊʺÏÄÚÍøÓ¦ÓᣴӼæÈÝÐÔ¡¢¼òµ¥ÐÔÉÏÀ´Ëµ£¬httpЭÒé + Îı¾ÐòÁл¯¸üÊʺÏÍâÍøÓ¦Óᣵ±È»Õâ²¢²»ÊǾø¶ÔµÄ¡£ÁíÍ⣬tcpЭÒéÔÚÕâÀï²¢²»ÊÇÏÞ¶¨Ô¶³Ìµ÷ÓÃЭÒéÒ»¶¨Ö»ÄÜÊÇλÓÚOSIÍøÂçÄ£Ð͵ĵÚËIJãµÄԭʼtcp£¬Ëü¿ÉÒÔ°üº¬tcpÖ®ÉϵÄÈκηÇhttpЭÒé¡£

ËùÒÔ£¬»Ø´ðÉÏÃæÌáµ½µÄÎÊÌ⣬WebServices £¨¾­µäµÄWSDL+SOAP+HTTP£©ËäÈ»ÊÇ×î·ûºÏǰÊöSOAÉè¼ÆÔ­ÔòµÄ¼¼Êõ£¬µ«²¢²»µÈͬÓÚSOA£¬ÎÒÈÏΪËüÖ»ÊÇÂú×ãÁËSOAµÄµ×Ïߣ¬¶øÎ´±ØÊÇij¸ö¾ßÌ峡¾°ÏµÄ×î¼ÑÑ¡Ôñ¡£ÕâÕýÈçÒ»¸öÊ®ÏîÈ«ÄÜÑ¡ÊÖÔÚÿ¸öµ¥ÏîÉÏÊǺÜÄѺ͵¥Ïî¹Ú¾üÈ¥¾ºÕùµÄ¡£¸üÀíÏëµÄSOA Service×îºÃÄÜÔÚ¿ÉÒÔÖ§³ÖWebServicesµÄͬʱ£¬Ö§³Ö¶àÖÖÔ¶³Ìµ÷Ó÷½Ê½£¬ÊÊÓ¦²»Í¬³¡¾°£¬ÕâÒ²ÊÇSpring Remoting£¬SCA£¬Dubbo£¬FinagleµÈ·Ö²¼Ê½·þÎñ¿ò¼ÜµÄÉè¼ÆÔ­Ôò¡£

Ô¶³Ìµ÷Óü¼Êõ½âÊÍ£ºHTTP + JSONÊʺÏSOAÂð£¿

JSON¼òµ¥Ò×¶Á£¬Í¨ÓÃÐÔ¼«¼Ñ£¬ÉõÖÁÄܺܺÃÖ§³Öä¯ÀÀÆ÷¿Í»§¶Ë£¬Í¬Ê±Ò²³£±»ÊÖ»úAPPʹÓ㬴óÓÐÈ¡´úXMLÖ®ÊÆ¡£

µ«JSON±¾Éíȱ·¦ÏñXMLÄÇÑù±»¹ã·º½ÓÊܵıê×¼schema£¬¶øÒ»°ãµÄHTTP + JSONµÄÔ¶³Ìµ÷Ó÷½Ê½Ò²È±·¦ÏñThrift£¬CORBA£¬WebServicesµÈµÈÄÇÑù±ê×¼IDL£¨½Ó¿Ú¶¨ÒåÓïÑÔ£©£¬µ¼Ö·þÎñ¶ËºÍ¿Í»§¶ËÖ®¼ä²»ÄÜÐγÉÇ¿µÄ·þÎñÆõÔ¼£¬Ò²¾Í²»ÄÜ×ö±ÈÈç×Ô¶¯´úÂëÉú³É¡£ËùÒÔHTTP + JSONÔÚ½µµÍÁËѧϰÃż÷µÄͬʱ£¬¿ÉÄÜÏÔÖøµÄÔö¼Ó¸´ÔÓÓ¦ÓõĿª·¢¹¤×÷Á¿ºÍ³ö´í¿ÉÄÜÐÔ¡£

ÀýÈ磬ÐÂÀË΢²©ÌṩÁË»ùÓÚHTTP + JSONµÄOpen API£¬µ«ÓÉÓÚÒµÎñ²Ù×÷±È½Ï¸´ÔÓ£¬ÓÖÔÚJSONÉÏ·âװʵÏÖÁ˸÷ÖÖÓïÑԵĿͻ§¶ËÀà¿â£¬À´¼õÉÙÓû§µÄ¹¤×÷Á¿¡£

ΪÁ˽â¾öÕâ·½ÃæµÄÎÊÌ⣬ҵ½çÓкܶ಻ͬ·½°¸À´ÎªHTTP + JSON²¹³äÌí¼ÓIDL£¬ÈçRSDL¡¢JSON-WSP¡¢WADL¡¢WSDL 2.0µÈµÈ£¬µ«ÊÂʵÉÏËüÃǵĽÓÊܶȶ¼²»Ì«ÀíÏë¡£

ÁíÍâÖµµÃÒ»ÌáµÄÊÇ£¬JSON¸ñʽºÍXMLÒ»ÑùÓÐÈßÓ࣬¼´Ê¹×öGZIPѹËõÖ®ÀàµÄÓÅ»¯£¬´«ÊäЧÂÊͨ³£Ò²²»ÈçºÜ¶à¶þ½øÖƸñʽ£¬Í¬Ê±Ñ¹Ëõ¡¢½âѹ»¹»áÒýÈë¶îÍâµÄÐÔÄÜ¿ªÏú¡£

Ô¶³Ìµ÷Óü¼Êõ½âÊÍ£ºApache Thrift¶àÓïÑÔ·þÎñ¿ò¼Ü

ThriftÊÇ×î³õÀ´×ÔfacebookµÄÒ»Ì׿çÓïÑÔµÄservice¿ª·¢¿ò¼Ü£¬Ö§³ÖC++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, JavaScript, Node.js, Smalltalk, DelphiµÈ¼¸ºõËùÓÐÖ÷Á÷±à³ÌÓïÑÔ£¬¾ßÓм«ºÃµÄͨÓÃÐÔ¡£

Thrift±»facebook£¬twitterµÈ¾ÞÍ·ÒÔ¼°¿ªÔ´ÉçÇø¶¼¹ã·ºÊ¹Óã¬ÊǷdz£³ÉÊìµÄ¼¼Êõ¡£

ThriftµÄ·þÎñÆõԼͨ¹ýÀàËÆÈçÏÂÐÎʽµÄIDL¶¨Ò壺

struct User {
1: i32 id,
2: string name,
3: string password
}

service UserService {
void store(1: User user),
UserProfile retrieve(1: i32 id)
}

·Ç³£ÀàËÆÓÚCÓïÑÔ£¬Ò×¶ÁÒ×д£¬±ÈWSDL¼òµ¥Ã÷Á˵öࡣ±ÈÓÃjavaÖ®ÀàµÄ±à³ÌÓïÑÔÒ²¸ü·½±ã£¬ÓÐʱºò¿ÉÒÔ°ÑËùÓÐÏà¹ØµÄ½Ó¿ÚºÍÊý¾Ý½á¹¹¶¨Òå·Åµ½Í¬Ò»¸öÎļþ£¬·¢²¼³öÈ¥µÄʱºò²»ÓÃÔÙ´òÒ»¸öѹËõ°üÖ®À࣬ÉõÖÁ¿ÉÒÔÖ±½ÓÕ³Ìùµ½ÎĵµÖÐ

Thrift»¹Ìṩ¹¤¾ß£¬¿ÉÒÔ»ùÓÚIDL×Ô¶¯Éú³É¸÷ÖÖÓïÑÔ¶ÔÓ¦µÄ·þÎñ¶ËºÍ¿Í»§¶Ë´úÂ룺

[lishen@dangdang thrift]thrift --gen java user.thrift
[lishen@dangdang thrift]$ thrift --gen cpp user.thrift
[lishen@dangdang thrift]$ thrift --gen php user.thrift
[lishen@dangdang thrift]$ thrift --gen csharp user.thrift

ÎÒÈÏΪthriftÊDZÈWebServices¸ü¼òµ¥¸ßЧµÄ¼¼Êõ£¬ÊÇÔÚSOAÖжÔWebServices×î¾ßÓÐÌæ´úÐԵļ¼ÊõÖ®Ò»¡£

Ô¶³Ìµ÷Óü¼Êõ½âÊÍ£º¶à·¸´ÓõÄTCP³¤Á¬½Ó

ÕâÊÇÒ»ÖÖ×·Çó¼«Ö¸ßÐÔÄܸßÉìËõµÄ·½Ê½£¬ÕâÀïÖ»×ö¼òÒª½éÉÜ¡£

±È½ÏµäÐ͵ÄÊÇtwitterµÄMux RPCЭÒéÒÔ¼°googleµÄSPDYЭÒ飬ÔÚÆäÖжà¸öÇëÇóͬʱ¹²ÓÃͬһ¸ö³¤Á¬½Ó£¬¼´Ò»¸öÁ¬½Ó½»Ìæ´«Ê䲻ͬÇëÇóµÄ×Ö½Ú¿é¡£Ëü¼È±ÜÃâÁË·´¸´½¨Á¢Á¬½Ó¿ªÏú£¬Ò²±ÜÃâÁËÁ¬½ÓµÄµÈ´ýÏÐÖôӶø¼õÉÙÁËϵͳÁ¬½Ó×ÜÊý£¬Í¬Ê±»¹±ÜÃâÁËTCP˳Ðò´«ÊäÖеÄÏßÍ·×èÈû£¨head-of-line blocking£©ÎÊÌâ¡£

ÁíÍ⣬¹úÄڱȽÏÖøÃûµÄ¿ªÔ´dubbo¿ò¼ÜµÄĬÈÏRPCЭÒ飬ÒÔ¼°Òµ½çÐí¶àСÐÍ¿ªÔ´RPC¿ò¼ÜÒ²¶¼ÊÇÀàËÆµÄ˼·¡£

²ÉÓöà·¸´ÓûúÖÆºó£¬Ò»°ã¾ÍÒªÇó·þÎñÆ÷¶ËºÍ¿Í»§¶Ë¶¼Ö§³Ö¶îÍâµÄÀàËÆÓڻỰ²ã£¨¼´OSIÍøÂçÄ£Ð͵ÚÁù²ã£©µÄÓïÒ壬µ¼ÖÂËüÃDZØÐëÒªÒÀÀµÓÚͬһÌ×RPC¿ò¼Ü¡£

ÆäËûºÜ¶àRPC»úÖÆ¶¼ÊÇʹÓÃTCP¶ÌÁ¬½Ó¡£¼´Ê¹ÓÐЩRPCʹÓÃÁ˳¤Á¬½Ó£¬µ«Ò»¸öÁ¬½Óͬһʱ¼äÖ»ÄÜ·¢ËÍÒ»¸öÇëÇó£¬È»ºóÁ¬½Ó¾Í´¦ÓÚÏÐÖÃ״̬£¬À´µÈ´ý½ÓÊÕ¸ÃÇëÇóµÄÏìÓ¦£¬´ýÏìÓ¦Íê±Ï£¬¸ÃÁ¬½Ó²ÅÄܱ»ÊÍ·Å»òÕ߸´Óá£

HTTP 1.1Ò²Ö§³ÖÒ»ÖÖ»ùÓÚpipelineģʽµÄ³¤Á¬½Ó£¬ÆäÖжà¸öHTTPÇëÇóÒ²¿É¹²ÓÃÒ»¸öÁ¬½Ó£¬µ«ËüÒªÇóÏìÓ¦£¨response£©Ò²±ØÐë°´ÕÕÇëÇó£¨request£©µÄ˳Ðò´«Êä·µ»Ø£¬¼´FIFOÏȽøÏȳö¡£¶øÔÚÍêÈ«¶à·¸´ÓõÄÁ¬½ÓÖУ¬ÄĸöµÄÏìÓ¦ÏÈready¾Í¿ÉÒÔÏÈ´«ÊäÄĸö£¬²»ÓÃÅŶӡ£

µ±È»£¬¶ÌÁ¬½Ó¡¢³¤Á¬½ÓºÍ¶à·¸´Óó¤Á¬½ÓÖ®¼ä²»´æÔÚ¾ø¶ÔµÄºÃ»µ£¬ÐèҪȡ¾öÓÚ¾ßÌåÒµÎñºÍ¼¼Êõ³¡¾°£¬Ôڴ˲»Ïêϸչ¿ªÁË¡£

Ô¶³Ìµ÷Óü¼Êõ½âÊÍ£ºJava¸ßЧÐòÁл¯

×î½ü¼¸Ä꣬¸÷ÖÖеÄJava¸ßЧÐòÁл¯·½Ê½²ã³ö²»Ç²»¶ÏË¢ÐÂÐòÁл¯ÐÔÄܵÄÉÏÏÞ£¬ÀýÈçKryo£¬FSTµÈ¿ªÔ´¿ò¼Ü¡£ËüÃÇÌṩÁ˷dz£¸ßЧµÄJava¶ÔÏóµÄÐòÁл¯ºÍ·´ÐòÁл¯ÊµÏÖ£¬Ïà±ÈJDK±ê×¼µÄÐòÁл¯·½Ê½£¨¼´»ùÓÚSerializable½Ó¿ÚµÄ±ê×¼ÐòÁл¯£¬Ôݲ»¿¼ÂÇÓÃÖîÈçExternalizable½Ó¿ÚµÄ¶¨ÖÆÐòÁл¯£©£¬ÔÚµäÐͳ¡¾°ÖУ¬ÆäÐòÁл¯Ê±¼ä¿ªÏú¿ÉÄÜËõ¶Ì20±¶ÒÔÉÏ£¬Éú³É¶þ½øÖÆ×Ö½ÚÂëµÄ´óС¿ÉÄÜËõ¼õ4±¶ÒÔÉÏ¡£

ÁíÍ⣬ÕâЩ¸ßЧJavaÐòÁл¯·½Ê½µÄ¿ªÏúÒ²ÏÔÖøÉÙÓÚ¿çÓïÑÔµÄÐòÁл¯·½Ê½ÈçthriftµÄ¶þ½øÖÆÐòÁл¯£¬»òÕßJSONµÈµÈ

Ô¶³Ìµ÷Óü¼Êõ½âÊÍ£ºRMI/IIOPºÍ·Ö²¼Ê½ÊÂÎñ

RMI/IIOPÊÇJava EEÖбê×¼µÄÔ¶³Ìµ÷Ó÷½Ê½£¬IIOPÊÇCORBAµÄЭÒ飬ֻÓÐIIOPÉϵÄRMI²ÅÖ§³ÖÁ½½×¶ÎÌá½»µÄ·Ö²¼Ê½ÊÂÎñ£¬Í¬Ê±ÌṩºÍCORBAµÄ»¥²Ù×÷¡£

µ±È»£¬ÑϸñµÄÁ½½×¶ÎÌá½»ÊÂÎñ²¢²»¸ßЧ£¬»¹¿ÉÄÜÑÏÖØÓ°ÏìϵͳÉìËõÐÔÉõÖÁ¿ÉÓÃÐԵȵȣ¬Ò»°ãÖ»Ó¦ÓÃÔڷdz£¹Ø¼üµÄÒµÎñÖС£

Ô¶³Ìµ÷Óü¼Êõ½âÊÍ£ºGoogle ProtocolBuffer¿çÓïÑÔÐòÁл¯

ProtocolBufferÊÇgoogle¿ª·¢µÄ¿çÓïÑԵĸßЧ¶þ½øÖÆÐòÁл¯·½Ê½£¬ÆäÐòÁл¯ÐÔÄܺÍthrift±È½ÏÀàËÆ¡£ÊÂʵÉÏthrift×î³õ¾ÍÊÇProtocolBufferµÄ·ÂÖÆÆ·¡£µ«ËüºÍthrift×î´óµÄ²»Í¬ÊÇËûûÓÐ×Ô´øµÄRPCʵÏÖ£¨ÒòΪgoogleûÓн«RPC²¿·Ö¿ªÔ´£¬µ«ÓдóÁ¿µÚÈý·½ÊµÏÖ£©¡£

ÓÉÓÚ²»ºÍRPC·½Ê½ñîºÏ£¬·´¶øÊ¹µÃProtocolBufferÄܱ»·½±ãµÄ¼¯³É½ø´óÁ¿ÒÑÓеÄϵͳºÍ¿ò¼ÜÖС£ÔÚ¹úÄÚËüÒ²±»°Ù¶È¡¢ÌÔ±¦µÈ¹ã·ºµÄÓ¦ÓÃÔÚOpen APIÖУ¬ºÍHTTP´îÅä×÷ΪһÖÖ¸ßЧµÄ¿çƽ̨¿ç×éÖ¯µÄ¼¯³É·½Ê½¡£

·þÎñÉè¼ÆÔ­Ôò2£ºÏû³ýÈßÓàÊý¾Ý

ͬÑùÓÉÓÚserviceµÄÔ¶³Ìµ÷ÓÿªÏúºÜ¸ß£¬ËùÒÔÔÚËüµÄÊäÈë²ÎÊýºÍ·µ»Ø½á¹ûÖУ¬»¹Òª¾¡Á¿±ÜÃâЯ´øµ±Ç°ÒµÎñÓÃÀý²»ÐèÒªµÄÈßÓàµÄ×ֶΣ¬À´¼õÉÙÐòÁл¯ºÍ´«ÊäµÄ¿ªÏú¡£Í¬Ê±£¬È¥µôÈßÓà×Ö¶ÎÒ²¿ÉÒÔ¼ò»¯½Ó¿Ú£¬±ÜÃâ¸øÍⲿÓû§´øÀ´²»±ØÒªµÄÒµÎñÀ§»ó¡£

±ÈÈçarticle serviceÖÐÓиö·µ»Øarticle listµÄ·½·¨

List<Article> getArticles(...)

Èç¹ûÒµÎñÐèÇó½ö½öÊÇÒªÁгöÎÄÕµıêÌ⣬ÄÇôÔÚ·µ»ØµÄarticleÖоÍÒª±ÜÃâЯ´øËüµÄcontentsµÈµÈ×ֶΡ£

ÕâÀï¾­µä½â¾ö·½°¸¾ÍÊÇÒýÈëOOÖг£ÓõÄData Transfer Object (DTO)ģʽ£¬×¨ÃÅÕë¶ÔÌØ¶¨serviceµÄÓÃÀýÀ´¶¨ÖÆÒª´«ÊäµÄÊý¾Ý×ֶΡ£ÕâÀï¾ÍÊÇÌí¼ÓÒ»¸öAriticleSummaryµÄ¶îÍâÊý¾Ý´«Êä¶ÔÏó£º

List<ArticleSummary> getArticleSummaries(...)

¶îÍâµÄDTOȷʵÊǸöÂé·³£¬¶øÒ»°ãOO³ÌÐòͨ³£Ôò¿ÉÖ±½Ó·µ»Ø×Ô¼ºµÄ°üº¬ÈßÓàµÄÒµÎñÄ£ÐÍ¡£

·þÎñÉè¼ÆÔ­Ôò3£º´ÖÁ£¶ÈÆõÔ¼

ͬÑùÓÉÓÚÔ¶³Ìµ÷ÓÿªÏú¸ß£¬Í¬Ê±serviceµÄÍⲿʹÓÃÕß¶ÔÌØ¶¨ÒµÎñÁ÷³ÌµÄÁ˽âÒ²±È²»ÉÏ×éÖ¯ÄÚ²¿µÄÈË£¬ËùÒÔserviceµÄÆõÔ¼£¨½Ó¿Ú£©Í¨³£ÐèÒªÊÇ´ÖÁ£¶ÈµÄ£¬ÆäÖеÄÒ»¸ö²Ù×÷¾Í¿ÉÄܶÔÓ¦µ½Ò»¸öÍêÕûµÄÒµÎñÓÃÀý»òÕßÒµÎñÁ÷³Ì£¬ÕâÑù¼ÈÄܼõÉÙÔ¶³Ìµ÷ÓôÎÊý£¬Í¬Ê±ÓÖ½µµÍѧϰ³É±¾ºÍñîºÏ¶È¡£

¶øOO½Ó¿Úͨ³£¿ÉÒÔÊǷdz£Ï¸Á£¶ÈµÄ£¬Ìṩ×îºÃµÄÁé»îÐÔºÍÖØÓÃÐÔ¡£

ÀýÈ磬article serviceÖ§³ÖÅúÁ¿É¾³ýÎÄÕ£¬OO½Ó¿ÚÖпÉÒÔÌṩ

deleteArticle(long id)

¹©Óû§×Ô¼º×öÑ­»·µ÷Óã¨Ôݲ»¿¼ÂǺó¶ËSQLÖ®ÀàÓÅ»¯£©£¬µ«SO½Ó¿ÚÖУ¬Ôò×îºÃÌṩ

deleteArticles(Set<Long> ids)

¹©¿Í»§¶Ëµ÷Ó㬽«¿ÉÄܵÄN´ÎÔ¶³Ìµ÷ÓüõÉÙΪһ´Î¡£

ÀýÈ磬϶©µ¥µÄÓÃÀý£¬ÒªÓÐһϵÁвÙ×÷

addItem -> addTax -> calculateTotalPrice -> placeOrder

OOÖÐÎÒÃÇÍêÈ«¿ÉÒÔÈÃÓû§×Ô¼ºÀ´Áé»îÑ¡Ôñ£¬·Ö±ðµ÷ÓÃÕâЩϸÁ£¶ÈµÄ¿É¸´Óõķ½·¨¡£µ«ÔÚSOÖУ¬ÎÒÃÇÐèÒª½«ËûÃÇ·â×°µ½Ò»¸ö´ÖÁ£¶ÈµÄ·½·¨¹©Óû§×öÒ»´ÎÐÔÔ¶³Ìµ÷Óã¬Í¬Ê±Ò²Òþ²ØÁËÄÚ²¿ÒµÎñµÄºÜ¶à¸´ÔÓÐÔ¡£ÁíÍ⣬¿Í»§¶ËÒ²´ÓÒÀÀµ4¸ö·½·¨±ä³ÉÁËÒÀÀµ1¸ö·½·¨£¬´Ó¶ø´ó´ó½µµÍÁ˳ÌÐòñîºÏ¶È¡£

˳±ãÖµµÃÒ»ÌáµÄÊÇ£¬Èç¹ûÉÏÃæ¶©µ¥ÓÃÀýÖÐÿ¸ö²Ù×÷±¾ÉíÒ²ÊÇÔ¶³ÌµÄservice£¨Í¨³£ÔÚÄÚÍøÖ®ÖУ©£¬ÕâÖÖ´ÖÁ£¶È·â×°¾Í±ä³ÉÁ˾­µäµÄservice composition£¨·þÎñ×éºÏ£©ÉõÖÁservice orchestration£¨·þÎñ±àÅÅ£©ÁË¡£ÕâÖÖÇé¿öÏ´ÖÁ£¶ÈserviceͬÑù¿ÉÄÜÌá¸ßÁËÐÔÄÜ£¬ÒòΪ¶ÔÍâÍø¿Í»§À´Ëµ£¬¶à´Î¿çÍøµÄÔ¶³Ìµ÷Óñä³ÉÁËÒ»´Î¿çÍøµ÷Óà + ¶à´ÎÄÚÍøµ÷Óá£

¶ÔÕâÖÖ´ÖÁ£¶Èservice·â×°ºÍ×éºÏ£¬¾­µä½â¾ö·½°¸¾ÍÊÇÒýÈëOOÖг£ÓõÄFacadeģʽ£¬½«Ô­À´µÄ¶ÔÏóÆÁ±Îµ½×¨Ãŵġ°Íâ¹Û¡±½Ó¿ÚÖ®ºó¡£Í¬Ê±£¬ÕâÀïÒ²ºÜ¿ÉÄÜÒªÇóÎÒÃÇÒýÈëеÄservice²ÎÊý/·µ»ØÖµµÄÊý¾Ý½á¹¹À´×éºÏÔ­À´¶à¸ö²Ù×÷µÄ¶ÔÏóÄ£ÐÍ£¬Õâ¾ÍͬÑùÓõ½Ç°ÊöµÄDTOģʽ¡£

Ò»¸ö¼òµ¥FacadeʾÀý£¨FooServiceºÍBarServiceÊÇÁ½¸ö¼ÙÏëµÄ±¾µØOO service£¬fa?ade½«ËüÃǵĽá¹ûÖµ×éºÏ·µ»Ø£©£º

class FooBarFacadeImpl implements FooBarFacade {
private FooService fooService;
private BarService barService;

public FooBarDto getFooBar() {
FooBarDto fb = new FooBarDto();
fb.setFoo(fooService.getFoo());
fb.setBar(barService.getBar());
return fb;
}
}

µ±È»£¬ÓеÄʱºòÒ²¿ÉÒÔ²»ÓÃfacadeºÍDTO£¬¶øÔÚÊÇFooServiceºÍBarServiceÖ®ÍâÌí¼ÓÁíÒ»¸ö±¾µØserviceºÍdomain model£¬ÕâÒªºÍ¾ßÌåÒµÎñ³¡¾°Óйء£

·þÎñÉè¼ÆÔ­Ôò4£ºÍ¨ÓÃÆõÔ¼

ÓÉÓÚservice²»¼ÙÉèÓû§µÄ·¶Î§£¬ËùÒÔÒ»°ãÒªÖ§³Ö²»Í¬ÓïÑÔºÍÆ½Ì¨µÄ¿Í»§¶Ë¡£µ«¸÷ÖÖÓïÑÔºÍÆ½Ì¨ÔÚ¹¦ÄܷḻÐÔÉÏÓкܴó²îÒ죬Õâ¾Í¾ö¶¨ÁË·þÎñÆõÔ¼±ØÐëÈ¡³£¼ûÓïÑÔ¡¢Æ½Ì¨ÒÔ¼°ÐòÁл¯·½Ê½µÄ×î´ó¹«Ô¼Êý£¬²ÅÄܱ£Ö¤service¹ã·º¼æÈÝÐÔ¡£ÓÉ´Ë£¬·þÎñÆõÔ¼Öв»ÄÜÓÐijЩÓïÑԲž߱¸µÄ¸ß¼¶ÌØÐÔ£¬²ÎÊýºÍ·µ»ØÖµÒ²±ØÐëÊDZ»¹ã·ºÖ§³ÖµÄ½Ï¼òµ¥µÄÊý¾ÝÀàÐÍ£¨±ÈÈç²»ÄÜÓжÔÏóÑ­»·ÒýÓã©¡£

Èç¹ûÔ­ÓеÄOO½Ó¿Ú²»ÄÜÂú×ãÒÔÉÏÒªÇó£¬ÔòÔÚ´ËÎÒÃÇͬÑùÐèÒªÉÏÊöµÄFacadeºÍDTO£¬½«OO½Ó¿Úת»»ÎªÍ¨ÓõÄSOÆõÔ¼¡£

ÀýÈçÔ­ÓжÔÏóÄ£ÐÍ

class Foo {
private Pattern regex;
}

PatternÊÇJavaÌØÓеÄÔ¤±àÒëºÃµÄ£¬¿ÉÐòÁл¯µÄÕýÔò±í´ïʽ£¨¿ÉÌá¸ßÐÔÄÜ£©£¬µ«ÔÚûÓÐÌØ¶¨¿ò¼ÜÖ§³ÖÏ£¬¿ÉÄܲ»ºÃÖ±½Ó±»ÆäËûÓïÑÔʶ±ð£¬ËùÒÔ¿ÉÌí¼ÓDTO£º

class FooDto {
private String regex;
}

·þÎñÉè¼ÆÔ­Ôò5£º¸ôÀë±ä»¯

ËäÈ»OOºÍSO¶¼×·ÇóµÍñîºÏ£¬µ«SOÓÉÓÚʹÓÃÕß·¶Î§¼«¹ã£¬¾ÍÒªÇóÁ˸ü¸ß³Ì¶ÈµÄµÍñîºÏÐÔ¡£

±ÈÈçǰÊöµÄarticle service£¬OOÖпÉÒÔÖ±½Ó·µ»Øarticle¶ÔÏ󣬶øÕâ¸öarticle¶ÔÏóÔÚOO³ÌÐòÄÚ²¿¿ÉÄÜ×öΪºËÐĵĽ¨Ä£µÄdomain model£¬ÉõÖÁ×÷ΪO/R mappingµÈµÈ¡£¶øÔÚSOÈç¹û»¹Ö±½Ó·µ»ØÕâ¸öarticle£¬¼´Ê¹Ã»ÓÐÇ°ÃæËù˵µÄÈßÓà×ֶΣ¬¸´ÔÓÀàÐ͵ÈÎÊÌ⣬Ҳ¿ÉÄÜÈÃÍⲿÓû§ÓëÄÚ²¿ÏµÍ³µÄºËÐĶÔÏóÄ£ÐÍ£¬ÉõÖÁO/R mapping»úÖÆ£¬Êý¾Ý±í½á¹¹µÈµÈ²úÉúÁËÒ»¶¨¹ØÁª¶È£¬ÕâÑùÒ»À´£¬ÄÚ²¿µÄÖØ¹¹¾­³£¶¼»á¿ÉÄÜÓ°Ïìµ½ÍⲿµÄÓû§¡£

ËùÒÔ£¬ÕâÀïÔٴζÔFacadeºÍDTO²úÉúÁËÐèÇó£¬ÓÃËüÃÇ×÷ΪÖнéÕߺͻº³å´ø£¬¸ôÀëÄÚÍâϵͳ£¬°ÑÄÚ²¿ÏµÍ³±ä»¯¶ÔÍⲿµÄ³å»÷¼õÉÙµ½×îС³Ì¶È¡£

·þÎñÉè¼ÆÔ­Ôò6£ºÆõÔ¼ÏÈÐÐ

ServiceÊÇÍùÍùÉæ¼°²»Í¬×éÖ¯Ö®¼äµÄºÏ×÷£¬¶ø°´ÕÕÕý³£Âß¼­£¬Á½¸ö×éÖ¯Ö®¼äºÏ×÷µÄÊ×ÒªÈÎÎñ£¬¾ÍÊÇÏÈÇ©¶©Ã÷È·µÄÆõÔ¼£¬Ïêϸ¹æ¶¨Ë«·½ºÏ×÷µÄÄÚÈÝ£¬ºÏ×÷µÄÐÎʽµÈµÈ£¬ÕâÑù²ÅÄܶÔË«·½ÐγÉÇ¿ÓÐÁ¦µÄÔ¼ÊøºÍ±£ÕÏ£¬Í¬Ê±´ó¼ÒµÄ¹¤×÷Ò²Äܹ»²¢Ðв»ã££¬²»ÓÃÏ໥µÈ´ý¡£Òò´ËSOAÖУ¬×î¼ÑµÄʵ¼ù·½Ê½Ò²ÊÇÆõÔ¼ÏÈÐУ¬¼´ÏÈ×öÆõÔ¼µÄÉè¼Æ£¬¿ÉÒÔÓÐÉÌÎñ£¬¹ÜÀíºÍ¼¼ÊõµÈ²»Í¬·½ÃæµÄÈËÔ±¹²Í¬²ÎÓ룬²¢¶¨Òå³öÏàÓ¦µÄWSDL»òÕßIDL£¬È»ºóÔÚ¿ª·¢µÄʱºòÔÙͨ¹ý¹¤¾ß×Ô¶¯Éú³ÉÄ¿±êÓïÑԵĶÔÓ¦´úÂë¡£

¶ÔÓÚWSDLÀ´Ëµ£¬×öÆõÔ¼ÏÈÐеÄÃż÷ÂԸߣ¬Èç¹ûûÓкõÄXML¹¤¾ßºÜÄÑÊÖ¹¤±àÖÆ¡£µ«¶ÔÓÚThrift IDL»òÕßProtocolBufferµÈÀ´Ëµ£¬ÓÉÓÚËüÃÇºÍÆÕͨ±à³ÌÓïÑÔÀàËÆ£¬ËùÒÔÆõÔ¼Éè¼ÆÏà¶ÔÊDZȽÏÈÝÒ׵ġ£ÁíÍ⣬¶ÔÓÚ¼òµ¥µÄHTTP + JSONÀ´Ëµ£¨¼ÙÉè²»²¹³äʹÓÃÆäËûÃèÊöÓïÑÔ£©£¬ÓÉÓÚJSONûÓбê×¼µÄschema£¬ËùÒÔÊÇû·¨Éè¼Æ¾ßÓÐÇ¿Ô¼ÊøÁ¦µÄÆõÔ¼µÄ£¬Ö»ÄÜÓÃÁíÍâµÄÎĵµ×öÃèÊö»òÕßÓÃJSON×öÊäÈëÊä³öµÄ¾ÙÀý¡£

µ«ÊÇ£¬ÆõÔ¼ÏÈÐУ¬È»ºóÔÙÉú³É·þÎñÌṩ¶ËµÄ´úÂ룬±Ï¾¹¸øservice¿ª·¢¹¤×÷´øÀ´Á˽ϴóµÄ²»±ã£¬ÌرðÊÇÐÞ¸ÄÆõÔ¼µÄʱºòµ¼Ö´úÂëÐèÒªÖØÐ´¡£Òò´Ë£¬ÕâÀïͬÑù¿ÉÄÜÐèÒªÒýÈëFacadeºÍDTO£¬¼´ÓÃÆõÔ¼²úÉúµÄ¶¼ÊÇFacadeºÍDTO´úÂ룬ËüÃǸºÔð½«ÇëÇóÊÊÅäºÍת·¢µ½ÆäËûÄÚ²¿³ÌÐò£¬¶øÄÚ²¿³ÌÐòÔò¿ÉÒÔ±£³Ö×Ô¼ºµÄÖ÷µ¼ÐÔºÍÎȶ¨ÐÔ¡£

ÁíÍ⣬ÆõÔ¼ÏÈÐпÉÄÜ»á¸øÇ°ÃæÌáµ½µÄ¶àÔ¶³Ìµ÷ÓÃÖ§³Ö´øÀ´Ò»Ð©Âé·³¡£

µ±È»ÆõÔ¼ÏÈÐÐÒ²Ðí²¢²»ÊÇÄܱ»¹ã·º½ÓÊܵÄʵ¼ù·½Ê½£¬¾ÍÏñÃô½Ý¿ª·¢ÖС°²âÊÔÏÈÐС±£¨Ò²¾ÍÊDzâÊÔÇý¶¯¿ª·¢£©Í¨³£¶¼ÊÇ×î¼Ñʵ¼ù£¬µ«ÕæÕýÊ©ÐеÄÍŶÓÈ´·Ç³£Ö®ÉÙ£¬Õâ·½Ãæ»¹ÐèÒª²»¶ÏÃþË÷ºÍ×ܽᡣµ«ÎÒÃÇÖÁÉÙ¿ÉÒÔÈÏΪEchoÖÐJava2WSDL²¢²»±»ÈÏΪÊÇSOAµÄ×î¼Ñʵ¼ù¡£

·þÎñÉè¼ÆÔ­Ôò7£ºÎȶ¨ºÍ¼æÈÝµÄÆõÔ¼

ÓÉÓÚÓû§·¶Î§µÄ¹ã·ºÐÔ£¬ËùÒÔSOµÄ·þÎñÆõÔ¼ºÍJava±ê×¼APIÀàËÆ£¬ÔÚ¹«¿ª·¢²¼Ö®ºó¾ÍÒª±£Ö¤Ï൱µÄÎȶ¨ÐÔ£¬²»ÄÜËæ±ã±»Öع¹£¬¼´Ê¹Éý¼¶Ò²Òª¿¼ÂǾ¡¿ÉÄܵÄÏòϼæÈÝÐÔ¡£Í¬Ê±£¬Èç¹ûÓÃÆõÔ¼ÏÈÐеķ½Ê½£¬ÒÔºóÆµ·±¸ü¸ÄÆõÔ¼Ò²µ¼Ö¿ª·¢ÈËÔ±Òª²»¶ÏÖØ×öÆõÔ¼µ½Ä¿±êÓïÑÔÓ³É䣬·Ç³£Âé·³¡£

Õâ¾ÍÊÇ˵SO¶ÔÆõÔ¼µÄÖÊÁ¿ÒªÇó¿ÉÄÜ´ó´ó¸ßÓÚÒ»°ãµÄOO½Ó¿Ú£¬ÀíÏëµÄÇé¿öÏ£¬ÉõÖÁ¿ÉÄÜÐèҪרÈË£¨°üÀ¨ÉÌÎñÈËÔ±£©À´Éè¼ÆºÍÆÀ¹ÀSOÆõÔ¼£¨²»¹ÜÊÇ·ñÓÃÆõÔ¼ÏÈÐеķ½Ê½£©£¬¶ø°ÑÄÚ²¿µÄ³ÌÐòʵÏÖ½»¸ø²»Í¬µÄÈË£¬¶øÁ½ÕßÓÃFacadeºÍDTO×öÇÅÁº¡£

·þÎñÉè¼ÆÔ­Ôò8£ºÆõÔ¼°ü×°

ǰÊöÔ­Ôò»ù±¾¶¼ÊÇÕë¶ÔserviceÌṩ¶ËÀ´½²µÄ£¬¶ø¶ÔserviceÏû·Ñ¶Ë¶øÑÔ£¬Í¨¹ýÆõÔ¼Éú³É¶ÔÓ¦µÄ¿Í»§¶Ë´úÂ룬¾­³£¾Í¿ÉÒÔÖ±½ÓʹÓÃÁË¡£µ±È»£¬Èç¹ûÆõÔ¼±¾Éí¾ÍÊÇJava½Ó¿ÚÖ®Àࣨ±ÈÈçÔÚDubbo£¬Spring RemotingµÈ¿ò¼ÜÖУ©£¬¿ÉÒÔÂÔ¹ý´úÂëÉú³ÉµÄ²½Öè¡£

µ«ÊÇ£¬serviceµÄ·µ»ØÖµ£¨DTO£©ºÍservice½Ó¿Ú£¨Facade£©£¬¿ÉÄܱ»Ïû·Ñ¶ËµÄ³ÌÐòµ½´¦ÒýÓõ½¡£

ÕâÑùÏû·Ñ¶Ë³ÌÐò¾Í½ÏÇ¿µÄñîºÏÔÚ·þÎñÆõÔ¼ÉÏÁË£¬Èç¹û·þÎñÆõÔ¼²»ÊÇÏû·Ñ¶Ë¶¨ÒåµÄ£¬Ïû·Ñ¶Ë¾ÍµÈÓÚ°Ñ×Ô¼º³ÌÐòµÄ²¿·ÖÖ÷µ¼È¨ÍêÈ«ÈöɸøÁ˱ðÈË¡£

Ò»µ©ÆõÔ¼×ö¸ü¸Ä£¬»òÕßÏû·Ñ¶ËҪѡÔñÍêÈ«²»Í¬µÄserviceÌṩ·½£¨Óв»Í¬µÄÆõÔ¼£©£¬ÉõÖÁ¸ÄÓɱ¾µØ³ÌÐò×Ô¼ºÀ´ÊµÏÖÏà¹Ø¹¦ÄÜ£¬Ð޸Ť×÷Á¿¾Í¿ÉÄܷdz£´óÁË¡£

ÁíÍ⣬ͨ¹ýÆõÔ¼Éú³ÉµÄ¿Í»§¶Ë´úÂ룬¾­³£ºÍÌØ¶¨´«Ê䷽ʽÊÇÏà¹ØµÄ£¨±ÈÈçwebservices stub£©£¬ÕâÑù¸øÇл»Ô¶³Ìµ÷Ó÷½Ê½Ò²»á´øÀ´Õϰ­¡£

Òò´Ë£¬¾ÍÏñÔÚͨ³£Ó¦ÓÃÖУ¬ÎÒÃÇÒª°ü×°Êý¾Ý·ÃÎÊÂß¼­£¨OOÖеÄDAO»òÕßRepositoryģʽ£©£¬»òÕß°ü×°»ù´¡·þÎñ·ÃÎÊÂß¼­£¨OOÖеÄGatewayģʽ£©Ò»Ñù£¬ÔÚ½ÏÀíÏëµÄSOAÉè¼ÆÖУ¬ÎÒÃÇÒ²¿ÉÒÔ¿¼Âǰü×°Ô¶³Ìservice·ÃÎÊÂß¼­£¬ÓÉÓÚûÓÐÇ¡µ±µÄÃû³Æ£¬ÔÝʱ³ÆÖ®ÎªDelegate Serviceģʽ£¬ËüÓÉÏû·Ñ¶Ë×Ô¼ºÖ÷µ¼¶¨Òå½Ó¿ÚºÍ²ÎÊýÀàÐÍ£¬²¢½«µ÷ÓÃת·¢¸øÕæÕýµÄservice¿Í»§¶ËÉú³É´úÂ룬´Ó¶ø¶ÔËüµÄʹÓÃÕßÍêÈ«ÆÁ±ÎÁË·þÎñÆõÔ¼£¬ÕâЩʹÓÃÕßÉõÖÁ²»ÖªµÀÕâ¸ö·þÎñµ½µ×ÊÇÔ¶³ÌÌṩµÄµÄ»¹ÊDZ¾µØÌṩµÄ¡£

´ËÍ⣬¼´Ê¹ÎÒÃÇÔÚÏû·Ñ¶ËÊDzÉÓÃijЩÊÖ¹¤µ÷ÓûúÖÆ£¨ÈçÖ±½Ó¹¹½¨ºÍ½âÎöjsonµÈÄÚÈÝ£¬Ö±½ÓÊÕ·¢JMSÏûÏ¢µÈµÈ£©£¬ÎÒÃÇͬÑù¿ÉÒÔÓÃdelegate serviceÀ´°ü×°ÏàÓ¦µÄÂß¼­¡£

delegate serviceʾÀý1£º

// ArticlesServiceÊÇÏû·Ñ¶Ë×Ô¶¨ÒåµÄ½Ó¿Ú
class ArticleServiceDelegate implements ArticlesService {
// ¼ÙÉèÊÇijÖÖ×Ô¶¯Éú³ÉµÄservice¿Í»§¶ËstubÀà
private ArticleFacadeStub stub;

public void deleteArticles(List<Long> ids) {
stub.deleteArticles(ids);
}
}

delegate serviceʾÀý2£º

// ArticlesServiceÊÇÏû·Ñ¶Ë×Ô¶¨ÒåµÄ½Ó¿Ú
class ArticleServiceDelegate implements ArticlesService {

public void deleteArticles(List<Long> ids) {
// ÓÃJMSºÍFastJsonÊÖ¹¤µ÷ÓÃÔ¶³Ìservice
messageClient.sendMessage(queue, JSON.toJSONString(ids));
}
}

´ÓÃæÏò¶ÔÏóµ½ÃæÏò·þÎñ£¬ÔÙ´ÓÃæÏò·þÎñµ½ÃæÏò¶ÔÏó

×ܽáÉÏÃæµÄ¼¸¸öÔ­Ôò£¬ËäȻֻÊÇ̸¼°ÓÐÏ޵ö·½Ã棬µ«´óÖÂÒ²¿É¿´³öOOºÍSOÔÚʵ¼ÊµÄÉè¼Æ¿ª·¢Öл¹ÊÇÓв»ÉÙÏÔÖøµÄ²»Í¬Ö®´¦£¬¶øÇÒÎÒÃÇûÓдòËãÓÃSOµÄÔ­ÔòÀ´È¡´ú¹ýÈ¥µÄOOÉè¼Æ£¬¶øÊÇÒýÈë¶îÍâµÄ²ã´Î¡¢¶ÔÏóºÍOOÉè¼ÆÄ£Ê½£¬À´²¹³ä´«Í³µÄOOÉè¼Æ¡£

Æäʵ¾ÍÊÇÐγÉÁËÕâÖÖµ÷ÓÃÁ÷³Ì£º

serviceÌṩ¶Ë£ºOO³ÌÐò <- SOA²ã£¨FacadeºÍDTO£©<- Ô¶³ÌÏû·Ñ¶Ë

serviceÏû·Ñ¶Ë£ºOO³ÌÐò -> Delegate Service -> SOA²ã£¨FacadeºÍDTO »òÕß ÆäËû¶¯Ì¬µ÷ÓûúÖÆ£©-> Ô¶³ÌÌṩ¶Ë

Facade¡¢DTOºÍDelegate Service¸ºÔð×öOOµ½SOºÍSOµ½OOµÄÖмäת»»¡£

ÏÖÔÚ£¬¿ÉÒԻشðEchoʾÀýÖеÄÎÊÌ⣺ͨ¹ý¡°Í¸Ã÷µÄ¡±ÅäÖ÷½Ê½£¬½«OO³ÌÐò·¢²¼ÎªÔ¶³ÌService£¬ËäÈ»¿ÉÄܽϺõÄÍê³ÉÁË´Ó±¾µØ¶ÔÏóµ½Ô¶³Ì¶ÔÏóµÄ¿çÔ½£¬µ«Í¨³£²¢²»ÄܽϺõÄÍê³ÉOOµ½SOµÄÕæÕý¿çÔ½¡£

ͬʱ£¬Í¸Ã÷ÅäÖ÷½Ê½Ò²Í¨³£ÎÞ·¨Ö±½Ó°ïÖúÒÅÁôÓ¦Óã¨ÈçERPµÈ£©×ªÏòSOA¡£

µ±È»£¬ÔÚ½ÏΪ¼òµ¥ºÍʹÓ÷¶Î§È·¶¨ºÜÓÐÏÞÓ¦Ó㨱ÈÈ紫ͳºÍ¾Ö²¿µÄRPC£©ÖУ¬Í¸Ã÷ʽԶ³Ìservice·¢²¼»á´øÀ´¼«´óµÄ±ãÀû¡£

ÁíÍ⣬ÉÏÃæ¶ÔSOµÄËùÓÐÌÖÂÛ¶¼¼¯ÖÐÔÚRPCµÄ·½Ê½£¬ÆäʵSOÖÐÒ²ÓÃmessageµÄ·½Ê½×ö¼¯³É£¬ËüÒ²ÊǸö´ó»°Ì⣬ÔÝʱ²»ÔÚ´ËÏêÂÛÁË¡£

Ϊʲô²»ÄÜ·ÅÆúÃæÏò¶ÔÏó£¿

SOÊÇÓÐËüµÄÌØ¶¨³¡¾°µÄ£¬±ÈÈçÔ¶³ÌµÄ£¬·¶Î§²»¶¨µÄ¿Í»§¶Ë¡£ËùÒÔËüµÄÄÇЩÉè¼ÆÔ­Ôò²¢²»Äܱ»½èÓÃÀ´Ö¸µ¼Ò»°ãÐԵijÌÐò¿ª·¢£¬±ÈÈçºÜ¶àOO³ÌÐòºÍSOÔ­ÔòÍêÈ«Ïà·´£¬¾­³£¶¼ÒªÌṩϸÁ£¶È½Ó¿ÚºÍ¸´ÔÓ²ÎÊýÀàÐÍÒÔ×·ÇóʹÓõÄʹÓÃÁé»îÐԺ͹¦ÄܵÄÇ¿´óÐÔ¡£

¾Í¾ßÌå¼Ü¹¹¶øÑÔ£¬ÎÒÈÏΪSOA²ãÓ¦¸ÃÊÇÒ»¸öºÜ±¡µÄ²ã´Î£¨thin layer£©£¬½«OOÓ¦ÓûòÕ߯äËûÒÅÁôÐÔÓ¦ÓüÓÒÔ°ü×°ºÍÊÊÅäÒÔ°ïÖúËüÃÇÃæÏò·þÎñ¡£ÆäʵÔÚͨ³£µÄweb¿ª·¢ÖУ¬ÎÒÃÇÒ²ÊÇÓÃÒ»¸ö±¡µÄÕ¹Ïֲ㣨»òÕß½ÐWeb UI²ãÖ®ÀࣩÀ´°ü×°OOÓ¦Óã¬ÒÔ°ïÖúËüÃÇÃæÏòä¯ÀÀÆ÷Óû§¡£Òò´Ë£¬Fa?ade¡¢DTOµÈ²»»áÈ¡´úOOÓ¦ÓÃÖкËÐĵÄDomain Model¡¢ServiceµÈµÈ £¨ÕâÀïµÄserviceÊÇOOÖÐservice£¬Î´±ØÊÇSOµÄ£©¡£

×ÛºÏÆðÀ´£¬ÐγÉÀàËÆÏÂÃæµÄÌåϵ½á¹¹£º

ÀíÏëºÍÏÖʵ

ÐèÒªÌØ±ðÖ¸³öµÄÊÇ£¬ÉÏÃæÌáµ½µÄÖî¶àSOÉè¼ÆÔ­ÔòÊÇÔÚ×·ÇóÒ»ÖÖÏà¶ÔÀíÏ뻯µÄÉè¼Æ£¬ÒÔ´ïµ½¼Ü¹¹µÄÓÅÑÅÐÔ£¬¸ßЧÐÔ£¬¿ÉÖØÓÃÐÔ£¬¿Éά»¤ÐÔ£¬¿ÉÀ©Õ¹ÐԵȵȡ£

¶øÔÚÏÖʵÖÐÈκÎÀíÂÛºÍÔ­Ôò¶¼¿ÉÄÜÊÇÐèÒª×÷³öÊʵ±Í×ЭµÄ£¬ÒòΪÏÖʵÊÇǧ²îÍò±ðµÄ£¬ÆäÇé¿öÔ¶±ÈÀíÂÛ¸´ÔÓ£¬ºÜÄÑ´æÔÚ·ÅÖ®Ëĺ£¶ø½Ô×¼µÄÕæÀí¡£

¶øÇÒºÜ¶à·½ÃæËÆºõ±¾À´Ò²Ã»ÓбØÒª×·ÇóÍêÃÀºÍ¼«Ö£¬±ÈÈçÈç¹ûÓÐ×ã¹»ÄÜÁ¦À©³äÓ²¼þ»ù´¡ÉèÊ©£¬¾Í¿ÉÒÔ¿¼ÂÇ´«ÊäһЩÈßÓàÊý¾Ý£¬Ñ¡Ôñ×î¼òµ¥´«Ê䷽ʽ£¬²¢¶àÀ´¼¸´ÎÔ¶³Ìµ÷Óõȵȣ¬ÒÔ¼õÇáÉè¼Æ¿ª·¢µÄ¹¤×÷Á¿¡£

ÄÇôÀíÏ뻯µÄÔ­Ôò¾ÍûÓÐÒâÒåÁËÂ𣿱ÈÈçÁìÓòÇý¶¯Éè¼Æ£¨Domain-Driven Design£©±»¹ã·ºÈÏΪÊÇ×îÀíÏëµÄOOÉè¼Æ·½Ê½£¬µ«¼«ÉÙÓÐÏîÄ¿ÄÜÍêÈ«²ÉÓÃËü£»²âÊÔÇý¶¯¿ª·¢Ò²±»ÈÏΪÊÇ×î¼ÑµÄÃô½Ý¿ª·¢·½Ê½£¬µ«Í¬Ñù¼«ÉÙÓÐÍŶÓÄܳ¹µ×²ÉÓÃËü¡£µ«ÊÇ£¬¿ÖÅÂûÓжàÉÙÈËÔÚÁ˽âËüÃÇÖ®ºó»á·ñÈÏËüÃǾ޴óµÄÒâÒå¡£

ÀíÏ뻯µÄÔ­Ôò¿ÉÒÔ¸üºÃµÄ°ïÖúÈËÃÇÀí½âijÀàÎÊÌâµÄ±¾ÖÊ£¬²¢×öΪºÃµÄ³ö·¢µã»òÕß±ê¸Ë£¬°ïÖúÄÇЩ¿ÉÒÔÁé»îÔËÓã¬Ç¡µ±È¡ÉáµÄÈËÈ¡µÃ¸ü´óµÄ³É¼¨£¬Ó¦¸¶¹Ø¼üµÄÌôÕ½¡£ÕâÕýÈç¿××Ó˵µÄ¡°È¡ºõÆäÉÏ£¬µÃºõÆäÖУ»È¡ºõÆäÖУ¬µÃºõÆäÏ£»È¡ºõÆäÏ£¬ÔòÎÞËùµÃÒÓ¡±¡£

ÁíÍ⣬ֵµÃÒ»ÌáµÄÊÇ£¬SOA´ÓËüµÄÀíÄî±¾ÉíÀ´Ëµ£¬¾Í´øÓÐһЩµÄÀíÏëÖ÷ÒåµÄÇãÏò£¬±ÈÈçÏò¡°È«ÊÀ½ç¡±¿ª·Å£¬²»ÏÞ¶¨¿Í»§¶ËµÈµÈ¡£Èç¹ûÕæÔ¸Òâ°´SOAµÄ·¾¶×ߣ¬¼´Ê¹ÄãÊǸöÍÁºÀ£¬Íµ¸öÀÁ±ÈÀË·ÑÍøÂç´ø¿íÖØÒª£¬µ«Ëµ²»¶¨ÄãµÄºÜ¶àÓû§ÊÇÍÁ±î¹«Ë¾£¬À˷Ѽ¸±¶µÄ´ø¿í¾Í´ó´óµÄÓ°ÏìËûÃǵÄÀûÈóÂÊ¡£

ÑÓÉìÌÖÂÛ£ºSOAºÍÃô½ÝÈí¼þ¿ª·¢Ã¬¶ÜÂð£¿

SOAµÄ·þÎñÆõÔ¼ÒªÇóÏ൱µÄÎȶ¨ÐÔ£¬Ò»µ©¹«¿ª·¢²¼£¨»òÕßË«·½ºÏͬÉ̶¨£©¾Í²»Ó¦¸ÃÓо­³£µÄ±ä¸ü£¬ËüÐèÒª¶ÔºÜ¶à·½ÃæÓм«¸ßµÄÔ¤ÅС£¶øÃô½ÝÈí¼þ¿ª·¢ÔòÊÇÓµ±§±ä»¯£¬³ÖÐøÖØ¹¹µÄ¡£Èí¼þÉè¼Æ´óʦMartin Fowler°ÑËüÃǹé½áΪ¼Æ»®Ê½Éè¼ÆºÍÑݽøÊ½Éè¼ÆµÄ²»Í¬¡£

¼Æ»®ÀíÂÛ£¨»òÕ߽н¨¹¹ÀíÂÛ£©ºÍÑݽøÀíÂÛÊǽü´úÕÜѧµÄÁ½¹É˼³±£¬Ó°ÏìÉîÔ¶£¬ÅÉÉú³öÁ˱ÈÈç¼Æ»®¾­¼ÃºÍÊг¡¾­¼Ã£¬Éç»áÖ÷ÒåºÍ×ÔÓÉÖ÷ÒåµÈµÈ¸÷ÖÖÀíÂÛ¡£

µ«ÊÇ£¬¼Æ»®Ê½Éè¼ÆºÍÑݽøÊ½Éè¼Æ²¢²»¾ø¶Ôì¶Ü£¬¾ÍÏñ¼Æ»®¾­¼ÃºÍÊг¡¾­¼ÃÒ²²»¾ø¶Ôì¶Ü£¬·Ç´Ë¼´±Ë£¬Õâ·½ÃæÐèÒªÔÚʵ¼ùÖв»¶ÏÃþË÷¡£Ç°ÃæÎÒÃÇÌÖÂÛµÄÉè¼ÆÔ­ÔòºÍ¼Ü¹¹Ìåϵ£¬¾ÍÊǽ«SOA²ãºÍOOÓ¦ÓÃÏà¶Ô¸ôÀ룬·Ö¶øÖÎÖ®£¬ÔÚSOA²ãÐèÒª¸ü¶à¼Æ»®Ê½Éè¼Æ£¬¶øOOÓ¦ÓÿÉÒÔÏà¶Ô¶ÀÁ¢µÄÑݽø£¬´Ó¶øÔÚÒ»¶¨³Ì¶È»º½âSOAºÍÃô½Ý¿ª·¢µÄì¶Ü¡£

ÑÓÉìÌÖÂÛ£ºSOAºÍRESTÊÇÒ»»ØÊÂÂð£¿

´Ó×î±¾ÖʵÄÒâÒåÉϽ²£¬REST£¨Representational State Transfer£©Êµ¼ÊÊÇÒ»ÖÖÃæÏò×ÊÔ´¼Ü¹¹£¨ROA£©£¬ºÍÃæÏò·þÎñ¼Ü¹¹£¨SOA£©ÊÇÓиù±¾Çø±ðµÄ¡£

ÀýÈ磬RESTÊÇ»ùÓÚHTTPЭÒ飬¶ÔÌØ¶¨×ÊÔ´×öÔö£¨HTTP POST£©¡¢É¾£¨HTTP DELETE£©¡¢¸Ä£¨HTTP PUT£©¡¢²é£¨HTTP GET£©µÈ²Ù×÷£¬ÀàËÆÓÚSQLÖÐÕë¶ÔÊý¾Ý±íµÄINSERT¡¢DELETE¡¢UPDATE¡¢SELECT²Ù×÷£¬¹ÊRESTÊÇÒÔ×ÊÔ´£¨×ÊÔ´¿ÉÒÔÀà±ÈΪÊý¾Ý£©ÎªÖÐÐĵġ£¶øSOAÖеÄserviceͨ³£²»°üº¬ÕâÖÖÕë¶Ô×ÊÔ´£¨Êý¾Ý£©µÄϸÁ£¶È²Ù×÷£¬¶øÊÇÃæÏòÒµÎñÓÃÀý¡¢ÒµÎñÁ÷³ÌµÄ´ÖÁ£¶È²Ù×÷£¬ËùÒÔSOAÊÇÒÔÒµÎñÂß¼­ÎªÖÐÐĵġ£

µ«ÊÇÔÚʵ¼ÊʹÓÃÖУ¬Ëæ×ÅÐí¶àREST»ù±¾Ô­Ôò±»²»¶ÏÍ»ÆÆ£¬RESTµÄ¸ÅÄî±»´ó´óµÄ·º»¯ÁË£¬ËüÍùÍù³ÉΪºÜ¶à»ùÓÚHTTPµÄÇáÁ¿¼¶Ô¶³Ìµ÷ÓõĴúÃû´Ê£¨ÀýÈçÇ°ÃæÌáµ½¹ýµÄHTTP + JSON£©¡£±ÈÈ磬¼´Ê¹ÊÇÖøÃûµÄTwitter REST APIҲΥ·´²»ÉÙԭʼRESTµÄ»ù±¾Ô­Ôò¡£

ÔÚÕâ¸ö·º»¯µÄÒâÒåÉϽ²£¬RESTÒ²¿ÉÒÔ˵ÊÇÓÐÖúÓÚʵÏÖSOAµÄÒ»ÖÖÇáÁ¿¼¶Ô¶³Ìµ÷Ó÷½Ê½¡£

SOA¼Ü¹¹µÄ½ø»¯

Ç°ÃæÌÖÂÛµÄSOAµÄËùÓÐÎÊÌ⣬»ù±¾¶¼¼¯ÖÐÔÚservice±¾ÉíµÄÉè¼Æ¿ª·¢¡£µ«SOAÒªÕæÕý·¢»Ó×î´ó×÷Ó㬻¹ÐèÒª²»¶ÏÑݽø³É¸ü´óµÄ¼Ü¹¹£¨Ò²¾ÍÊÇ´Ó΢¹ÛSOA¹ý¶Éµ½ºê¹ÛSOA£©£¬ÔÚ´ËÂÔ×÷˵Ã÷£º

µÚÒ»¸ö²ã´ÎÊÇservice¼Ü¹¹£º¿ª·¢¸÷ÖÖ¶ÀÁ¢µÄservice²¢Âú×ãÇ°ÃæµÄһЩÉè¼ÆÔ­Ôò£¬ÎÒÃÇÇ°Ãæ»ù±¾¶¼¼¯ÖÐÔÚÌÖÂÛÕâÖּܹ¹¡£ÕâЩ¶ÀÁ¢µÄserviceÓеãÀàËÆÓÚСº¢µÄ»ýľ¡£

µÚ¶þ¸ö²ã´ÎÊÇservice composition£¨×éºÏ£©¼Ü¹¹£º¶ÀÁ¢µÄserviceͨ¹ý²»Í¬×éºÏÀ´¹¹³ÉеÄÒµÎñ»òÕßеÄservice¡£ÔÚÀíÏëÇé¿öÏ£¬¿ÉÒÔÓÃÒ»ÖÖÀàËÆÐ¡º¢´î»ýľµÄ·½Ê½£¬³ä·Ö·¢»ÓÏëÏóÁ¦£¬½«¶ÀÁ¢µÄ»ýľ£¨service£©Áé»îµÄÆ´×°×éºÏ³ÉеÄÐÎ̬£¬»¹Äܹ»×ÔÓɵÄÌæ»»ÆäÖеÄij¸ö¹¹¼þ¡£ÕâÌåÏÖ³öSOA¸ß¶È±ã½ÝµÄÖØÓÃÐÔ£¬´ó´óÌá¸ßÆóÒµµÄÒµÎñÃô½Ý¶È¡£

µÚÈý¸ö²ã´ÎÊÇservice inventory£¨Çåµ¥£©¼Ü¹¹£ºÍ¨¹ý±ê×¼»¯ÆóÒµ·þÎñÇåµ¥£¨»òÕß½Ð×¢²áÖÐÐÄ£©Í³Ò»µÄ×éÖ¯ºÍ¹æ»®serviceµÄ¸´ÓúÍ×éºÏ¡£µ±»ýľԽÀ´Ô½¶àÁË£¬Èç¹û»¹ÂúµØÂҷŶøÃ»ÓÐÁ¼ºÃµÄ¹éÀàÕûÀí£¬ÏÔÈ»¾ÍÍæ²»×ªÁË¡£

µÚËĸö²ã´ÎÊÇservice-oriented enterprise¼Ü¹¹¡­¡­

×ܽá

ÖÁ´Ë£¬ÎÒÃÇÖ»ÊǼòÒªµÄ̽ÌÖÁË΢¹Û²ãÃæµÄSOA£¬ÌرðÊÇһЩ»ù±¾Éè¼ÆÔ­Ôò¼°Æäʵ¼ù·½Ê½£¬ÒÔÆÚÄܹ»ÂÔ΢չʾSOAÔÚʵ¼ùÖеı¾ÖÊ£¬ÒÔÓÐÖúÓÚSOA¸üºÃµÄÂ䵨£¬½øÈëÈÕ³£²Ù×÷²ãÃæ¡£

×îºó£¬´ò¸ö±È·½£ºSOA²»·Ö¹ó¼ú£¨²»·ÖÓïÑÔ¡¢Æ½Ì¨¡¢×éÖ¯£©£¬²»Ô¶ÍòÀͨ¹ýÔ¶³Ìµ÷Ó㩵ÄÌṩ·þÎñ£¨service£©£¬ÕâÒªÇóµÄ¾ÍÊÇÒ»ÖÖÈ«ÐÄÈ«ÒâΪÈËÃñ·þÎñµÄ¾«Éñ¡­¡­

   
3816 ´Îä¯ÀÀ       33
Ïà¹ØÎÄÕÂ

¶àά·½·¨À´¿ª·¢ÓлúµÄÒµÎñÁ÷³Ì¼Ü¹¹
SCA Ó¦ÓóÌÐò¿ª·¢
BPM ºÍ SOA ÐÔÄÜ×î¼Ñʵ¼ù
ʵÏÖÆóÒµ·þÎñ×ÜÏßģʽ
Ïà¹ØÎĵµ

SCA½éÉܼ°Ó¦ÓÃʵÀý
»ùÓÚSOA¼Ü¹¹µÄESBƽ̨£ºInfomagic
SCA¼Ü¹¹
SOAµÄ»ù±¾¸ÅÄî
Ïà¹Ø¿Î³Ì

ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

»ùÓÚSOAµÄ¹¤×÷Á÷£¨WF£©ÕûºÏ
SOA 100ÎÊ - ÎÊÓë´ð
SOAP Ó¦ÓÃģʽ:´¦ÀíÓëÐÔÄÜ
ESB¼Ü¹¹Ö®Æóҵʵʩ°¸Àý
»ùÓÚSOA¼Ü¹¹µÄÆóÒµ¼¯³Éϵͳ
»ùÓÚSOAµÄÌåϵ¼Ü¹¹Éè¼Æ


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù


ijµÚÈý·½µç×ÓÖ§¸¶ÆóÒµ SOA¼Ü¹¹Éè¼Æ
ijµç×ÓÆóÒµ SOAÓ¦ÓÃ
ÖйúÒÆ¶¯ SOAÅàѵ
±±¾©´óѧ SOA¼Ü¹¹Éè¼ÆÊµ¼ù
ÓѰÏÕ SOA¼Ü¹¹Éè¼Æ
ÉϺ£ SOA¼Ü¹¹Êµ¼ù
ɽ¶«Òƶ¯Í¨ÐÅ SOAÌåϵ½á¹¹Êµ¼ù