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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ËæÐи¶Î¢·þÎñ²âÊÔÖ®½Ó¿Ú²âÊÔºÍÆõÔ¼²âÊÔ
 
  11079  次浏览      29
 2018-12-20
 

 

±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚÍøÂ磬±¾Æª·Ö±ð´Ó΢·þÎñģʽÏÂÈçºÎ¿ªÕ¹½Ó¿Ú×Ô¶¯»¯²âÊÔ£¬ÆõÔ¼²âÊԵļÛÖµÒÔ¼°ÈçºÎ¿ªÕ¹ÆõÔ¼²âÊԽǶȽøÐÐÁ˽éÉÜ¡£

±³¾°

ÈÕ³£¿ª·¢¹ý³ÌÖУ¬ÏîÄ¿µÄ½Ó¿Úͨ³£ÓÉ·þÎñÌṩ·½Ô¼¶¨ºÍÌṩ£¬Î¢·þÎñģʽϽӿڱ»¶à¸öÏû·ÑÕßµ÷ÓøüÊdz£Ì¬£¬ÄÇôÌṩ·½½Ó¿ÚµÄ±ä¸üÈçºÎ¿ìËÙ¡¢¸ßЧ¡¢ÎÞÒÅ©µÄ֪ͨ¸øÏû·ÑÕßÄØ£¿ÁíÍ⣬µ±Ò»¸öserviceͬʱ±»¶à¸öʹÓÃÕßµ÷Óã¬ÈçºÎ±£Ö¤¶ÔserviceµÄÐ޸ĿÉÒÔÈÃÆäËüËùÓÐʹÓÃÕßÔì³ÉµÄÓ°Ïì¶¼Äܱ»¸ÐÖªµ½£¿ÕâЩÎÊÌâÆõÔ¼²âÊÔ¿ÉÒÔ¸øÄã´ð°¸¡£ÁíÍ⣬΢·þÎñģʽÏ£¬½Ó¿Ú²âÊÔÊǷdz£ÖØÒªµÄ²âÊÔÊֶΣ¬ËüÔÚʵ¼ÊµÄÏîÄ¿ÖаïÖúÑé֤΢·þÎñÖ®¼äµÄЭͬºÍ½»»¥£¬´ó·ù½µµÍ²âÊԳɱ¾ºÍÌá¸ß²âÊÔЧÂÊ·½ÃæÌṩÁ˺ܴó°ïÖú£¬¿ÉÒÔ˵½Ó¿Ú²âÊÔÊÇÒµÎñ¹¦ÄܲâÊÔǰÖõÄÖúÍÆÆ÷¡£Òò´Ë£¬ÕâÀï¶ÔÕâÁ½ÖÖ²âÊÔÊֶνøÐнéÉÜ¡£

½Ó¿Ú²âÊÔºÍÆõÔ¼²âÊÔËù´¦µÄ½×¶Î

ÔÚʵ¼ÊµÄ¹¤×÷ÖУ¬½áºÏËæÐи¶µÄʵ¼ÊÇé¿öÎÒÃǶÔ×Ô¶¯»¯²âÊÔ½ð×ÖËþÔ­Àí½øÐÐÁ˶¨ÖÆ£¬¼ÓÈëÆõÔ¼×Ô¶¯»¯²âÊÔÄÚÈÝ£¬ÐγÉÈçÏÂаæ×Ô¶¯»¯²âÊÔ½ð×ÖËþ½á¹¹¡£

ÓÉͼ¿ÉÖª£¬Ò»¸öÏîÄ¿µÄ²âÊÔ¹ý³Ì£¬´ÓÏîÄ¿ÍÆ½øµÄά¶È£¬Ê×ÏȽøÐе¥Ôª²âÊÔ£¬Æä´Î½Ó¿Ú×Ô¶¯»¯²âÊÔ¡¢ÆõÔ¼²âÊÔ£¬×îºóUI×Ô¶¯»¯²âÊÔºÍÊÖ¹¤²âÊÔ¡£

΢·þÎñģʽÏÂÈçºÎ¿ªÕ¹½Ó¿Ú²âÊÔ

