• Spring boot 集成 Dubbo 快速搭建


    架构:

      1、ZooKeeper:服务注册中心

      2、api工程:提供对外暴露的服务API

      3、provider:服务提供者

      4、consumer:服务消费者

    示例如下:

    (一)新建 Maven 项目 api 

    1、  pom.xml

    <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.dubbo</groupId>
        <artifactId>api</artifactId>
        <version>1.0.0</version>
    
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
    
            </plugins>
        </build>
    </project>

    2、   TestService.java

    package com.dubbo.service;
    
    import java.util.Map;
    
    /**
     * 测试获取主机信息
     * 
     * @author Logan
     * @version 1.0.0
     * @createDate 2019-06-23
     *
     */
    public interface TestService {
    
        Map<String, Object> getHostMessage();
    
    }

    (二) 新建Maven项目provider

    1、 pom.xml

    <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.dubbo</groupId>
        <artifactId>provider</artifactId>
        <version>1.0.0</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.5.RELEASE</version>
        </parent>
    
        <properties>
            <dubbo.version>2.7.1</dubbo.version>
        </properties>
    
        <dependencies>
    
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <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>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
            </dependency>
    
    
            <dependency>
                <groupId>com.dubbo</groupId>
                <artifactId>api</artifactId>
                <version>1.0.0</version>
            </dependency>
    
    
        </dependencies>
    
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>

    2、 ProviderStarter.java

    package com.dubbo;
    
    import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * 服务提供者启动类
     * 
     * @author Logan
     * @version 1.0.0
     * @createDate 2019-06-23
     *
     */
    @EnableDubbo
    @SpringBootApplication
    public class ProviderStarter {
    
        public static void main(String[] args) {
            SpringApplication.run(ProviderStarter.class, args);
        }
    
    }

    3、  TestServiceImpl.java

    package com.dubbo.service.impl;
    
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.dubbo.config.annotation.Service;
    
    import com.dubbo.service.TestService;
    
    /**
     * 测试服务提供者
     * 
     * @author Logan
     * @version 1.0.0
     * @createDate 2019-06-23
     *
     */
    @Service
    public class TestServiceImpl implements TestService {
    
        @Override
        public Map<String, Object> getHostMessage() {
            System.out.println("服务提供者被调用");
            Map<String, Object> map = new HashMap<String, Object>();
            try {
                InetAddress host = InetAddress.getLocalHost();
                map.put("hostName", host.getHostName());
                map.put("hostAddress", host.getHostAddress());
            } catch (UnknownHostException e) {
                e.printStackTrace();
                map.put("msg", e.getMessage());
            }
            return map;
        }
    
    }

    4、   application.properties

    server.port=8880
    
    # Spring boot application
    spring.application.name=dubbo-provider
    
    # Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
    dubbo.scan.base-packages=com.dubbo.service.impl
    
    # Dubbo Application
    ## The default value of dubbo.application.name is ${spring.application.name}
    ## dubbo.application.name=${spring.application.name}
    
    
    # Dubbo Protocol
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20880
    
    ## Dubbo Registry
    dubbo.registry.address=zookeeper://127.0.0.1:2181

     

    (三)新建Maven项目consumer

    1、 pom.xml

    <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.dubbo</groupId>
        <artifactId>consumer</artifactId>
        <version>1.0.0</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.5.RELEASE</version>
        </parent>
    
        <properties>
            <dubbo.version>2.7.1</dubbo.version>
        </properties>
    
    
        <dependencies>
    
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <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>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
            </dependency>
    
    
    
            <dependency>
                <groupId>com.dubbo</groupId>
                <artifactId>api</artifactId>
                <version>1.0.0</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>

    2、 ConsumerStarter.java

    package com.dubbo;
    
    import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * 服务消费端启动类
     * 
     * @author Logan
     * @version 1.0.0
     * @createDate 2019-06-23
     *
     */
    @EnableDubbo
    @SpringBootApplication
    public class ConsumerStarter {
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerStarter.class, args);
        }
    
    }

    3、 ConsumerService.java

    package com.dubbo.service;
    
    import java.util.Map;
    
    /**
     * 消费者端的服务
     * 
     * @author Logan
     * @version 1.0.0
     * @createDate 2019-06-23
     *
     */
    public interface ConsumerService {
    
        Map<String, Object> getHostMessage();
    
    }

    4、 ConsumerServiceImpl.java

    package com.dubbo.service.impl;
    
    import java.util.Map;
    
    import org.apache.dubbo.config.annotation.Reference;
    import org.apache.dubbo.config.annotation.Service;
    
    import com.dubbo.service.ConsumerService;
    import com.dubbo.service.TestService;
    
    /**
     * 消费端的服务
     * 
     * @author Logan
     * @version 1.0.0
     * @createDate 2019-06-23
     *
     */
    @Service // 使用此注解可暴露服务到注册中心,此处只示例调用外部服务
    public class ConsumerServiceImpl implements ConsumerService {
    
        @Reference
        private TestService testService;
    
        @Override
        public Map<String, Object> getHostMessage() {
            Map<String, Object> hostMessage = testService.getHostMessage();
            System.out.println(hostMessage);
    
            hostMessage.put("flag", "消费端的服务");
            return hostMessage;
        }
    
    }

    5、 TestController.java

    package com.dubbo.controller;
    
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.dubbo.service.ConsumerService;
    
    /**
     * 测试消费端控制层
     * 
     * @author Logan
     * @version 1.0.0
     * @createDate 2019-06-23
     *
     */
    @RestController
    public class TestController {
    
        @Autowired
        private ConsumerService service;
    
        @GetMapping("/getHostMessage")
        public Map<String, Object> getHostMessage() {
            return service.getHostMessage();
        }
    
    }

    6、 application.properties

    server.port=8888
    
    # Spring boot application
    spring.application.name=dubbo-consumer
    
    # Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
    dubbo.scan.base-packages=com.dubbo.service.impl
    
    # Dubbo Application
    ## The default value of dubbo.application.name is ${spring.application.name}
    ## dubbo.application.name=${spring.application.name}
    
    
    # Dubbo Protocol
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20888
    
    ## Dubbo Registry
    dubbo.registry.address=zookeeper://127.0.0.1:2181

     

    (四) 启动测试

    1、启动ZooKeeper服务器

    ZooKeeper集群环境搭建可参考:https://www.cnblogs.com/jonban/p/zookeeper.html

    练习只启动单机服务器即可

    2、启动provider 服务提供者

    运行 ProviderStarter.java

    3. 启动consumer服务消费者

    运行ConsumerStarter.java

    4、浏览器输入 http://127.0.0.1:8888/getHostMessage

    响应内容如下:{"hostName":"Logan","flag":"消费端的服务","hostAddress":"192.168.1.102"}

     截图如下:

    观察服务提供者控制台信息,打印内容【服务提供者被调用】,服务提供端和消费端均已正常运行。

    .

    Spring boot 集成 Dubbo 快速搭建

  • 相关阅读:
    中文排版CSS心得
    用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
    Linux 下忘记root密码怎么办
    CSS手册简编
    SC 命令
    DataGrid的数据导入到Excel或CSV
    asp中关于'+'的特殊处理
    卡巴斯基汇总收藏版
    一步一步学习BI(2)Integration Services简单ETL工程
    优化递归的效率zz
  • 原文地址:https://www.cnblogs.com/jonban/p/dubbo.html
Copyright © 2020-2023  润新知