±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁË·Ö²¼Ê½¼Ü¹¹µ¥ÏµÍ³£¬´¹Ö±²ð·Ö-¶àÓ¦Óã¬SOA·þÎñ»¯ÒÔ¼°»ùÓÚdubboµÄʵÏÖÏà¹ØÄÚÈÝ¡£
À´×ÔÓÚcrossoverjie.top£¬,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
ǰÑÔ
ÏÖÔÚÔ½À´Ô½¶àµÄ»¥ÁªÍø¹«Ë¾»¹Êǽ«×Ô¼º¹«Ë¾µÄÏîÄ¿½øÐзþÎñ»¯£¬ÕâȷʵÊǽñºóÏîÄ¿¿ª·¢µÄÒ»¸öÇ÷ÊÆ£¬¾ÍÕâ¸öµãÔÙÆ¾½è֮ǰµÄ
SSM ÏîÄ¿À´ÈõÚÒ»´Î½Ó´¥µÄͬѧÄÜ¿ìËÙÉÏÊÖ¡£
dz̸·Ö²¼Ê½¼Ü¹¹
·Ö²¼Ê½¼Ü¹¹µ¥¿´Õâ¸öÃû×Ö¸øÈ˵ĸоõ¾ÍÊǸ߱Ƹñ£¬µ«Æäʵ´ÓÀúÊ·µÄ½Ç¶ÈÀ´·ÖÎöһϾͱȽÏÃ÷ÁËÁË¡£
ÎÒÃÇÄÃÒ»¸öµçÉÌϵͳÀ´Ëµ£º
µ¥ÏµÍ³

¶ÔÓÚÒ»¸ö¸ÕÆð²½µÄ´´Òµ¹«Ë¾ÏîÄ¿¿Ï¶¨ÊÇ×·ÇóÔ½¿ìÍê³É¹¦ÄÜÔ½ºÃ£¬²¢ÇÒÓû§Á¿Ò²²»´ó¡£
ÕâʱºòËùÓеÄÒµÎñÂß¼¶¼ÊÇÔÚÒ»¸öÏîÄ¿ÖоͿÉÒÔÂú×ã¡£
´¹Ö±²ð·Ö-¶àÓ¦ÓÃ

µ±ÒµÎñÁ¿ºÍÓû§Á¿·¢Õ¹µ½Ò»¶¨µØ²½µÄʱºò£¬Õâʱһ°ã»á½«Ó¦ÓÃͬʱ²¿Êðµ½¼¸Ì¨·þÎñÆ÷ÉÏ£¬ÔÚÓû§·ÃÎʵÄʱºòʹÓÃNginx½øÐз´Ïò´úÀíºÍ¼òµ¥µÄ¸ºÔؾùºâ¡£
SOA·þÎñ»¯
µ±Õû¸öϵͳÒÔ¼°·¢Õ¹µÄ×ã¹»´óµÄʱºò£¬±ÈÈçÒ»¸öµçÉÌϵͳÖдæÔÚÓУº
Óû§ÏµÍ³
¶©µ¥ÏµÍ³
Ö§¸¶ÏµÍ³
ÎïÁ÷ϵͳ
µÈϵͳ¡£
Èç¹ûÿ´ÎÐÞ¸ÄÁËÆäÖÐÒ»¸öϵͳ¾ÍÒªÖØÐ·¢²¼ÉÏÏߵϰÄÇôñîºÏ¾ÍÌ«ÑÏÖØÁË¡£
ËùÒÔÐèÒª½«Õû¸öÏîÄ¿²ð·Ö³ÉÈô¸É¸ö¶ÀÁ¢µÄÓ¦Ó㬿ÉÒÔ½øÐжÀÁ¢µÄ¿ª·¢ÉÏÏßʵÏÖ¿ìËÙµü´ú¡£