½Ó¿Ú²âÊÔÊôÓÚ¼¯³É²âÊÔ·¶³ë£¬ËûÊǵ¥Ôª²âÊÔµÄÀ©Õ¹ºÍÑÓÐø¡£ËüÖ÷ÒªµÄ¹Ø×¢µãÊÇÄÚ²¿½Ó¿Ú¹¦ÄÜʵÏÖÊÇ·ñÍêÕû£¬±ÈÈç˵ÄÚ²¿Âß¼­ÊDz»ÊÇÕý³££¬Òì³£´¦ÀíÊDz»ÊÇÕýÈ·¡£ËüÊǵ¥Ôª²âÊÔºÍÆõÔ¼²âÊԵĹý¶É½×¶Î£¬ËüÊÇÏîÄ¿µ¥¸ö´úÂëÂß¼­×îÖÕ´®ÁªÐγÉÓмÛÖµÒµÎñÂß¼­µÄÇÅÁº¡£Òò´Ë£¬Æä×÷ÓþÙ×ãÇáÖØ¡£ËæÐи¶¿ªÕ¹½Ó¿Ú²âÊÔ£¬²ÉÓõÄ˼·Êǹ淶ºÍ·½·¨ÏÈÐУ¬Æä´ÎÊǹ¤¾ßÑ¡Ôñ¡¢ÈËÔ±Åàѵ£¬È»ºóÊÇʵʩºÍ¹ý³ÌÓÅ»¯£¬×îºó³£Ì¬»¯³ÖÐøÌáЧºÍÖÊÁ¿±£Ö¤µÄ¹ý³Ì¡£

½Ó¿Ú²âÊԹ淶»¯ÒªÇó

½Ó¿Ú²âÊÔµÄÖÊÁ¿±£Ö¤ºÍ²âÊÔ¹ý³ÌµÄÁ÷³Ì»¯ÐèҪͨ¹ý¹æ·¶ºÍ·½·¨½øÐÐÖ¸µ¼ºÍÔ¼Êø¡£ÎÒÃǶ¨ÖÆÁËÈçÏÂÒªÇ󣨲¿·ÖÄÚÈÝ£©£º

1.ÐèÇó´æÔÚÐÂÔö½Ó¿Ú»òÕß½Ó¿Ú±ä¸üʱ£¬ÒªÇó½øÐÐÐÂÔö½Ó¿Ú²âÊÔ°¸ÀýµÄ±àд»ò´æÁ¿½Ó¿Ú°¸ÀýµÄά»¤£»

2.ÐèÇóÉæ¼°µ½µÄ´æÁ¿½Ó¿ÚÐèÒª½øÐлعé²âÊÔ£»

3.½Ó¿Ú²âÊÔ¸²¸ÇÂÊÒªÇó´ïµ½100%£»

4.ÐèÇó²âÊÔ½áÊøÇ°ÖÁÉÙ½øÐÐÒ»Âֽӿڻعé²âÊÔ£¬Çһعéͨ¹ýÂÊ´ïµ½100%

²âÊÔÁ÷³Ì¹æ·¶Éæ¼°´ÓÐèÇóÌá³ö¡¢½Å±¾±àд¡¢Ö´Ðе½²âÊÔ±¨¸æµÄ¸÷¸ö¹ý³Ì¡£

1.½Ó¿ÚÎĵµ¡£½Ó¿ÚÎĵµÊǽӿڲâÊÔ°¸ÀýÉè¼ÆµÄÒÀ¾Ý£¬½Ó¿ÚÎĵµµÄÈ«ÃæÐÔºÍ׼ȷÐÔ¾ö¶¨Á˽ӿڲâÊÔ·¶Î§µÄÈ«ÃæÐԺͽӿڲâÊÔ½á¹ûµÄÕýÈ·ÐÔ¡¢ÓÐЧÐÔ¡£ËæÐи¶²ÉÓÃswagger½øÐнӿÚÎĵµ¹ÜÀí¡£

2.½Ó¿ÚÓÃÀýÉè¼Æ¡£¸ù¾Ý½Ó¿ÚÎĵµÉè¼Æ½Ó¿Ú²âÊÔ°¸Àý£¬½Ó¿Ú²âÊÔ°¸Àýͨ¹ý½Ó¿Ú²âÊÔÆ½Ì¨½øÐбàд£¬ÇÒÐèÒªÂú×ã²»ÖØ²»Â©Ô­Ôò¡£

