1. 程式人生 > >SpringBoot+dubbo 註解方式實現入門

SpringBoot+dubbo 註解方式實現入門

1、前期準備工作,在 zk官網 下載需要的zk壓縮檔案,我下載的是3.4.9版本,在windows系統上安裝,將檔案解壓到指定檔案下面,在confg目錄下面有一個zoo_sample.cfg檔案,我們拷貝一份,修改檔名稱為zoo.cfg

修改zoo.cfg檔案當中配置資訊,

在bin目錄下,直接使用zkServer.cmd啟動,預設使用埠是2181

接下來搭建一個maven專案作為provider,provider當中的pom.xml檔案如下,注意這裡引入的不是dubbo的jar包,而是spring-dubbo的jar包。

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test.dubboTest</groupId>
    <artifactId>dubboTest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.7.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>1.0.0</version>
        </dependency>

    </dependencies>


</project>

provider當中的配置檔案如下

#設定當前服務在zk當中的應用名稱,全域性唯一
spring.dubbo.application.name=provider
# 設定zk的服務埠
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#設定採用的服務協議
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
# 設定當前專案當中使用dubbo註解的包路徑
spring.dubbo.scan=com.spring.springboot
server.port=8080

下面是服務的目錄結構

先來看需要的domain物件,需要實現序列化介面

public class City implements Serializable {
    
    private static final long serialVersionUID = 1433444989019131117L;
    private String name;
    private String content;

    public City(String name, String content) {
        this.name = name;
        this.content = content;
    }
    //省略getter,setter方法
}

介面類

public interface CityDubboService {
    City findCityByName(String name);
}

介面實現類,這裡使用的@Service註解是dubbo當中的Service,並不是spring當中的Service註解

@Service(version = "1.0.0")
public class CityDubboServiceImpl implements CityDubboService {
    @Override
    public City findCityByName(String name) {
        return new City("浙江","杭州");
    }
}

關於啟動類

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

以上是provider方需要提供的一些結構程式碼,接下來看consumer方需要的一些介面資訊

注意:city, pom.xml,CityDubboService與上面的都一致,不再重複貼上,下面主要是看配置檔案

application.properties配置檔案

server.port=8081

## Dubbo 服務消費者配置,全域性唯一
spring.dubbo.application.name=consumer
# zk註冊中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#當前專案當中,需要使用dubbo注入的包路徑
spring.dubbo.scan=com.spring.springboot

呼叫具體api介面的實現類

@Component
public class CityDubboConsumerService {
    @Reference(version ="1.0.0")
    CityDubboService cityDubboService;

    public void printCity() {
        String cityName="溫嶺";
        City city = cityDubboService.findCityByName(cityName);
        System.out.println(city.toString());
    }
}

啟動類,加測試類

@SpringBootApplication
public class ClientApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(ClientApplication.class, args);
        CityDubboConsumerService cityService = run.getBean(CityDubboConsumerService.class);
        cityService.printCity();
    }
}

呼叫顯示

上述程式碼均在本地測試成功,在開發環境當中,是需要將api介面,以及domain物件,統一放在一個專案當中管理,在provider和consumer當中使用jar包進行引入。