天天看點

SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4建構你的微服務體系

NACOS注冊中心

  • 從github下載下傳最新版本的nacos
  • 上傳至伺服器并解壓
  • 單機啟動

    sh startup.sh -m standalone

SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4建構你的微服務體系

項目架構

本次案例包含三個元件

  • 公共接口層 dubbo-api
  • 生産者  dubbo-provider
  • 消費者 dubbo-consumer 代碼目錄如下:
SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4建構你的微服務體系

父目錄dubbo-demo

父目錄主要是定義公共元件依賴,版本号,

pom

檔案如下

<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>
    <packaging>pom</packaging>
 
    <modules>
        <module>dubbo-api</module>
        <module>dubbo-provider</module>
        <module>dubbo-consumer</module>
    </modules>
 
    <groupId>com.jianzh5</groupId>
    <artifactId>dubbo-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
 
 
    <properties>
        <java.version>1.8</java.version>
        <netty-all.version>4.0.35.Final</netty-all.version>
        <spring-boot.version>2.1.9.RELEASE</spring-boot.version>
        <dubbo.version>2.7.3</dubbo.version>
        <nacos-client.version>1.1.4</nacos-client.version>
    </properties>
 
 
    <dependencyManagement>
        <dependencies>
            <!--SpringBoot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
 
            <!-- Apache Dubbo  -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
 
            <!-- Dubbo Registry Nacos -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
 
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>${nacos-client.version}</version>
            </dependency>
 
 
            <!-- Dubbo Spring Boot Starter -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
 
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
 
            <!--接口-->
            <dependency>
                <groupId>com.jianzh5</groupId>
                <artifactId>dubbo-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
 
        </dependencies>
    </dependencyManagement>
 
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
 
</project>      

在pom檔案中直接依賴接口,這樣生産者和消費者都可以使用了

接口層dubbo-api定義

pom

<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">
    <parent>
        <artifactId>dubbo-demo</artifactId>
        <groupId>com.jianzh5</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.jianzh5</groupId>
    <artifactId>dubbo-api</artifactId>
    <packaging>jar</packaging>
</project>      

定義真實的接口

/**
 * @author jianzh5
 * @date 2019/11/5 10:45
 */
public interface HelloService {
    String sayHello();
}      

生産者dubbo-provider

<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">
    <parent>
        <artifactId>dubbo-demo</artifactId>
        <groupId>com.jianzh5</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.jianzh5</groupId>
    <artifactId>dubbo-provider</artifactId>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
 
        <!-- Dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
 
        <!-- Dubbo Registry Nacos -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>
 
 
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
 
        <dependency>
            <groupId>com.jianzh5</groupId>
            <artifactId>dubbo-api</artifactId>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>      

配置檔案

application.xml

dubbo.application.name = dubbo-provider
dubbo.registry.address = nacos://192.168.136.129:8848
dubbo.scan.base-packages=com.jianzh5.provider.service.impl
dubbo.protocol.port=20881
dubbo.protocol.name=dubbo      

接口實作

@Service
public class HelloServiceImpl implements HelloService {
 
    public String sayHello() {
        return "歡迎關注微信公衆号:JAVA日知錄";
    }
 
}      

注意這裡的

@service

引用的是

org.apache.dubbo.config.annotation.Service

,不要引用錯了

啟動類

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

需要引入@EnableDubbo注解

消費者dubbo-consumer

<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">
    <parent>
        <artifactId>dubbo-demo</artifactId>
        <groupId>com.jianzh5</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.jianzh5</groupId>
    <artifactId>dubbo-consumer</artifactId>
 
    <dependencies>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <!-- Dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
 
        <!-- Dubbo Registry Nacos -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>
 
 
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
 
        <dependency>
            <groupId>com.jianzh5</groupId>
            <artifactId>dubbo-api</artifactId>
        </dependency>
    </dependencies>
 
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>      

配置檔案application.properties

spring.application.name=dubbo-consumer
dubbo.registry.address = nacos://192.168.136.129:8848
server.port=9090      

消費者

HelloController

/**
 * @author jianzh5
 * @date 2019/11/5 11:29
 */
@RestController
public class HelloController {
 
    @Reference
    private HelloService helloService;
 
    @GetMapping("/sayHello")
    public String sayHello(){
        return helloService.sayHello();
    }
 
}      

使用

@Reference

注解注入

HelloService

接口啟動類

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

項目啟動

  • 啟動生産者 dubbo-provider
  • 啟動消費者 dubbo-consumer
  • 檢視nacos控制台,觀察是否注冊
SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4建構你的微服務體系

通路浏覽器

http://localhost:9090/sayHello

檢視接口傳回