SpringBoot與Dubbo整合-項目搭建


本章節建立生產者和消費者來演示dubbo的demo

生產者:springboot-dubbo-provider 和 消費者:springboot-dubbo-consumer 工程配置詳解

Apache官方Demo:https://github.com/alibaba/dubbo-spring-boot-starter

阿里巴巴官方Demo:https://github.com/apache/incubator-dubbo-spring-boot-project

 

GitHub 上代碼: https://github.com/JeffLi1993/springboot-learning-example

springboot-dubbo-provider:

1.pom.xml導入依賴 :

pom.xml 中依賴了 spring-boot-starter-dubbo 工程,該項目地址是 https://github.com/teaey/spring-boot-starter-dubbo

<?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>springboot</groupId>
    <artifactId>springboot-dubbo-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-dubbo 服務端:: 整合 Dubbo/ZooKeeper 詳解 SOA 案例</name>
 
    <!-- Spring Boot 啟動父依賴 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>
 
    <properties>
        <dubbo-spring-boot>1.0.0</dubbo-spring-boot>
    </properties>
 
    <dependencies>
 
        <!-- Spring Boot Dubbo 依賴 -->
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>${dubbo-spring-boot}</version>
        </dependency>
 
        <!-- Spring Boot Web 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <!-- Spring Boot Test 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
 
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

2.application.properties 配置

 

server.port=8080
## Dubbo 配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=org.spring.springboot.dubbo

 

這里 ZK 配置的地址和端口,就是上面本機搭建的 ZK 。如果有自己的 ZK 可以修改下面的配置。配置解釋如下:
spring.dubbo.application.name 應用名稱
spring.dubbo.registry.address 注冊中心地址
spring.dubbo.protocol.name 協議名稱
spring.dubbo.protocol.port 協議端口
spring.dubbo.scan dubbo 服務類包目錄
 
3.CityDubboServiceImpl.java 城市業務 Dubbo 服務層實現層類
// 注冊為 Dubbo 服務
@Service(version = "1.0.0")
public class CityDubboServiceImpl implements CityDubboService {
 
    public City findCityByName(String cityName) {
        return new City(1L,2L,"溫嶺","是我的故鄉");
    }
}
@Service 注解標識為 Dubbo 服務,並通過 version 指定了版本號。
 
4.City.java 城市實體類
實體類通過 Dubbo 服務之間 RPC 調用,則需要實現序列化接口。最好指定下 serialVersionUID 值。

springboot-dubbo-consumer:

1.application.properties 配置

## 避免和 server 工程端口沖突
server.port=8081
 
## Dubbo 服務消費者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=org.spring.springboot.dubbo

2.CityDubboConsumerService.java 城市 Dubbo 服務消費者

@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());
    }
} 
@Reference(version = “1.0.0”) 通過該注解,訂閱該接口版本為 1.0.0 的 Dubbo 服務。

這里將 CityDubboConsumerService 注入 Spring 容器,是為了更方便的獲取該 Bean,然后驗證這個 Dubbo 調用是否成功。

3.ClientApplication.java 客戶端啟動類

@SpringBootApplication
public class ClientApplication {
 
    public static void main(String[] args) {
        // 程序啟動入口
        // 啟動嵌入式的 Tomcat 並初始化 Spring 環境及其各 Spring 組件
        ConfigurableApplicationContext run = SpringApplication.run(ClientApplication.class, args);
        CityDubboConsumerService cityService = run.getBean(CityDubboConsumerService.class);
        cityService.printCity();
    }
}

解釋下這段邏輯,就是啟動后從 Bean 容器中獲取城市 Dubbo 服務消費者 Bean。然后調用該 Bean 方法去驗證 Dubbo 調用是否成功。

先啟動生產者provider,然后啟動消費者consumer,控制台打印數據,則調用成功!

 本文參考來自:https://www.cnblogs.com/Alandre/p/6490142.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM