真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)

本篇內(nèi)容介紹了“基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站主營共青城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā),共青城h5微信小程序開發(fā)搭建,共青城網(wǎng)站營銷推廣歡迎共青城等地區(qū)企業(yè)咨詢

前言

現(xiàn)在越來越多的互聯(lián)網(wǎng)公司還是將自己公司的項目進(jìn)行服務(wù)化,這確實(shí)是今后項目開發(fā)的一個趨勢,就這個點(diǎn)再憑借之前的 SSM 項目來讓第一次接觸的同學(xué)能快速上手。

淺談分布式架構(gòu)

分布式架構(gòu)單看這個名字給人的感覺就是高逼格,但其實(shí)從歷史的角度來分析一下就比較明了了。

我們拿一個電商系統(tǒng)來說:

單系統(tǒng)

基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)
對于一個剛起步的創(chuàng)業(yè)公司項目肯定是追求越快完成功能越好,并且用戶量也不大。

這時候所有的業(yè)務(wù)邏輯都是在一個項目中就可以滿足。

垂直拆分-多應(yīng)用

基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)
當(dāng)業(yè)務(wù)量和用戶量發(fā)展到一定地步的時候,這時一般會將應(yīng)用同時部署到幾臺服務(wù)器上,在用戶訪問的時候使用Nginx進(jìn)行反向代理和簡單的負(fù)載均衡

SOA服務(wù)化

當(dāng)整個系統(tǒng)以及發(fā)展的足夠大的時候,比如一個電商系統(tǒng)中存在有:

  • 用戶系統(tǒng)

  • 訂單系統(tǒng)

  • 支付系統(tǒng)

  • 物流系統(tǒng)

等系統(tǒng)。
如果每次修改了其中一個系統(tǒng)就要重新發(fā)布上線的話那么耦合就太嚴(yán)重了。

所以需要將整個項目拆分成若干個獨(dú)立的應(yīng)用,可以進(jìn)行獨(dú)立的開發(fā)上線實(shí)現(xiàn)快速迭代。

基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)

如上圖所示每個應(yīng)用之間相互獨(dú)立,每個應(yīng)用可以消費(fèi)其他應(yīng)用暴露出來的服務(wù),同時也對外提供服務(wù)。

從架構(gòu)的層面簡單的理解了,接下來看看如何編碼實(shí)現(xiàn)。

基于dubbo的實(shí)現(xiàn)

dubbo應(yīng)該算是國內(nèi)使用最多的分布式服務(wù)框架,基于此來實(shí)現(xiàn)對新入門的同學(xué)應(yīng)該很有幫助。

其中有涉及到安裝dubbo服務(wù)的注冊中心zookeeper等相關(guān)知識點(diǎn)可以自行查看官方文檔,這里就不單獨(dú)講了。

對外提供服務(wù)

首先第一步需要在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模塊中進(jìn)行實(shí)現(xiàn):

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) ; //構(gòu)建 buildUserInfoRsp(userInfoRsp,t_user) ; return userInfoRsp;
    } /**
     * 構(gòu)建返回
     * @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);
    }
}

這些都是通用的代碼,但值得注意的一點(diǎn)是這里使用的dubbo框架所提供的@service注解。作用是聲明需要暴露的服務(wù)接口。

再之后就是幾個dubbo相關(guān)的配置文件了。

spring-dubbo-config.xml

      

其實(shí)就是配置我們服務(wù)注冊的zk地址,以及服務(wù)名稱、超時時間等配置。

spring-dubbo-provider.xml

這個配置掃描注解包的位置,一般配置到接口實(shí)現(xiàn)包即可。

spring-dubbo-consumer.xml

這個是消費(fèi)者配置項,表明我們需要依賴的其他應(yīng)用。
這里我們在SSM-BOOT項目中進(jìn)行配置:

直接就是配置的剛才我們提供的那個用戶查詢的接口,這樣當(dāng)我們自己的內(nèi)部項目需要使用到這個服務(wù)只需要依賴SSM-BOOT即可,不需要單獨(dú)的再去配置consumer。這個我有在上一篇SSM(十) 項目重構(gòu)-互聯(lián)網(wǎng)項目的Maven結(jié)構(gòu)中也有提到。

安裝管理控制臺

還有一個需要做的就是安裝管理控制臺,這里可以看到我們有多少服務(wù)、調(diào)用情況是怎么樣等作用。

這里我們可以將dubbo的官方源碼下載下來,對其中的dubbo-admin模塊進(jìn)行打包,將生成的WAR包放到Tomcat中運(yùn)行起來即可。

但是需要注意一點(diǎn)的是:
需要將其中的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。

登陸界面如下圖:
基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)

其中我們可以看到有兩個服務(wù)以及注冊上去了,但是沒有消費(fèi)者。

消費(fèi)服務(wù)

為了能夠更直觀的體驗(yàn)到消費(fèi)服務(wù),我新建了一個項目:
https://github.com/crossoverJie/SSM-CONSUMER。

其中在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;
}

因?yàn)樽鳛橄M(fèi)者的同時我們也對外提供了一個獲取薪資的一個服務(wù)。

在SSM-CONSUMER-SERVICE模塊中進(jìn)行了實(shí)現(xiàn):

/**
 * 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() ; //調(diào)用遠(yuǎn)程服務(wù) UserInfoRsp userInfo = userInfoApi.getUserInfo(userId);
        
        salaryInfoRsp.setUsername(userInfo.getUserName()); return salaryInfoRsp;
    }


}

其中就可以直接使用userInfoApi調(diào)用之前的個人信息服務(wù)。

再調(diào)用之前需要注意的有點(diǎn)是,我們只需要依賴SSM-BOOT這個模塊即可進(jìn)行調(diào)用,因?yàn)镾SM-BOOT模塊已經(jīng)為我們配置了消費(fèi)者之類的操作了:

  com.crossoverJie SSM-BOOT 

還有一點(diǎn)是在配置SSM-BOOT中的spring-dubbo-cosumer.xml配置文件的時候,路徑要和我們初始化spring配置文件時的路徑一致:
基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)

   contextConfigLocation classpath*:spring/*.xml 

接下來跑個單測試一下能否調(diào)通:

/**
 * 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));
    }

}

基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)
消費(fèi)者

基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)
提供者
可以看到確實(shí)是調(diào)用成功了的。

接下來將消費(fèi)者項目也同時啟動在來觀察管理控制臺有什么不一樣:
基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)
會看到多了一個消費(fèi)者所提供的服務(wù)com.crossoverjie.consumer.api.SalaryInfoApi,同時
com.crossoverJie.api.UserInfoApi服務(wù)已經(jīng)正常,說明已經(jīng)有消費(fèi)者了。

基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)
點(diǎn)進(jìn)去便可查看具體的消費(fèi)者。

“基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)頁名稱:基于dubbo的分布式架構(gòu)怎么實(shí)現(xiàn)
文章位置:http://weahome.cn/article/jjjihd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部