ÈçÉÏͼËùʾÿ¸öÓ¦ÓÃÖ®¼äÏ໥¶ÀÁ¢,ÿ¸öÓ¦ÓÿÉÒÔÏû·ÑÆäËûÓ¦Óñ©Â¶³öÀ´µÄ·þÎñ£¬Í¬Ê±Ò²¶ÔÍâÌṩ·þÎñ¡£
´Ó¼Ü¹¹µÄ²ãÃæ¼òµ¥µÄÀí½âÁË£¬½ÓÏÂÀ´¿´¿´ÈçºÎ±àÂëʵÏÖ¡£
»ùÓÚdubboµÄʵÏÖ
dubboÓ¦¸ÃËãÊǹúÄÚʹÓÃ×î¶àµÄ·Ö²¼Ê½·þÎñ¿ò¼Ü£¬»ùÓÚ´ËÀ´ÊµÏÖ¶ÔÐÂÈëÃŵÄͬѧӦ¸ÃºÜÓаïÖú¡£
ÆäÖÐÓÐÉæ¼°µ½°²×°dubbo·þÎñµÄ×¢²áÖÐÐÄzookeeperµÈÏà¹ØÖªÊ¶µã¿ÉÒÔ×ÔÐв鿴¹Ù·½Îĵµ£¬ÕâÀï¾Í²»µ¥¶À½²ÁË¡£
¶ÔÍâÌṩ·þÎñ
Ê×ÏȵÚÒ»²½ÐèÒªÔÚSSM-APIÄ£¿éÖж¨ÒåÒ»¸ö½Ó¿Ú£¬ÕâÀï¾Í¸ãÁËÒ»¸öÓû§²éѯµÄ½Ó¿Ú
/**
* Function:Óû§API
* @author chenjiec
* Date: 2017/4/4 ÏÂÎç9:46
* @since JDK 1.7
*/
public interface UserInfoApi {
/**
* »ñÈ¡Óû§ÐÅÏ¢
* @param userId
* @return
* @throws Exception
*/
public UserInfoRsp getUserInfo (int userId) throws
Exception;
} |
½Ó×ÅÔÚSSM-SERVICEÄ£¿éÖнøÐÐʵÏÖ£º
import com.alibaba.dubbo.config.annotation.Service;
/**
* Function:
* @author chenjiec
* Date: 2017/4/4 ÏÂÎç9:51
* @since JDK 1.7
*/
@Service
public class UserInfoApiImpl implements UserInfoApi
{
private static Logger logger = LoggerFactory.getLogger (UserInfoApiImpl.class);
@Autowired
private T_userService t_userService ;
/**
* »ñÈ¡Óû§ÐÅÏ¢
*
* @param userId
* @return
* @throws Exception
*/
@Override
public UserInfoRsp getUserInfo (int userId) throws
Exception {
logger.info ("Óû§²éѯId="+userId);
//·µ»Ø¶ÔÏó
UserInfoRsp userInfoRsp = new UserInfoRsp()
;
T_user t_user = t_userService.selectByPrimaryKey(userId)
;
//¹¹½¨
buildUserInfoRsp(userInfoRsp,t_user) ;
return userInfoRsp;
}
/**
* ¹¹½¨·µ»Ø
* @param userInfoRsp
* @param t_user
*/
private void buildUserInfoRsp (UserInfoRsp userInfoRsp,
T_user t_user) {
if (t_user == null){
t_user = new T_user() ;
}
CommonUtil.setLogValueModelToModel (t_user,userInfoRsp);
}
}
|
ÕâЩ¶¼ÊÇͨÓõĴúÂ룬µ«ÖµµÃ×¢ÒâµÄÒ»µãÊÇÕâÀïʹÓõÄdubbo¿ò¼ÜËùÌṩµÄ@service×¢½â¡£×÷ÓÃÊÇÉùÃ÷ÐèÒª±©Â¶µÄ·þÎñ½Ó¿Ú¡£
ÔÙÖ®ºó¾ÍÊǼ¸¸ödubboÏà¹ØµÄÅäÖÃÎļþÁË¡£
Õâ¸öÅäÖÃɨÃè×¢½â°üµÄλÖã¬Ò»°ãÅäÖõ½½Ó¿ÚʵÏÖ°ü¼´¿É¡£
spring-dubbo-consumer.xml
<dubbo:application
name="ssm-service" owner= "crossoverJie"
organization="ssm-crossoverJie" logger= "slf4j"/>
<dubbo:registry id= "dubbo-registry"
address="zookeeper://192.168.0.188:2181"
file="/tmp/dubbo.cachr" />
<dubbo:monitor protocol="registry"
/>
<dubbo:protocol name= "dubbo"
port="20880" />
<dubbo:provider timeout= "15000"
retries="0" delay="-1" />
<dubbo:consumer check= "false"
timeout="15000" /> |
Æäʵ¾ÍÊÇÅäÖÃÎÒÃÇ·þÎñ×¢²áµÄzkµØÖ·£¬ÒÔ¼°·þÎñÃû³Æ¡¢³¬Ê±Ê±¼äµÈÅäÖá£
spring-dubbo-provider.xml
ubbo:annotation
package= "com.crossoverJie.api.impl"
/> |
Õâ¸öÅäÖÃɨÃè×¢½â°üµÄλÖã¬Ò»°ãÅäÖõ½½Ó¿ÚʵÏÖ°ü¼´¿É¡£
pring-dubbo-consumer.xml
Õâ¸öÊÇÏû·ÑÕßÅäÖÃÏ±íÃ÷ÎÒÃÇÐèÒªÒÀÀµµÄÆäËûÓ¦Óá£
ÕâÀïÎÒÃÇÔÚSSM-BOOTÏîÄ¿ÖнøÐÐÅäÖãº
<dubbo:reference
id="userInfoApi"
interface=" com.crossoverJie.api.UserInfoApi"
/>
|
Ö±½Ó¾ÍÊÇÅäÖõĸղÅÎÒÃÇÌṩµÄÄǸöÓû§²éѯµÄ½Ó¿Ú£¬ÕâÑùµ±ÎÒÃÇ×Ô¼ºµÄÄÚ²¿ÏîÄ¿ÐèҪʹÓõ½Õâ¸ö·þÎñÖ»ÐèÒªÒÀÀµSSM-BOOT¼´¿É£¬²»ÐèÒªµ¥¶ÀµÄÔÙÈ¥ÅäÖÃconsumer¡£Õâ¸öÎÒÓÐÔÚÉÏһƪSSM(Ê®)
ÏîÄ¿ÖØ¹¹-»¥ÁªÍøÏîÄ¿µÄMaven½á¹¹ÖÐÒ²ÓÐÌáµ½¡£
°²×°¹ÜÀí¿ØÖÆÌ¨
»¹ÓÐÒ»¸öÐèÒª×öµÄ¾ÍÊǰ²×°¹ÜÀí¿ØÖÆÌ¨£¬ÕâÀï¿ÉÒÔ¿´µ½ÎÒÃÇÓжàÉÙ·þÎñ¡¢µ÷ÓÃÇé¿öÊÇÔõôÑùµÈ×÷Óá£
ÕâÀïÎÒÃÇ¿ÉÒÔ½«dubboµÄ¹Ù·½Ô´ÂëÏÂÔØÏÂÀ´£¬¶ÔÆäÖеÄdubbo-adminÄ£¿é½øÐдò°ü£¬½«Éú³ÉµÄWAR°ü·Åµ½TomcatÖÐÔËÐÐÆðÀ´¼´¿É¡£
µ«ÊÇÐèҪעÒâÒ»µãµÄÊÇ£º
ÐèÒª½«ÆäÖеÄdubbo.propertiesµÄzkµØÖ·ÐÞ¸ÄΪ×Ô¼ºµÄ¼´¿É¡£
dubbo.registry.address= zookeeper://127.0.0.1:2181
dubbo.admin.root.password= root
dubbo.admin.guest.password= guest |
µ½Ê±ºòµÇ½µÄ»°Ê¹ÓÃroot£¬ÃÜÂëÒ²ÊÇroot¡£
ʹÓÃguest£¬ÃÜÂëÒ²ÊÇguest¡£
µÇ½½çÃæÈçÏÂͼ£º