3.½Ó¿ÚÓÃÀýÆÀÉ󡣸ù¾ÝÏîĿʵ¼ÊÇé¿ö£¬½Ó¿Ú²âÊÔ°¸Àý±àдÍê³Éºó£¬Ðè×éÖ¯Ïà¹Ø¸ÉϵÈ˽øÐа¸ÀýÆÀÉ󣬼Ǽ²¢·¢ËÍ»áÒé¼ÍÒª¡£

4.½Ó¿ÚÓÃÀýÖ´ÐС£ÐèÇó²âÊÔ½áÊøÇ°½Ó¿Ú²âÊÔ°¸ÀýÖÁÉÙÔÚ²âÊÔ»·¾³ÖÐÖ´ÐÐÁËÒ»´Î»Ø¹é²âÊÔ£¬ÒªÇó°¸ÀýÖ´ÐÐͨ¹ýÂÊ´ïµ½100%

5.ȱÏݹÜÀíºÍ²âÊÔ±¨¸æ¡£

6.½Å±¾ÄÉÈë»Ø¹éÌåϵ£¬¶¨Ê±»Ø¹é£¬³ÖÐø±£ÕϽӿڵÄÖÊÁ¿£¬ÒÔ¼°½Ó¿ÚÖÊÁ¿µÄ³ÖÐøºÍ¼°Ê±·´À¡¡£

½Å±¾ÃüÃû¹æ·¶ºÍ±àд¹æ·¶ÈçÏ£¨²¿·ÖÄÚÈÝ£©£º

1.½Ó¿ÚÃüÃûÒªÇ󣺲ÉÓá°½Ó¿ÚÃû³Æ_½Ó¿ÚÃèÊö¡±½øÐÐÃüÃû£¬ÓÃÓÚ¶¨ÒåΨһ½Ó¿Ú¡£

2.·½·¨ÃüÃûÒªÇ󣺲ÉÓá°·½·¨Ãû_ÃèÊö¡±½øÐÐÃüÃû£¬ÓÃÓÚ¶¨ÒåΨһ·½·¨¡£

3.°¸ÀýÃüÃûÒªÇ󣺲ÉÓá°ÐòºÅ_³¡¾°²Ù×÷_ÆÚÍû½á¹û¡±½øÐÐÃüÃû£¬ÓÃÓÚ¶¨ÒåΨһ°¸Àý¡£

4.¡¾Ç¿ÖÆ¡¿Ã¿¸ö½Ó¿Ú²âÊÔ°¸Àý¶¼±ØÐë°üº¬ÖÁÉÙÒ»¸ö¶ÏÑÔ£»

5.¡¾Ç¿ÖÆ¡¿¶ÔÓÚjson¸ñʽµÄ±¨ÎÄ£¬½Ó¿ÚÈë²ÎºÍ¶ÏÑÔÏìÓ¦µÄÔ¤ÆÚÖµÐèҪʹÓÃÑϸñµÄjson¸ñʽ£»

6.¡¾Ç¿ÖÆ¡¿swagger½Å±¾µ¼Èëµ½½Ó¿Ú²âÊÔÆ½Ì¨Ê±£¬ÐèÒªµ¼Èë.jsonÎļþ£¬ÇÒÎļþÄÚÈÝΪÎÞBOMµÄUTF-8±àÂ룻

7.¡¾Ç¿ÖÆ¡¿Êý¾Ý³õʼ»¯ºÍ¶ÏÑÔµÄsql±ØÐë´øwhereÌõ¼þ£¬ÇÒÄÜΨһ¶¨Î»µ½ÆÚÍûµÄÊý¾Ý£»

8.¡¾Ç¿ÖÆ¡¿Êý¾Ý¿â»ØÍ˵Äsql±ØÐë´øwhereÌõ¼þ£¬ÇÒÄÜΨһ¶¨Î»µ½ÐèÒª»ØÍ˵ÄÊý¾Ý£»

9.¡¾Ç¿ÖÆ¡¿Ó°Ï칫¹²±í£¨È磺T_BAP_CDE_BNK±í£©»òÕ߯äËû×éÊý¾Ý¿â±í£¨È磺×ʽð×飩µÄsql£¬ÔÚÊý¾Ý³õʼ»¯¡¢»ØÍË¡¢½Ó¿ÚÓ°ÏìµÄÊý¾Ý»ØÍË¡¢¶ÏÑÔ»ØÍËʱ±ØÐëÑϸñÉó²é£»

