dubbo實戰01-入門案例

學習一門新技術的時候,我們不僅要學會怎樣運用這門技術,同時還必須明白這項技術是爲了解決什麼樣的問題而產生的,真正做到知其然並知其所以然。

  • dubbo 是什麼
Dubbo是阿里巴巴公司開源的一個高性能優秀的服務框架,
使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,
可以和Spring框架無縫集成。

  • dubbo的作用
Dubbo是一款高性能、輕量級的開源Java RPC框架,
它提供了三大核心能力:面向接口的遠程方法調用,
智能容錯和負載均衡,以及服務自動註冊和發現。
  • 準備工作
1、選擇dubbo的註冊中心:目前主流的幾種註冊中心主要有zookeeper、redis、Multicast、Simple
(本案列中選擇zookeeper充當註冊中心,版本爲3.4.13)
2、dubbo的版本爲2.6.2
3、jdk版本爲jdk8
4、maven版本爲3.5.4
5、idea爲開發工具
  • 工程的架構
dubbo-project
	|dubbo-provider
		|src
		  |main
		    |java
		      |com.kkcl.gmall
		        |service
		          |impl
		          	UserServiceImpl.java
		      |MainApplication.java
		    |resources
		      |provider.xml		
	|dubbo-consumer
	  |src
		  |main
		    |java
		      |com.kkcl.gmall
		        |service
		          |impl
		          	OrderServiceImpl.java
		      |MainApplication.java
		    |resources
		      |consumer.xml		
	|gmall-interface
	    |src
		  |main
		    |java
		      |com.kkcl.gmall
		        |bean
		          |UserAddress.java
		        |service
		          |UserService.java
		          |OrderService.java
  • 工程的搭建
本示例工程主要分爲以下幾個module:dubob-project爲父工程;
gmall-interface、dubbo-provider、dubbo-consumer爲子module,
gmall-interface主要的主要是集成接口與實體類供dubbo-provider和dubbo-consumer調用,dubbo-provider充當生產者的角色,爲消費者提供服務,dubbo-consumer充當消費者的角色,
主要消費生產者提供的服務。
  • 實戰案列
UserAddress.java
public class UserAddress implements Serializable {
	
	private Integer id;
    private String userAddress; //用戶地址
    private String userId; //用戶id
    private String consignee; //收貨人
    private String phoneNum; //電話號碼
    private String isDefault; //是否爲默認地址    Y-是     N-否
    constructor...
    getter and setter....
}

UserService.java
public interface UserService {
	public List<UserAddress> getUserAddressList(String userId);
}

UserServiceImpl.java
public class UserServiceImpl implements UserService {
    @Override
    public List<UserAddress> getUserAddressList(String userId) {
        UserAddress address1 = new UserAddress(1, "北京市", "1", "李老師", "010-56253898", "Y");
        UserAddress address2 = new UserAddress(2, "西安市)", "1", "王老師", "010-56253809", "N");
        return Arrays.asList(address1,address2);
    }
}

Order.service
public interface OrderService {
	public List<UserAddress> initOrder(String userId);
}

OrderServiceImpl.java
@Service
public class OrderServiceImpl implements OrderService {
    @Autowired
    UserService userService;
    @Override
    public List<UserAddress> initOrder(String userId) {
        // TODO Auto-generated method stub
        System.out.println("用戶id:"+userId);
        //1、查詢用戶的收貨地址
        List<UserAddress> addressList = userService.getUserAddressList(userId);
        for (UserAddress userAddress : addressList) {
            System.out.println(userAddress.getUserAddress());
        }
        return addressList;
    }
}

provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!--指定當前服務或者應用的名字    -->
    <dubbo:application name="dubbo-provider"/>
    <!--指定註冊中心的位置(以下兩種方式選擇其中的一種即可)    -->
    <!--<dubbo:registry address="zookeeper://127.0.0.1:2181"/>-->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
    <!---指定通信的規則(通信協議,通信端口)-->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!--暴露的服務-->
    <dubbo:service interface="com.kkcl.gmall.service.UserService" ref="userServiceImpl"/>
    <!--服務實現-->
    <bean id="userServiceImpl" class="com.kkcl.gmall.service.impl.UserServiceImpl"/>
</beans>

consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.kkcl.gmall.service.impl"/>
    <!--應用的名稱-->
    <dubbo:application name="dubbo-consumer"/>
    <!--註冊中心-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <!--聲明需要調用的遠程服務的名稱:生成遠程服務代理-->
    <dubbo:reference interface="com.kkcl.gmall.service.UserService" id="userService"/>
</beans>
MainApplication.java
public class MainApplication {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml或者consumer.xml");
        ioc.start();
        System.in.read();
    }
}
  • 項目部署
1、到zookeeper官網下載zookeeper,這裏下載的版本爲3.4.13,下載完成後到zookeeper的conf目錄下將zoo_simple.cfg複製重命名爲zoo.cfg並配置對應的data存儲的目錄
dataDir=../data
2、分別啓動dubbo-provider中的MainApplication.java
3、進入到dubbo的admin後臺服務管理頁面查看服務的啓用情況
  • 源碼地址
https://github.com/kkcl/kkcl-learning-example/tree/master/dubbo-project
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章