基於dubbo和zookeeper的微服務實現案例

一、註冊中心-zookeeper
1.zookeeper
         zookeeper可以在分佈式項目中承擔以下幾個功能:

                   1)註冊中心

                   2)存儲數據: 分佈式鎖

                   3)觀察者模式:做到多個分佈式服務器之間的數據同步

2.如何搭建zookeeper
         要麼使用docker搭建,要麼使用原生的方式搭建。

1)在虛擬機上安裝jdk
上傳jdk的壓縮包到虛擬機的 /usr/local/java文件夾內
解壓縮
         tar -zxvf jdk.....tar.gz

配置環境變量
         vim /etc/profile

         複製以下內容到該文件的末尾

        

export JAVA_HOME=/usr/local/java/jdk1.8.0_191

export JRE_HOME=/usr/local/java/jdk1.8.0_191/jre

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

保存並退出
                   :wq

讓配置生效
                   source /etc/profile

        

2)安裝Zookeeper
上傳壓縮包到linux
解壓縮

3)獲得zoo.cfg配置文件
         在zookeeper/conf文件夾內,修改zoo_sample.cfg中的內容後並重命名成zoo.cfg

4)如何使用zookeeper(做註冊中心)
         注意: 要使用linux中的命令,必須兩種方式: 要麼./zkServer.sh  要麼是完整路徑:

/usr/local/zookeeper/zookeeper-3.4.14/bin/zkServer.sh

        

如何啓動zk
         ./zkServer.sh start

如何查看zk狀態
         ./zkServer.sh status

如何關閉zk
         ./zkServer.sh stop

二、使用Dubbo來實現服務間的調用

         相關概念:

                   1) 工程:  包含多個項目的一個統稱

      1.創建父工程
      2.在父工程中創建一個接口項目

接口項目取消父依賴

在項目中創建具體的接口

3.在父工程中創建服務的提供者

編寫實現類,實現接口,並重寫方法,注意要把api的項目依賴進來。

4.在服務提供者項目中使用dubbo

1)創建xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
       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://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

   
   

   
   

   
   

   
   

   
   

2)編寫單元測試,引入配置文件,並啓動dubbo
注意:前提是要啓動zk註冊中心

public class TestServiceProvider {

    @Test

    public void testService() throws IOException {

       

        ClassPathXmlApplicationContext context  =

                new ClassPathXmlApplicationContext(new String[]{"classpath:provider.xml"});

        //將服務提交給dubbo的container,然後註冊到註冊中心上

        context.start();

        System.out.println("商品服務開始提供服務");

        System.out.println("按任意鍵停止");

        //讓服務在收到任意輸入內容之前不會結束

        System.in.read();

    }

}

當看到這個結果,就表示服務發佈成功

5.創建服務消費者項目
1)引入依賴


  com.alibaba
  dubbo
  2.5.8



  com.github.sgroschupf
  zkclient
  0.1


  com.qf
  my-dubbo-product-api
  1.0.0-SNAPSHOT

2)編寫配置文件
<?xml version="1.0" encoding="UTF-8"?>
       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://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

   
   

   
   

   
   

3)在單元測試中去調用service
@Test
public void testInvoke(){

    ClassPathXmlApplicationContext context =
            new ClassPathXmlApplicationContext(new String[]{"classpath:consumer.xml"});

    IProductService productService = (IProductService) context.getBean("productService");

    String s = productService.showProd();
    System.out.println(s);

}

小結:

三、在Springboot項目中使用dubbo
1.方式一: 基於XML的整合方式
1)創建springboot的服務提供者項目
(1)引入依賴


    com.alibaba.boot
    dubbo-spring-boot-starter
    0.2.0

(2)將xml配置文件放進resources中

(3)在springboot的入口類上打上註解:@ImportResource("classpath:provider.xml")

2)創建springboot的服務消費者項目
(1)引入依賴


    com.alibaba.boot
    dubbo-spring-boot-starter
    0.2.0

(2)將xml配置文件放進resources中

(3)在springboot的入口類上打上註解:@ImportResource("classpath:consumer.xml")

(4)使用autowired將接口的實現類的對象自動注入進來,相當於是通過dubbo(zk)來提供服務的提供者的類。

@SpringBootTest
class MySpringBootProductConsumerApplicationTests {

    @Autowired
    private IProductService productService;

    @Test
    void contextLoads() {

        System.out.println(productService.showProduct());

    }

}

2.方式二:基於註解的整合方式

1)創建服務提供者項目
(1)引入依賴

(2)編寫application.yml文件,加入以下配置(本來在xml中的配置將寫在yml中)

server:
  port: 8081
dubbo:
  application:
    name: product-service-provider
  registry:
    address: zookeeper://10.31.163.100:2181
  protocol:
    port: 20884

(3)編寫服務提供者類並實現接口,並在接口上打上註解:

         @Component

         @Service <==import com.alibaba.dubbo.config.annotation.Service;

(4)在入口類上打上註解

         @EnableDubbo

2)創建服務消費者項目
(1)引入依賴

(2)編寫application.yml文件,加入以下配置(本來在xml中的配置將寫在yml中)

server:
  port: 8082
dubbo:
  application:
    name: product-consumer
  registry:
    address: zookeeper://10.31.163.100:2181

(3)在需要用到服務提供者類的時候,使用@Reference註解

來自於com.alibaba.dubbo.config.annotation.Reference;
@SpringBootTest
class MySpringBootAnnotationProductConsumerApplicationTests {

    @Reference
    private IProductService productService;

    @Test
    void contextLoads() {

        System.out.println(productService.showProduct());

    }

}

(4)在入口類上打上註解

         @EnableDubbo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章