ÆäÖÐÎÒÃÇ¿ÉÒÔ¿´µ½ÓÐÁ½¸ö·þÎñÒÔ¼°×¢²áÉÏÈ¥ÁË£¬µ«ÊÇûÓÐÏû·ÑÕß¡£
Ïû·Ñ·þÎñ
ΪÁËÄܹ»¸üÖ±¹ÛµÄÌåÑéµ½Ïû·Ñ·þÎñ£¬ÎÒн¨ÁËÒ»¸öÏîÄ¿
ÆäÖÐÔÚSSM-CONSUMER-APIÖÐÎÒÒ²¶¨ÒåÁËÒ»¸ö½Ó¿Ú£º
/**
* Function:н×ÊAPI
* @author chenjiec
* Date: 2017/4/4 ÏÂÎç9:46
* @since JDK 1.7
*/
public interface SalaryInfoApi {
/**
* »ñȡн×Ê
* @param userId
* @return
* @throws Exception
*/
public SalaryInfoRsp getSalaryInfo (int userId)
throws Exception;
} |
ÒòΪ×÷ΪÏû·ÑÕßµÄͬʱÎÒÃÇÒ²¶ÔÍâÌṩÁËÒ»¸ö»ñȡн×ʵÄÒ»¸ö·þÎñ¡£
ÔÚSSM-CONSUMER-SERVICEÄ£¿éÖнøÐÐÁËʵÏÖ£º
/**
* Function:
* @author chenjiec
* Date: 2017/4/4 ÏÂÎç9:51
* @since JDK 1.7
*/
@Service
public class SalaryInfoApiImpl implements SalaryInfoApi
{
private static Logger logger = LoggerFactory.getLogger(SalaryInfoApiImpl.class);
@Autowired
UserInfoApi userInfoApi ;
/**
* »ñÈ¡Óû§ÐÅÏ¢
*
* @param userId
* @return
* @throws Exception
*/
@Override
public SalaryInfoRsp getSalaryInfo (int userId)
throws Exception {
logger.info ("н×ʲéѯId="+userId);
//·µ»Ø¶ÔÏó
SalaryInfoRsp salaryInfoRsp = new SalaryInfoRsp()
;
//µ÷ÓÃÔ¶³Ì·þÎñ
UserInfoRsp userInfo = userInfoApi.getUserInfo(userId);
salaryInfoRsp.setUsername (userInfo.getUserName());
return salaryInfoRsp;
}
}
|
ÆäÖоͿÉÒÔÖ±½ÓʹÓÃuserInfoApiµ÷ÓÃ֮ǰµÄ¸öÈËÐÅÏ¢·þÎñ¡£
ÔÙµ÷ÓÃ֮ǰÐèҪעÒâµÄÓеãÊÇ£¬ÎÒÃÇÖ»ÐèÒªÒÀÀµSSM-BOOTÕâ¸öÄ£¿é¼´¿É½øÐе÷Óã¬ÒòΪSSM-BOOTÄ£¿éÒѾΪÎÒÃÇÅäÖÃÁËÏû·ÑÕßÖ®ÀàµÄ²Ù×÷ÁË£º
<dependency>
<groupId>com.crossoverJie</groupId>
<artifactId>SSM-BOOT</artifactId>
</dependency>
|
»¹ÓÐÒ»µãÊÇÔÚÅäÖÃSSM-BOOTÖеÄspring-dubbo-cosumer.xmlÅäÖÃÎļþµÄʱºò£¬Â·¾¶ÒªºÍÎÒÃdzõʼ»¯springÅäÖÃÎļþʱµÄ·¾¶Ò»Ö£º

