zoukankan      html  css  js  c++  java
  • Spring Boot方式的Dubbo项目

    项目依赖

    需要org.apache.dubbo.dubbo-dependencies-bom, 需要org.apache.dubbo.dubbo-spring-boot-starter, 当前版本有2.7.0和2.7.1, dubbo版本已经发布到2.7.2了, 但是starter还没更新到2.7.2, 所以整体使用2.7.1版本

    另外就是spring-boot的org.springframework.boot.spring-boot-dependencies, org.springframework.boot.spring-boot-starter-test

    org.apache.dubbo.dubbo中带了springframework, javax.servlet, log4j, 在pom中要排除掉

    在项目的maven settings.xml中, 只需要配public就可以, 不需要Apache Snapshot. 检查一下public底下有没有org.apache.dubbo, 没有的话, 把Central的proxy源配置到 http://repo1.maven.org/maven2/ 这个是最源头的仓库了, 现在从墙里访问速度也不慢.

    Root模块

     给项目随便起了个名字叫DB, 这个是root的pom内容

    <?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.rockbb</groupId>
        <artifactId>db</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
    
        <name>DB: Root</name>
        <modules>
            <module>../db-commons-api</module>
            <module>../db-commons-impl</module>
            <module>../db-admin</module>
        </modules>
    
        <prerequisites>
            <maven>3.3.9</maven>
        </prerequisites>
    
        <properties>
            <!-- Global encoding -->
            <project.jdk.version>1.8</project.jdk.version>
            <project.source.encoding>UTF-8</project.source.encoding>
    
            <!-- Global dependency versions -->
            <springframework.boot.version>2.1.6.RELEASE</springframework.boot.version>
            <dubbo.version>2.7.1</dubbo.version>
    
            <development.mode>1</development.mode>
            <development.developer>milton</development.developer>
            <timestamp>${maven.build.timestamp}</timestamp>
            <maven.build.timestamp.format>yyyyMMdd_HHmm</maven.build.timestamp.format>
            <dubbo.application.version>develop-${development.developer}</dubbo.application.version>
            <log.path>d:/logs</log.path>
            <log.level>INFO</log.level>
            <log.appender>stdout</log.appender>
            <admin.root.path></admin.root.path>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <!-- Spring Boot Dependencies -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${springframework.boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!-- Apache Dubbo Dependencies -->
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-dependencies-bom</artifactId>
                    <version>${dubbo.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-test</artifactId>
                    <version>${springframework.boot.version}</version>
                    <scope>test</scope>
                </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>
                    <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>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.8.0</version>
                        <configuration>
                            <source>${project.jdk.version}</source>
                            <target>${project.jdk.version}</target>
                            <encoding>${project.source.encoding}</encoding>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>3.1.0</version>
                        <configuration>
                            <encoding>${project.source.encoding}</encoding>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-deploy-plugin</artifactId>
                        <version>2.8.2</version>
                    </plugin>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <version>${springframework.boot.version}</version>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    
    </project>
    

    root模块用于规定全局的版本号, 以及完整构建

    API模块

    这是用于服务端暴露接口信息给消费端的模块, 要尽量简单干净依赖少, 避免依赖污染. 这个是api模块的pom内容

    <?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>
    
        <parent>
            <groupId>com.rockbb</groupId>
            <artifactId>db</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../db/pom.xml</relativePath>
        </parent>
        <artifactId>db-commons-api</artifactId>
        <packaging>jar</packaging>
    
        <name>DB: Commons API</name>
    
        <dependencies>
        </dependencies>
    </project>
    

    Commons模块

    这个是服务端接口具体实现的模块, 需要启动服务, 注册自己到服务注册中心(这里使用的是zookeeper).

    pom文件

    <?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>
    
        <parent>
            <groupId>com.rockbb</groupId>
            <artifactId>db</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../db/pom.xml</relativePath>
        </parent>
        <artifactId>db-commons-impl</artifactId>
        <packaging>jar</packaging>
    
        <name>DB: Commons Implementation</name>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>com.rockbb</groupId>
                <artifactId>db-commons-api</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    
        <build>
            <finalName>db-commons</finalName>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    .因为zookeeper里带的logger和外面的logger冲突并且版本较低, 所以将zookeeper里的logger排除掉了. 

    .在build模块中, 用maven-deploy-plugin.configruation.skip: true 避免将本模块install到本地. 因为这是最终部署用的末端模块, 不会再有模块依赖于这个模块

    application.yml文件

    server:
      port: 8760
    
    spring:
      application:
        name: db-commons
    
    dubbo:
      application:
        name: db-commons-@development.developer@ # Application name is the unique identifier of an application. It is for registry combing the dependencies of applications. Note: Consumer and provider application name should not be the same, and this parameter is not a match condition. As a suggestion, you can name it as your project name.
        qos:
          enable: false # Activate QoS or not
          port: 33333 # The port QoS would bind to
          accept:
            foreign:
              ip: false # Enable remote access or not
    
      registry:
        protocol: zookeeper # The protocol of the registry center. dubbo, multicast, zookeeper, redis, consul(2.7.1), sofa(2.7.2), etcd(2.7.2), nacos(2.7.2) are available.
        address: 127.0.0.1:2181
    
      provider:
        delay: -1 # The delay time(ms) for registering services. When set to -1, it indicates that the services will expose to registry after the Spring context is initialized
        timeout: 30000 # The RPC timeout(ms)
        retries: 0 # The retry count for RPC, not including the first invoke. Please set it to 0 if don't need to retry.
        version: @dubbo.application.version@
    
      protocol:
        id: dubbo # Bean Id of the protocol, can be referenced in <dubbo:service protocol=""> The default value is equal to the value of name attribute while id is not filled. If name value has already existed, it will add index to it's suffix.
        name: dubbo
        accepts: 500 # The maximum connection count of the service provider
        # dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80;如果配置为-1 或者 没有配置port则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控。
        port: 10080
        serialization: hessian2 # The default serialization of dubbo protocol is hessian2, rmi protocol is java, http protocol is json
    

    ApplicationBoot.java文件

    import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @EnableDubbo
    @SpringBootApplication
    public class ApplicationBoot {
        public static void main(String[] args) {
            SpringApplication.run(ApplicationBoot.class, args);
        }
    }
    

    DemoServiceImpl文件  

    import com.rockbb.db.commons.api.service.DemoService;
    import org.apache.dubbo.config.annotation.Service;
    import org.springframework.stereotype.Component;
    
    @Service
    @Component
    public class DemoServiceImpl implements DemoService {
        @Override
        public String hello(String name) {
            return "Hello " + name;
        }
    }
    

    Admin模块(消费端)

    这里用到了web, 展示层使用的是freemarker.

    pom文件

    <?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>
    
        <parent>
            <groupId>com.rockbb</groupId>
            <artifactId>db</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../db/pom.xml</relativePath>
        </parent>
        <artifactId>db-admin</artifactId>
        <packaging>jar</packaging>
    
        <name>DB: Admin</name>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-freemarker</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>com.rockbb</groupId>
                <artifactId>db-commons-api</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    
        <build>
            <finalName>db-admin</finalName>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>false</filtering>
                    <excludes>
                        <exclude>*.yml</exclude>
                        <exclude>*.xml</exclude>
                    </excludes>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                    <includes>
                        <include>*.yml</include>
                        <include>*.xml</include>
                    </includes>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    application.yml文件

    server:
      port: 8764
      servlet:
        session:
          timeout: 600
        context-path: @admin.root.path@
    
    spring:
      application:
        name: db-admin
    
      freemarker:
        cache: true
        settings:
          auto_import: spring.ftl as S
          number_format: '#'
          template_update_delay: 0
          default_encoding: UTF-8
          datetime_format: yyyy-MM-dd HH:mm:ss
          classic_compatible: true
          template_exception_handler: ignore
      mvc:
        view:
          prefix: /templates/
          suffix: .ftl
    
    dubbo:
      application:
        name: db-admin-@development.developer@ # Application name is the unique identifier of an application. It is for registry combing the dependencies of applications. Note: Consumer and provider application name should not be the same, and this parameter is not a match condition. As a suggestion, you can name it as your project name.
        qos:
          enable: false # Activate QoS or not
          port: 33333 # The port QoS would bind to
          accept:
            foreign:
              ip: false # Enable remote access or not
    
      registry:
        protocol: zookeeper # The protocol of the registry center. dubbo, multicast, zookeeper, redis, consul(2.7.1), sofa(2.7.2), etcd(2.7.2), nacos(2.7.2) are available.
        address: 127.0.0.1:2181
    
      consumer:
        version: @dubbo.application.version@
        check: false
    

    ApplicationBoot.java

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ApplicationBoot {
        public static void main(String[] args) {
            SpringApplication.run(ApplicationBoot.class, args);
        }
    }
    

    DemoController.java

    import com.rockbb.db.commons.api.service.DemoService;
    import org.apache.dubbo.config.annotation.Reference;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpServletRequest;
    
    @Controller
    public class DemoController {
        private static Logger logger = LoggerFactory.getLogger(DemoController.class);
    
        @Reference
        private DemoService demoService;
    
        @RequestMapping(value = {"/", "/index"})
        public String doIndex(HttpServletRequest request) {
            String name = request.getParameter("name");
            if (name != null) {
                name = demoService.hello(name);
            }
            logger.info("Name: {}", name);
            return "index";
        }
    }
    
  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/milton/p/11194076.html
Copyright © 2011-2022 走看看