Spring Boot 集成Dubbo

 2019-10-17 22:05  阅读(1204)
文章分类:Spring boot

Spring Boot 集成Dubbo

更多干货

使用Spring Boot 与Dubbo集成.这里使用的是XML而不是注解

代码地址:https://github.com/csy512889371/learndemo/tree/master/ctoedu-springboot-dubbo

  • ctoedu-springboot-dubbo-consumer 消费端
  • ctoedu-springboot-dubbo-provider 提供端

更多干货

一、提供端

1、pom.xml

<?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>cn.ctoedu</groupId>
        <artifactId>ctoedu-springboot-dubbo-provider</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.7.RELEASE</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
        </properties>

        <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>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.8.4</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.6</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>

        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    </project>

2、Application.java

package cn.ctoedu;

    import org.apache.log4j.Logger;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ImportResource;

    import java.util.concurrent.CountDownLatch;

    @SpringBootApplication
    @ImportResource({"classpath:dubbo-provider.xml"})
    public class Application {

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

        @Bean
        public CountDownLatch closeLatch() {
            return new CountDownLatch(1);
        }

        public static void main(String[] args) throws InterruptedException {
            ApplicationContext ctx = SpringApplication.run(Application.class, args);
    //      logger.info("项目启动!");
    //      CountDownLatch closeLatch = ctx.getBean(CountDownLatch.class);
    //      closeLatch.await();
        }

    }

3、ComputeService.java

package cn.ctoedu.service.impl;

    import cn.ctoedu.service.ComputeService;

    public class ComputeServiceImpl implements ComputeService {

        public Integer add(int a, int b) {
            return a + b;
        }

    }

4、application.yml

server:
      port: 8010
    #ZooKeeper
    dubbo:
      registry:
        address: localhost:2181
    logging:
      level:
        root: INFO

5、dubbo-provider.xml

<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="compute-service"  />

        <!-- 注册中心服务地址 -->
        <dubbo:registry id="zookeeper" protocol="zookeeper" address="${dubbo.registry.address}" />

        <!-- 用dubbo协议在30001 -->
        <dubbo:protocol name="dubbo" port="30001" />

        <!-- 声明需要暴露的服务接口 -->
        <dubbo:service interface="cn.ctoedu.service.ComputeService" ref="computeService"
                       version="1.0" registry="zookeeper"/>

        <!-- 具体服务接口的实现 -->
        <bean id="computeService" class="cn.ctoedu.service.impl.ComputeServiceImpl" />

    </beans>

二、消费端

1、application.java

package cn.ctoedu;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.ImportResource;

    @SpringBootApplication
    @ImportResource({"classpath:dubbo-consumer.xml"})
    public class Application {

        public static void main(String[] args) throws InterruptedException {
            SpringApplication.run(Application.class, args);
        }

    }

2、pom.xml

<?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>cn.ctoedu</groupId>
        <artifactId>ctoedu-springboot-dubbo-consumer</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.7.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
        </properties>

        <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>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.8.4</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.6</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>

        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    </project>

3、dubbo-consumer.xml

<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

        <!-- 消费方应用名 -->
        <dubbo:application name="consumer"  />

        <!-- 注册中心服务地址 -->
        <dubbo:registry id="zookeeper" protocol="zookeeper" address="${dubbo.registry.address}" />

        <!-- 引用ComputeService服务-->
        <dubbo:reference id="computeService" interface="cn.ctoedu.service.ComputeService"
                         check="false" version="1.0" url="" registry="zookeeper" protocol="dubbo" timeout="15000"/>

    </beans>

4、ApplicationTests 测试类

package cn.ctoedu;

    import cn.ctoedu.service.ComputeService;
    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.SpringApplicationConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringApplicationConfiguration(classes = Application.class)
    public class ApplicationTests {

        @Autowired
        ComputeService computeService;

        @Test
        public void testAdd() throws Exception {
            System.out.println("cn.ctoedu: Dubbo消费结果为:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。"+computeService.add(100, 200));
            Assert.assertEquals("compute-service:add", new Integer(3), computeService.add(1, 2));
            //Assert.assertEquals("compute-service:add", new Integer(5), computeService.add(1, 2));
        }

    }

来源:[]()

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Spring Boot 集成Dubbo

相关推荐