<!-- SpringºÍmybatisµÄÅäÖÃÎļþ -->
<context-param>
<param-name> contextConfigLocation </param-name>
<param-value> classpath*:spring/*.xml </param-value>
</context-param>
|
½ÓÏÂÀ´Åܸöµ¥²âÊÔÒ»ÏÂÄÜ·ñµ÷ͨ£º
/**
* Function:
*
* @author chenjiec
* Date: 2017/4/5 ÏÂÎç10:41
* @since JDK 1.7
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:/spring/*.xml"
})
public class SalaryInfoApiImplTest {
@Autowired
private SalaryInfoApi salaryInfoApi ;
@Test
public void getSalaryInfo() throws Exception
{
SalaryInfoRsp salaryInfo = salaryInfoApi.getSalaryInfo(1);
System.out.println (JSON.toJSONString(salaryInfo));
}
} |

Ïû·ÑÕß

ÌṩÕß
¿ÉÒÔ¿´µ½È·ÊµÊǵ÷Óóɹ¦Á˵ġ£
½ÓÏÂÀ´½«Ïû·ÑÕßÏîĿҲͬʱÆô¶¯ÔÚÀ´¹Û²ì¹ÜÀí¿ØÖÆÌ¨ÓÐʲô²»Ò»Ñù£º

»á¿´µ½¶àÁËÒ»¸öÏû·ÑÕßËùÌṩµÄ·þÎñcom.crossoverjie.consumer.api.SalaryInfoApi,ͬʱ
com.crossoverJie.api.UserInfoApi·þÎñÒѾÕý³££¬ËµÃ÷ÒѾÓÐÏû·ÑÕßÁË¡£

µã½øÈ¥±ã¿É²é¿´¾ßÌåµÄÏû·ÑÕß¡£
×ܽá
ÕâÑùÒ»¸ö»ùÓÚdubboµÄ·Ö²¼Ê½·þÎñÒѾ½²µÄ²î²»¶àÁË£¬ÔÚʵ¼ÊµÄ¿ª·¢ÖÐÎÒÃDZã»á¿ª·¢Ò»¸ö´óϵͳÖеÄijһ¸ö×ÓÓ¦Óã¬ÕâÑù¾ÍËãÒ»¸ö×ÓÓ¦ÓóöÎÊÌâÁËÒ²²»»áÓ°Ïìµ½Õû¸ö´óµÄÏîÄ¿¡£
ÔÙÌáÒ»µã£º
ÔÚʵ¼ÊµÄÉú²ú»·¾³Ò»°ãͬһ¸ö·þÎñÎÒÃǶ¼»áÓÐÒ»¸ömaster,slaveµÄÖ÷´Ó·þÎñ£¬ÕâÑùÔÚÉÏÏߵĹý³ÌÖв»ÖÁÓÚÕû¸öÓ¦ÓóöÏÖÎÞ·¨Ê¹ÓõÄÞÏÞÎÇé¿ö¡£
̸µ½ÁËSOAµÄºÃ´¦£¬ÄÇô×ÔȻҲÓÐÏà¶ÔÓÚ´«Í³Ä£Ê½µÄ²»·½±ãÖ®´¦£º
²ð·ÖÒ»¸ö´óµÄÏîĿΪ³É°ÙÉÏǧµÄ×ÓÓ¦ÓþͲ»¿ÉÄÜÊÖ¶¯ÉÏÏßÁË£¬¼´ÐèÒª×Ô¶¯»¯µÄ²¿ÊðÉÏÏߣ¬ÈçJenkins¡£
»¹ÓÐÒ»¸öÐèÒª×öµ½µÄ¾ÍÊÇ¼à¿Ø£¬ÐèÒªÒ»¸öµ¥¶ÀµÄ¼à¿ØÆ½Ì¨À´°ïÎÒÃÇʵʱ²é¿´¸÷¸ö·þÎñµÄÔËÐÐÇé¿öÒÔ±ãÓÚ¼°Ê±¶¨Î»ºÍ½â¾öÎÊÌâ¡£
ÈÕÖ¾²é¿´·ÖÎö£¬²ð·ÖÖ®ºó²»¿ÉÄÜÔÙȥÿ̨·þÎñÆ÷Éϲ鿴ÈÕÖ¾£¬ÐèÒªÒ»¸öµ¥¶ÀµÄÈÕÖ¾²é¿´·ÖÎö¹¤¾ßÈçelk¡£
ÒÔÉϾÍÊÇÎÒÀí½âµÄ£¬ÈçÓвî´í»¶ÓÖ¸Õý¡£
ÏîÄ¿µØÖ·
|