10.¡¾Ç¿ÖÆ¡¿Êý¾Ý¿â¶ÏÑÔsqlÖеÄwhereÌõ¼þµÄÖ÷¼ü×éºÏÐèÒª·Åµ½Ç°Ã棬ÓÃÓÚ¶ÏÑÔʧ°Üʱ¿ìËÙ¶¨Î»ÎÊÌ⣻

½Ó¿Ú²âÊÔÓÃÀýÉè¼ÆÒªÇó

ΪÁ˱£Ö¤½Ó¿ÚµÄÖÊÁ¿£¬ÐèÒª½øÐÐÈ«ÃæµÄ½Ó¿Ú²âÊÔ£¬Òò´ËÔÚÉæ¼°½Ó¿Ú²âÊÔÓÃÀýʱÐèÒªÒÀÀµ·½·¨£¬Òò´ËÎÒÃÇ×ܽáÁ˽ӿڲâÊÔÓÃÀýµÄÉè¼ÆÒªÇó£¬ÈçÏÂͼËùʾ¡£

½Ó¿Ú²âÊÔ¹¤¾ß

½Ó¿Ú²âÊÔ¹ý³ÌÌáЧ¡¢²âÊÔ¹ý³Ì×Ô¶¯»¯ÐèÒªÒÀÀµ×Ô¶¯»¯²âÊÔ¹¤¾ß£¬ÎäÆ÷²»ºÃºÜÄÑ´òʤÕÌ¡£¾­¹ýµ÷ÑУ¬ÊÐÃæÉϺܶà½Ó¿Ú×Ô¶¯»¯²âÊÔ¹¤¾ß¾ùÎÞ·¨Âú×ãËùÓеIJâÊÔÒªÇó£¬Òò´ËÎÒÃÇ×ÔÑÐÁ˽ӿÚ×Ô¶¯»¯²âÊÔÆ½Ì¨¡£×Ô¶¯»¯²âÊÔÆ½Ì¨¾ßÓÐÈçÏÂÄÜÁ¦£º

1.°¸Àý×Ô¶¯Éú³É¡£http/https½Ó¿Ú°¸Àý×Ô¶¯»¯Éú³ÉºÍµ¼Èë¡£

2.²âÊÔ¹ý³Ì¼¯ÖпÉÊÓ»¯¹ÜÀí¡£Í¨¹ý½«×Ô¶¯»¯²âÊÔ¹ý³Ìweb»¯ÊµÏÖÁË×Ô¶¯»¯²âÊԼƻ®¡¢×Ô¶¯»¯²âÊÔÓÃÀý±àд¡¢×Ô¶¯»¯²âÊÔÓÃÀýÖ´ÐС¢×Ô¶¯»¯²âÊÔÓÃÀý¹ÜÀíºÍ×Ô¶¯»¯²âÊÔ±¨¸æ¹ÜÀí¸÷¸ö¹ý³ÌµÄ¿ÉÊÓ»¯¡£

3.Ä£ÄâÐÔÄܳ¡¾°¡£×Ô¶¯»¯²âÊÔʵÏÖÁËͨ¹ý½Ó¿Ú°¸ÀýÄ£ÄâÐÔÄܲâÊÔ³¡¾°µÄÄÜÁ¦¡£Í¨¹ýʹÓÃÆ½Ì¨ÖÐÌṩµÄ½Ó¿Ú°¸Àý£¬½øÐв¢ÐÐÖ´ÐÐÄ£ÄâÐÔÄܳ¡¾°¡£

4.¶àЭÒé¶à±¨ÎÄÀàÐÍÖ§³Ö¡£Ö§³Öhttp/httpsЭÒé¡¢dubboЭÒé¡¢socketЭÒé¡¢rabbitMQЭÒéµÈЭÒéµÄ×Ô¶¯»¯²âÊÔ£¬²¢Ö§³Ö¶ÔЭÒéµÄÀ©Õ¹¡£Í¬Ê±Ö§³Öxml¡¢json¡¢sop¡¢8583µÈ¶àÖÖ±¨ÎÄÀàÐÍÒÔ¼°±¨ÎÄÀàÐ͵ÄÀ©Õ¹¡£

