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


1、註冊中心-zookeeper

1.zookeeper

zookeeper能夠在分佈式項目中承擔如下幾個功能:java

1)註冊中心linux

2)存儲數據: 分佈式鎖git

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


2.如何搭建zookeeper

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

1)在虛擬機上安裝jdk

  1. 上傳jdk的壓縮包到虛擬機的 /usr/local/java文件夾內
  2. 解壓縮

tar -zxvf jdk.....tar.gzdocker

  1. 配置環境變量

vim /etc/profilevim

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

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

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

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


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


相關概念:

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


1.建立父工程

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


接口項目取消父依賴




在項目中建立具體的接口


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


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


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 interface="com.qf.service.product.api.IProductService" 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();

  

    }

}複製代碼


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


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 interface="com.qf.service.product.api.IProductService" 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);


}



小結:



3、在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

相關文章
相關標籤/搜索