SpringBoot2整合dubbo使用Zookeeper作为注册中心,使用yml配置

创建新项目

  • 我们使用maven的空项目,不用任何模板直接创建


    14200547-13d2a9903a681192.png
    image.png
  • 输入项目信息


    14200547-72da374767e2ee12.png
    image.png
  • idea会自动去掉横线,自己加上


    14200547-6cdd0e9fdf831986.png
    image.png
  • 在项目中新建空Maven的module如下:


    14200547-0d218387507a92d6.png
    image.png
  • 父项目依赖文件:使用dependencyManagement做依赖管理

<?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>io.ilss.dubbo</groupId>
    <artifactId>spring-boot-dubbo-ilss</artifactId>
    <version>1.0</version>
    <modules>
        <module>ilss-provider</module>
        <module>ilss-service</module>
        <module>ilss-consumer</module>
    </modules>
    <packaging>pom</packaging>
    <properties>
        <java.version>1.8</java.version>
        <spring-boot.version>2.0.3.RELEASE</spring-boot.version>
        <dubbo-boot.version>0.2.0</dubbo-boot.version>
        <mybatis-boot.version>2.0.0</mybatis-boot.version>
        <druid.version>1.1.10</druid.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Dubbo -->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo-boot.version}</version>
            </dependency>
            <!-- mybatis -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <!-- dubbo官方提供的repository -->
    <repositories>
        <repository>
            <id>sonatype-nexus-snapshots</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

Provider配置

  • provider的依赖
<?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">
    <parent>
        <artifactId>spring-boot-dubbo-ilss</artifactId>
        <groupId>io.ilss.dubbo</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ilss-provider</artifactId>

    <dependencies>
        <!-- 本地模块依赖 -->
        <dependency>
            <groupId>io.ilss.dubbo</groupId>
            <artifactId>ilss-service</artifactId>
            <version>1.0</version>
        </dependency>

        <!-- 框架依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • provider的yml配置文件
spring:
  application:
    name: ilss-provider
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/xxx?useSSL=false
    username: root
    password: xxx
mybatis:
  mapperLocations: classpath:mapper/*.xml
dubbo:
  registry:
    protocol: zookeeper
    address: 127.0.0.1:2181
    id: registry-1
  protocol:
    port: 20888
    name: dubbo
    id: dubbo
    status: server
  application:
    name: ilss-provider
    id: ilss-provider
  scan:
    basePackages: io.ilss.dubbo.service.impl
  provider:
    version: 1.0
  • provider的启动类
package io.ilss.dubbo;

import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

/**
* className IlssProviderApplication
* description IlssProviderApplication
*
* @author feng
* @version 1.0
* @date 2019-01-30 18:08
*/
@SpringBootApplication
public class IlssProviderApplication {
   public static void main(String[] args) {
       //由于Provider不需要web服务,所以我们使用new SpringApplicationBuilder时web指定NONE
       new SpringApplicationBuilder(IlssProviderApplication.class).web(WebApplicationType.NONE).run(args);
   }
}

Consumer配置

  • consumer依赖
<?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">
    <parent>
        <artifactId>spring-boot-dubbo-ilss</artifactId>
        <groupId>io.ilss.dubbo</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ilss-consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>io.ilss.dubbo</groupId>
            <artifactId>ilss-service</artifactId>
            <version>1.0</version>
        </dependency>

        <!-- 框架依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- dubbo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <!-- boot-web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>
  • consumer的yml配置文件
server:
  port: 8080

dubbo:
  application:
    id: ilss-consumer
    name: ilss-consumer
  registry:
    protocol: zookeeper
    address: 127.0.0.1:2181
    id: registry-1
  protocol:
    name: dubbo
    port: 20889
  consumer:
    version: 1.0

spring:
  application:
    name: ilss-consumer
  • consumer的启动类
package io.ilss.dubbo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * className IlssConsumerApplication
 * description IlssConsumerApplication
 *
 * @author feng
 * @version 1.0
 * @date 2019-01-30 18:18
 */
@SpringBootApplication
public class IlssConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(IlssConsumerApplication.class);
    }
}

服务实现

  • service接口:在service中新建interface TestService


    14200547-3a86927bac9c18df.png
    TestService

    代码如下:

package io.ilss.dubbo.service;

/**
 * className TestService
 * description TestService
 *
 * @author feng
 * @version 1.0
 * @date 2019-01-30 18:07
 */
public interface TestService {
    String test(String text);
}
  • 在provider中新建ServiceImpl


    14200547-ed220816fb98c26d.png
    ServiceImpl

代码如下:

package io.ilss.dubbo.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import io.ilss.dubbo.service.TestService;

/**
 * className TestServiceImpl
 * description TestServiceImpl
 *
 * @author feng
 * @version 1.0
 * @date 2019-01-30 18:08
 */
@Service(
        version = "${dubbo.provider.version}",
        application = "${dubbo.application.id}",
        protocol = "${dubbo.protocol.id}",
        registry = "${dubbo.registry.id}"
)
public class TestServiceImpl implements TestService {

    @Override
    public String test(String text) {
        return "Success! Your String is " + text;
    }
}
  • Consumer中添加测试的TestController
package io.ilss.dubbo.web;

import com.alibaba.dubbo.config.annotation.Reference;
import io.ilss.dubbo.service.TestService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * className TestController
 * description TestController
 *
 * @author feng
 * @version 1.0
 * @date 2019-01-30 18:19
 */
@RestController
public class TestController {

    private static final Logger logger = LoggerFactory.getLogger(TestController.class);

    @Reference
    private TestService testService;

    @GetMapping("/test")
    public String test(@RequestParam String text) {
        logger.info("text value : {}",text);
        return testService.test(text);
    }
}
  • 完整结构


    14200547-e5ed4095b4e9574b.png
    Project Structure
  • 运行

  1. 启动Zookeeper端口为2181,怎么安装启动自行Google
  2. 启动IlssProviderApplication
  3. 启动IlssConsumerApplication
  4. 游览器访问http://localhost:8080/test?text=abc 看到如下页面和log即完成
14200547-fdb7df945199b4dd.png
image.png
14200547-870f4bbbc3ecf9e0.png
image.png

猜你喜欢

转载自blog.csdn.net/weixin_34321977/article/details/87058855