5.²âÊÔ×ʲúÓÐЧ»ýÀÛ¡£

6.×Ô¶¯»¯µ÷¶ÈÖ´ÐкÍÓʼþ·¢ËÍ¡£×Ô¶¯»¯²âÊÔÖ´ÐÐͨ¹ý¶¨Ê±¶Ô°¸Àý½øÐе÷¶ÈÖ´ÐУ¬¿É¶ÔÖ¸¶¨µÄ¹¹½¨°æ±¾¶ÔÓ¦µÄ°¸Àý½øÐÐ×Ô¶¯»¯µÄ·ÖÅú¡¢¶¨Ê±µ÷¶ÈÖ´Ðв¢Óʼþ·¢ËͲâÊÔ±¨¸æ¡£

7.ϵͳÖÊÁ¿µÄ¿ÉÊÓ»¯·´À¡¡£Í¨¹ý¶Ô×Ô¶¯»¯°¸ÀýµÄÖ´Ðнá¹ûͳ¼Æ£¬·ÖÎö³öϵͳµÄÖÊÁ¿Ç÷ÊÆ£¬×öµ½ÏµÍ³ÖÊÁ¿µÄ³ÖÐø»¯·´À¡¡£Í¨¹ý¸ùÒò·ÖÎö£¬Í³¼ÆÏµÍ³ÎÊÌâµÄ¸ù±¾Ô­ÒòµÄ±ÈÀý£¬¸üÓÐÕë¶ÔÐԵĽâ¾öÖÊÁ¿ÎÊÌâ¡£

ͨ¹ý½Ó¿Ú²âÊÔ³ÖÐøÔËÐÐ1Äê¶àµÄ³ÖÐøÔËÓª£¬ËæÐи¶ºËÐÄÒµÎñ½Ó¿Ú»ù±¾ÊµÏÖ½Ó¿Ú²âÊÔÓÃÀýÈ«¸²¸Ç£¬ÇÒ¾ùÄÉÈëµ½¶¨ÆÚ»Ø¹é¹ý³Ì£¬³ÖÐøÎª½Ó¿ÚµÄÖÊÁ¿±£¼Ý»¤º½¡£

΢·þÎñģʽÏÂÈçºÎ¿ªÕ¹ÆõÔ¼²âÊÔ

ÆõÔ¼²âÊԵļÛÖµ

ÆõÔ¼²âÊÔ·ÖÁ½ÖÖÀàÐÍ£¬Ò»ÖÖÊÇÏû·ÑÕßÇý¶¯£¬Ò»ÖÖÊÇÌṩÕßÇý¶¯¡£ÆäÖÐ×î³£Óõģ¬ÊÇÏû·ÑÕßÇý¶¯µÄÆõÔ¼²âÊÔ£¨Consumer-Driven Contract Test£¬¼ò³Æ CDC£©¡£ºËÐÄ˼ÏëÊÇ´ÓÏû·ÑÕßÒµÎñʵÏֵĽǶȳö·¢£¬ÓÉÏû·ÑÕ߶˶¨ÒåÐèÒªµÄÊý¾Ý¸ñʽÒÔ¼°½»»¥Ï¸½Ú£¬Éú³ÉÒ»·ÝÆõÔ¼Îļþ¡£È»ºóÉú²úÕ߸ù¾ÝÆõÔ¼ÎļþÀ´ÊµÏÖ×Ô¼ºµÄÂß¼­£¬²¢ÔÚ³ÖÐø¼¯³É»·¾³ÖгÖÐøÑéÖ¤¸ÃʵÏÖ½á¹ûÊÇ·ñÕýÈ·¡£¶ÔÓÚ»ùÓÚRestful APIµÄ΢·þÎñÀ´Ëµ£¬ËüµÄÆõÔ¼¾ÍÊÇÖ¸ API µÄÇëÇóºÍÏìÓ¦µÄ¹æÔò¡£ ÈçÏÂͼËùʾ£º

¶ÔÓÚÇëÇ󣬰üÀ¨ÇëÇó URL ¼°²ÎÊý£¬ÇëÇóÍ·£¬ÇëÇóÄÚÈݵȣ»

¶ÔÓÚÏìÓ¦£¬°üÀ¨×´Ì¬Â룬ÏìӦͷ£¬ÏìÓ¦ÄÚÈݵȡ£

