SpringBoot+Dubbo實戰demo

前言

搭建一個SpringBoot+Dubbo+zookeeper的demo

完整代碼見:github.com/Caizhenhao/…html

1. 安裝zookeeper環境

搭建 zookeeper 以前要確保當前的服務器已經有 JDK 環境。

我使用的是阿里雲服務器java

注意:若是你也使用的是雲服務器必須配置一個安全組,開放你的zookeeper端口。


1.1 首先下載zookeeper的安裝包

自行去網上下載zookeeper的安裝包後在服務器上解壓

1.2 解壓

tar -zxvf zookeeper-3.4.11.tar.gz複製代碼
解壓完畢以後修改一下解壓以後所得的文件夾名

mv zookeeper-3.4.11 zookeeper複製代碼
刪除 zookeeper 安裝包

rm -rf zookeeper-3.4.11.tar.gz複製代碼

1.3 進入zookeeper目錄,建立data文件夾。

mkdir data複製代碼
進入 data 文件夾 而後執行pwd命令,複製所得的當前目錄位置


1.4 進入/zookeeper/conf目錄下,複製zoo_sample.cfg,命名爲zoo.cfg

cp zoo_sample.cfg zoo.cfg複製代碼

1.5 修改配置文件

使用 vim zoo.cfg 命令修改配置文件

修改配置文件中的 dataDir 屬性:git

dataDir=/usr/local/zookeeper/data複製代碼


1.6 啓動測試

進入 /zookeeper/bin 目錄而後執行下面的命令啓動zookeepergithub

./zkServer.sh start複製代碼
查看當前 zookeeper 狀態

./zkServer.sh status複製代碼


或者運行 netstat -lntup 命令查看網絡狀態,能夠看到 zookeeper 的端口號 2181 已經被佔用
web


到這裏zookeeper的環境就搭建完成了,開始搭建項目

2. 開始搭建項目

項目我這裏採用maven搭建,使用springboot+dubbo+zookeeper

項目分紅三個模塊spring


三個模塊的功能:
  • dubbo-api 服務提供者的接口
  • dubbo-provider 服務提供者
  • dubbo-consumer 服務消費者

關鍵依賴
apache

<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>複製代碼

3. dubbo-api

抽象服務提供者的接口供服務消費者調用vim

package com.czh.provider.dubboprovider.serviceImpl.service;

public interface HelloService {
    String sayHello(String name);
}複製代碼

4. dubbo-provider

主要分爲下面幾步:api

  1. 建立 springboot 項目;
  2. 加入接口的相關依賴 jar 包;
  3. 在 application.properties 配置文件中配置 dubbo 相關信息;
  4. 實現接口類;
  5. 服務提供者啓動類編寫
項目結構:


4.1 dubbo-provider 項目建立

建立一個 SpringBoot 項目,注意勾選上 web 模塊。

4.2 pom 文件引入相關依賴

須要引入接口的相關依賴 jar 包。注意將本項目和 dubbo-api 項目的 dependency 依賴的 groupId 和 artifactId 改爲本身的。

<dependencies>
    <dependency>
        <groupId>com.czh.api</groupId>
        <artifactId>dubbo-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>複製代碼

4.3 在 application.properties 配置文件中配置 dubbo 相關信息

配置很簡單,這主要得益於 dubbo 的@EnableDubbo註解。詳情能夠參考dubbo官方說明 dubbo.apache.org/zh-cn/blog/…

# 配置端口
spring.application.name = dubbo-provider
server.port = 9090

#指定當前服務/應用的名字(一樣的服務名字相同,不要和別的服務同名)
dubbo.application.name = dubbo-provider

demo.service.version = 1.0.0

dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

#指定註冊中心的位置
dubbo.registry.address = zookeeper://ip:2181

#統一設置服務提供方的規則
dubbo.provider.timeout = 1000複製代碼

4.4 實現接口

注意: @Service 註解使用的時 Dubbo 提供的而不是 Spring 提供的。

服務提供者,包含真正的服務實現代碼安全

package com.czh.provider.dubboprovider.serviceImpl;

import com.alibaba.dubbo.config.annotation.Service;
import com.czh.provider.dubboprovider.serviceImpl.service.HelloService;

@Service(version = "${demo.service.version}")
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "Hello " + name + ",This is springboot-dubbo test";
    }
}複製代碼

4.5 服務提供者啓動類編寫

注意:不要忘記加上 @EnableDubbo 註解開啓Dubbo 的自動配置。

package com.czh.provider;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}
複製代碼

5. dubbo-consumer

主要分爲下面幾步:
  1. 建立 springboot 項目;
  2. 加入接口的相關依賴 jar 包;
  3. 在 application.properties 配置文件中配置 dubbo 相關信息;
  4. 服務消費者調用接口編寫
  5. 服務消費者啓動類編寫
項目結構:


前兩步與以前的服務提供者同樣,這裏我直接從第三步開始提及

5.3 在 application.properties 配置文件中配置 dubbo 相關信息

與服務提供者基本一致

spring.application.name = dubbo-consumer
server.port = 9091

#指定當前服務/應用的名字(一樣的服務名字相同,不要和別的服務同名)
dubbo.application.name = dubbo-consumer

demo.service.version = 1.0.0

dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

#指定註冊中心的位置
dubbo.registry.address = zookeeper://ip:2181

#統一設置服務提供方的規則
dubbo.consumer.timeout = 5000複製代碼

5.4 編寫一個簡單的Controller調用遠程服務

package com.czh.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.czh.api.service.HelloService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloConsumerController {
    @Reference(version = "${demo.service.version}")
    private HelloService helloService;

    @RequestMapping("/sayHello/{name}")
    public String sayHello(@PathVariable("name") String name) {
        return helloService.sayHello(name);
    }

}複製代碼

5.5 服務消費者啓動類編寫

package com.czh.consumer;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }

}
複製代碼

6. 測試結果

能夠看到消費者調用服務提供者正常


查看zookeeper下發現有咱們註冊的服務節點


7. 小結

使用springboot+dubbo+zookeeper進行搭建 dubbo 的項目應該說是比較簡單的,官方也有集成Springboot的依賴,這裏就很少說了,實踐出真知~

完整代碼見:github.com/Caizhenhao/…

相關文章
相關標籤/搜索