天天看點

springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例

一、注冊中心-zookeeper

1.zookeeper

zookeeper可以在分布式項目中承擔以下幾個功能:

1)注冊中心

2)存儲資料: 分布式鎖

3)觀察者模式:做到多個分布式伺服器之間的資料同步

2.如何搭建zookeeper

要麼使用docker搭建,要麼使用原生的方式搭建。

1)在虛拟機上安裝jdk

  1. 上傳jdk的壓縮包到虛拟機的 /usr/local/java檔案夾内
  2. 解壓縮

tar -zxvf jdk.....tar.gz

  1. 配置環境變量

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

  1. 儲存并退出

:wq

  1. 讓配置生效

source /etc/profile

2)安裝Zookeeper

  1. 上傳壓縮包到linux
  2. 解壓縮

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

  1. 如何啟動zk

./zkServer.sh start

  1. 如何檢視zk狀态

./zkServer.sh status

  1. 如何關閉zk

./zkServer.sh stop

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

相關概念:

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

1.建立父工程

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

接口項目取消父依賴

springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例
springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例

在項目中建立具體的接口

springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例
springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例

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

springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例
springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例

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

springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例
springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例

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

1)建立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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"

><!--配置應用名稱-->

<

dubbo:application name="product-service-provider"

/><!--配置注冊中心的位址-->

<

dubbo:registry address="zookeeper://10.31.163.100:2181"

/><!--配置目前服務在dubbo中的協定端口-->

<

dubbo:protocol port="20880"

/><!--配置接口-->

<

dubbo:service inter ref="productService"

/><!--配置接口的實作類-->

<

bean id="productService" class="com.qf.product.service.impl.ProductServiceImpl"

/>

</

beans

>

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();

  

    }

}
           

當看到這個結果,就表示服務釋出成功

springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例
springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例

5.建立服務消費者項目

1)引入依賴

<!--引入dubbo的依賴-->

<

dependency

>

<

groupId

>com.alibaba</

groupId

>

<

artifactId

>dubbo</

artifactId

>

<

version

>2.5.8</

version

>

</

dependency

><!-- zookeeper用戶端依賴 -->

<

dependency

>

<

groupId

>com.github.sgroschupf</

groupId

>

<

artifactId

>zkclient</

artifactId

>

<

version

>0.1</

version

>

</

dependency

>

<

dependency

>

<

groupId

>com.qf</

groupId

>

<

artifactId

>my-dubbo-product-api</

artifactId

>

<

version

>1.0.0-SNAPSHOT</

version

>

</

dependency

>

2)編寫配置檔案

<?

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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"

><!--配置消費者應用的名字-->

<

dubbo:application name="product-consumer"

/><!--配置注冊中心的位址-->

<

dubbo:registry address="zookeeper://10.31.163.100:2181"

/><!--配置要使用的接口所在的路徑-->

<

dubbo:reference inter id="productService"

/>

</

beans

>

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引入包_基于dubbo和zookeeper的微服務實作案例
springboot dubbo引入包_基于dubbo和zookeeper的微服務實作案例

三、在Springboot項目中使用dubbo

1.方式一: 基于XML的整合方式

1)建立springboot的服務提供者項目

(1)引入依賴

<

dependency

>

<

groupId

>com.alibaba.boot</

groupId

>

<

artifactId

>dubbo-spring-boot-starter</

artifactId

>

<

version

>0.2.0</

version

>

</

dependency

>

(2)将xml配置檔案放進resources中

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

2)建立springboot的服務消費者項目

(1)引入依賴

<

dependency

>

<

groupId

>com.alibaba.boot</

groupId

>

<

artifactId

>dubbo-spring-boot-starter</

artifactId

>

<

version

>0.2.0</

version

>

</

dependency

>

(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