¶ÔÓÚÔªÊý¾Ý£¬Ö¸¶ÔÏû·ÑÕßÓëÌṩÕß¼äÒ»´ÎЭ×÷¹ý³ÌµÄÃèÊö¡£Æ©ÈçÏû·ÑÕß/ÌṩÕßµÄÃû³Æ¡¢ÉÏÏÂÎļ°³¡¾°ÃèÊöµÈ¡£

ÄÇôÆõÔ¼²âÊÔÄܸøÎ¢·þÎñ´øÀ´Ê²Ã´¼ÛֵĨ£¿ÎÄÕ¿ªÍ·ÒѾ­Ìáµ½ÁËÆõÔ¼²âÊÔµÄÒ»²¿·Ö¼ÛÖµ£¬¼´½Ó¿Ú±ä¸ü¿ìËÙ֪ͨ£¬serviseÐ޸ĵĿìËÙ¸ÐÖª¡£³ý´ËÖ®Í⣬Ëü»¹´øÀ´ÏÂÁмÛÖµ£º

1.½µµÍ·þÎñ¼¯³ÉµÄÄѶȡ£°Ñ·þÎñ¼¯³ÉÕâ¸ö¹ý³Ì·Ö½â³ÉÁ˸üϸµÄµ¥Ôª²âÊԺͽӿڲâÊÔ£¬Ëü´ÓÏû·ÑÕßµÄÐèÇóΪ³ö·¢µã£¬°ÑÏû·ÑÕßµÄÐèÇó×÷Ϊ²âÊÔÓÃÀýÇý¶¯ÊµÏÖÒ»·ÝÆõÔ¼£¬È»ºóÑéÖ¤ÌṩÕ߶˵ŦÄÜ¡£

2.¿ª·¢²¢ÐУ¬Ìá¸ß¿ª·¢Ð§ÂÊ¡£ÆõÔ¼¸ôÀëÁËÏû·ÑÕߺÍÌṩÕߣ¬Ë«·½¿ÉÒÔ²¢ÐпªÕ¹¹¤×÷£¬¿ª·¢¹ý³ÌÖоÍÀûÓÃÆõÔ¼½øÐÐÔ¤¼¯³É²âÊÔ£¬²»Óõȵ½Áªµ÷ÔÙÀ´¼¯³Éµ÷ͨ½Ó¿Ú£¬Ò»µ©³ÉÊ죬ÔÚ±£Ö¤ÖÊÁ¿µÄǰÌáÏ£¬Áªµ÷µÄ³É±¾¿ÉÒÔ¼õµÍµ½¼¸ºõΪ0¡£

3.È·±£±ä¶¯µÄ°²È«ÐÔºÍ׼ȷÐÔ¡£Ö»ÒªÓб仯£¬ÆõÔ¼²âÊÔ¼´¿ÉµÚһʱ¼ä·¢ÏÖ£¬±£Ö¤°²È«ºÍ¶Ô½ÓµÄ׼ȷÐÔ¡£

4.×÷ΪMock serverΪÏû·ÑÕßÌṩMock·þÎñ¡£¼¯³É²âÊÔΪ·þÎñÕßÌṩ

΢·þÎñÏÂÈçºÎ¿ªÕ¹ÆõÔ¼²âÊÔ

ËæÐи¶²ÉÓÃÔÚSpring Cloud Contract¿ªÕ¹ÆõÔ¼²âÊÔ¡£ÆäºËÐÄÁ÷³Ì°üÀ¨2²½£º

1.¶ÔÏû·ÑÕßµÄÒµÎñÂß¼­½øÐÐÑé֤ʱ£¬ÏÈ¶ÔÆäÆÚÍûµÄÏìÓ¦×öÄ£ÄâÌṩÕߣ¨Mock£©£»²¢½«ÇëÇó£¨Ïû·ÑÕߣ©-ÏìÓ¦£¨»ùÓÚÄ£ÄâÌṩÕߣ©µÄЭ×÷¹ý³Ì£¬¼Ç¼ΪÆõÔ¼£»

2.ͨ¹ýÆõÔ¼£¬¶ÔÌṩÕß½øÐлطţ¬±£Ö¤ÌṩÕßËùÌṩµÄÄÚÈÝÂú×ãÏû·ÑÕߵįÚÍû¡£

ÏÂÃæÓÃÒ»¸ö¼òµ¥µÄÀý×Ó˵Ã÷Éè¼ÆÆõÔ¼²âÊԵķ½·¨¡£Õâ¸öÀý×ÓÖУ¬Ò»¸ö΢·þÎñÌṩÁËÒ»¸ö°üº¬Èý¸ö×ֶΣ¨¡°IP¡±¡¢¡°name¡±ºÍ¡°password¡±£©µÄ×ÊÔ´£¬¹©Èý¸öÏû·ÑÕß΢·þÎñʹÓá£ÕâÈý¸ö΢·þÎñ·Ö±ðʹÓÃÕâ¸ö×ÊÔ´ÖеIJ»Í¬²¿·Ö¡£Ïû·ÑÕß A ʹÓÃÆäÖÐµÄ IP ºÍ name ÕâÁ½¸ö×ֶΡ£Òò´Ë£¬²âÊԽű¾Öн«Ö»ÑéÖ¤À´×ÔÌṩÕßµÄ×ÊÔ´ÖÐÊÇ·ñÕýÈ·°üº¬ÕâÁ½¸ö×ֶΣ¬¶ø²»ÐèÒªÑéÖ¤ password ×ֶΡ£Ïû·ÑÕß B ʹÓà IP ºÍ password ×ֶΣ¬¶ø²»ÐèÒªÑéÖ¤ name ×ֶΡ£Ïû·ÑÕß C ÔòÐèҪȷÈÏ×ÊÔ´Öаüº¬ÁËËùÓÐÕâÈý¸ö×ֶΡ£ÏÖÔÚ£¬Èç¹ûÌṩÕßÐèÒª½« name ·ÖΪÐÕ£¨first name£©ºÍÃû£¨last name£©£¬ÄÇô¾ÍÐèҪȥµôÔ­ÓÐµÄ name ×ֶΣ¬¼ÓÈëÐ嵀 first name ×Ö¶ÎºÍ last name ×ֶΡ£ÕâʱִÐÐÆõÔ¼²âÊÔ£¬¾Í»á·¢ÏÖÏû·ÑÕß A ºÍ C µÄ²âÊÔÓÃÀý¾Í»áʧ°Ü¡£²âÊÔÓÃÀý B Ôò²»ÊÜÓ°Ïì¡£ÕâÒâζ×ÅÏû·ÑÕß A ºÍ C ·þÎñµÄ´úÂëÐèÒªÐ޸ģ¬ÒÔ¼æÈݸüÐÂÖ®ºóµÄÌṩÕß¡£ÐÞ¸ÄÖ®ºó£¬»¹ÐèÒª¶ÔÆõÔ¼ÄÚÈݽøÐиüС£

ÏÂÃæÒÔÒ»¸öÀý×Ó½éÉÜÈçºÎʹÓÃSpring Cloud Contract¿ªÕ¹ÆõÔ¼²âÊԵġ£

Spring Cloud ContractÆõÔ¼ÊÇÓûùÓÚGroovyµÄDSL¶¨ÒåµÄ£¬ÏÂÃæÊÇÒ»¸öÆõÔ¼²âÊԵĴúÂë¶Î

package contracts
org.springframework.cloud.contract.spec.Contract.make {
request {
method 'PUT'
url '/fraudcheck'
body([
"client.id": $(regex('[0-9]{10}')),
loanAmount: 99999
])
headers {
contentType('application/json')
}
}
response {
status OK()
body([
fraudCheckStatus: "FRAUD",
"rejection.reason": "Amount too high"
])
headers {
contentType('application/json')
}
}
}

·þÎñ·½-server (HTTP) / producer (Messaging) ¶ËÔö¼ÓSpring Cloud Contract VerifierµÄgralde²å¼þ£¬ËüÓÃÓÚ½âÎöÆõÔ¼ÎļþÉú³É²âÊÔ¡£Éú³É²âÊÔµÄÃüÁî¡£

./gradlew generateContractTests

ÏÂÃæÊÇ×Ô¶¯Éú³ÉµÄ²âÊԽű¾

@Test
public void validate_shouldMarkClientAsFraud() throws Exception {
//given:
MockMvcRequestSpecification request = given()
.header("Content-Type", "application/vnd.fraud.v1+json")
.body("{\"client.id\":\"1234567890\",\"loanAmount\":99999}");

//when:
ResponseOptions response = given().spec(request)
.put("/fraudcheck");

//then:
assertThat(response.statusCode()).isEqualTo(200);
assertThat(response.header("Content-Type")).matches("application/vnd.fraud.v1.json.*");
//and:
DocumentContext parsedJson = JsonPath.parse(response.getBody().asString());
assertThatJson(parsedJson).field("['fraudCheckStatus']").matches("[A-Z]{5}");
assertThatJson(parsedJson).field("['rejection.reason']").isEqualTo("Amount too high");
}

Õâ¸öÒ»¸ö±ê×¼µÄJUnit²âÊÔ,ÓÃRestAssuredÀ´Æô¶¯SpringµÄwebApplicationContext¡£

@Before
public void setup() {
RestAssuredMockMvc.webAppContextSetup
(webApplicationContext);}

µ÷Ó÷½-ÔÚ·þÎñ·½Í¨¹ýÃüÁîÉú³ÉStub·þÎñµÄJar°ü

./gradlew verifierStubsJar

Spring Cloud Contract Stub RunnerÔÚ¼¯³É²âÊÔÖÐͨ¹ýÔËÐÐWireMockʵÀý»òÕßÏûϢ·ÓÉÄ£ÄâÕæÊµµÄ·þÎñ¡£ Òò´ËÔÚÔËÐÐ֮ǰ£¬ÐèÒª½«ÒÀÀµ¼ÓÈëµ½graldeÖÐ,µ±È»¿ÉÒÔ°ÑËû¼Óµ½Ë½·þ²Ö¿âÖС£

spring-cloud-starter-contract-stub-runner

¶ÔÓÚµ÷Ó÷½,Spring Cloud ContractÌṩÁËStub RunnerÀ´¼ò»¯StubµÄʹÓá£ÏÖÔÚ¿ÉÒÔʹÓÃ@AutoConfigureStubRunner×¢½â.ΪÁËSpring Cloud Contract Stub RunnerÔËÐÐstubs×¢½âÖÐÔö¼ÓÁËgroup-idºÍartifact-id£¬¾ÙÀýÈçÏ£º

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
@AutoConfigureStubRunner(ids = {"cn.vbill.service:test-client-stubs:1.5.0-SNAPSHOT:stubs:6565"},
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class LoanApplicationServiceTests {
......
}

×¢½âAutoConfigureStubRunner£¬ÀïÃæÉèÖÃÁËÏÂÔØStub Jar°üµÄ˽¿âµØÖ·ÒÔ¼°°üµÄÍêÕû ID£¬×îºóµÄ6565¾ÍÊÇÖ¸¶¨StubÔËÐеı¾µØ¶Ë¿Ú¡£²âÊÔµÄʱºò·ÃÎÊStub¶Ë¿Ú£¬¾Í»á¸ù¾ÝÆõÔ¼·µ»ØÄÚÈÝ¡£

ÓÉÓÚËæÐи¶Î¢·þÎñÊÇ»ùÓÚspring cloud¼¼ÊõÕ»£¬Òò´Ë²ÉÓÃspring cloud contract½øÐÐ΢·þÎñÏÂµÄÆõÔ¼²âÊÔʹµÃ²âÊÔ¹ý³Ì¸üÁ÷³©£¬¸ü˳Àû£¬Í¬Ê±Spring Cloud ContractºÍSpringBootÒÔ¼° JunitµÄ¼¯³É¸ü¼òµ¥·½±ã¡£ÏàÐÅËæ×Åspring cloud contract°æ±¾µÄÓÅ»¯£¬ÆõÔ¼²âÊÔ¿ÉÒÔ×öµÄ¸üºÃ¡£

×ܽá

ÔÚ΢·þÎñģʽÏ£¬·þÎñ¼äµÄµ÷ÓùØÏµ¸´ÔÓ£¬½Ó¿Ú²âÊÔºÍÆõÔ¼²âÊÔÊDZ£Ö¤·þÎñÌá¸ßÖÊÁ¿µÄÖØÒªÊֶΣ¬Òò´ËÒª³ä·ÖÀûÓá£

 

   
11079 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù