springboot集成dubbo

springboot集成dubbo

 

springdubbo父工程

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>com.dtg</groupId>
   <artifactId>springdubbo</artifactId>
   <version>1.0-SNAPSHOT</version>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.0.0.RELEASE</version>
   </parent>
   <modules>
       <module>springdubbo-api</module>
       <module>springdubbo-provider</module>
       <module>springdubbo-consumer</module>
   </modules>
   <packaging>pom</packaging>
</project>

 

API工程springdubbo-api

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">
   <parent>
       <artifactId>springdubbo</artifactId>
       <groupId>com.dtg</groupId>
       <version>1.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>springdubbo-api</artifactId>
</project>

定义接口

ITestFacadeService.java

package com.dtg.springdubbo.service;

public interface ITestFacadeService {
  public String testMethod(String input);
}

 

服务提供者 springdubbo-provider

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
      <groupId>com.dtg</groupId>
      <artifactId>springdubbo</artifactId>
      <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>com.dtg</groupId>
  <artifactId>springdubbo-provider</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>springdubbo-provider</name>
  <description>Demo project for Spring Boot</description>

  <properties>
      <java.version>1.8</java.version>
  </properties>

  <dependencies>
      <!-- springboot -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>
      <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>com.alibaba</groupId>
          <artifactId>dubbo</artifactId>
          <version>2.5.3</version>
          <exclusions>
              <exclusion>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring</artifactId>
              </exclusion>
          </exclusions>
      </dependency>

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

      <!-- 项目依赖 -->
      <dependency>
          <groupId>com.dtg</groupId>
          <artifactId>springdubbo-api</artifactId>
          <version>1.0-SNAPSHOT</version>
      </dependency>

      <!-- 日志 -->
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
      </dependency>
  </dependencies>


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

</project>

配置application.properties

server.port=8080
# dubbo
dubbo.application.name=xdloan-test
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo

配置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"
      xmlns:context="http://www.springframework.org/schema/context"
      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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
   <!-- 提供方应用信息,用于计算依赖关系 -->
   <dubbo:application name="${dubbo.application.name}"/>
   <!-- 使用zookeeper注册中心暴露服务地址 -->
   <dubbo:registry id="register" address="${dubbo.registry.address}"/>
   <dubbo:registry id="local" address="zookeeper://127.0.0.1:2181"/>
   <!-- 用dubbo协议在20880端口暴露服务 -->
   <dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}"/>

   <!-- 声明需要暴露的服务接口(注意是接口,不是实现类) -->
   <!-- 这里是具体实现类,id和上面的暴露的服务接口ref要一致,dubbo就是通过这个来注册对应的服务 -->
   <!-- 同模块的registry使用local,不同模块的使用远程的register -->
   <dubbo:service registry="register" interface="com.dtg.springdubbo.service.ITestFacadeService" ref="testService"/>

</beans>

启动类

DemoproviderApplication.java

package com.dtg.demoprovider;

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

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

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

}

 

服务实现类

TestServiceImpl.java

package com.dtg.demoprovider.service;

import com.dtg.springdubbo.service.ITestFacadeService;
import org.springframework.stereotype.Service;

@Service("testService")
public class TestServiceImpl implements ITestFacadeService {
   @Override
   public String testMethod(String s) {
       System.out.println("testmethod:"+s);
       return "hello "+ s;
  }
}

服务消费者 springdubbo-consumer

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>com.dtg</groupId>
       <artifactId>springdubbo</artifactId>
       <version>1.0-SNAPSHOT</version>
   </parent>
   <groupId>com.dtg</groupId>
   <artifactId>springdubbo-consumer</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>springdubbo-consumer</name>
   <description>Demo project for Spring Boot</description>

   <properties>
       <java.version>1.8</java.version>
   </properties>

   <dependencies>
       <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>
           <exclusions>
               <exclusion>
                   <groupId>org.junit.vintage</groupId>
                   <artifactId>junit-vintage-engine</artifactId>
               </exclusion>
           </exclusions>
       </dependency>

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

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

       <!-- 项目依赖 -->
       <dependency>
           <groupId>com.dtg</groupId>
           <artifactId>springdubbo-api</artifactId>
           <version>1.0-SNAPSHOT</version>
       </dependency>
   </dependencies>

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

配置application.properties

server.port=8080
# dubbo
dubbo.application.name=springdubbo-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo

配置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"
      xmlns:context="http://www.springframework.org/schema/context"
      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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
   <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
   <dubbo:application name="${dubbo.application.name}"/>
   <dubbo:registry id="register" address="${dubbo.registry.address}"/>
   <dubbo:registry id="local" address="zookeeper://127.0.0.1:2181"/>
   <dubbo:protocol name="${dubbo.protocol.name}"/>
   <!-- 生成远程服务代理,可以和本地bean一样调用 -->
   <!-- 同模块的registry使用local,不同模块的使用远程的register -->
   <dubbo:reference registry="register" id="testService" interface="com.dtg.springdubbo.service.ITestFacadeService"/>
</beans>

启动类

package com.dtg.springdubboconsumer;

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

@SpringBootApplication
@ImportResource("classpath:dubbo-customer.xml")
public class SpringdubboConsumerApplication {

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

}

业务类

package com.dtg.springdubboconsumer.controller;

import com.dtg.springdubbo.service.ITestFacadeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

   @Autowired
   ITestFacadeService testFacadeService;

   @GetMapping("/test/{name}")
   public String test(@PathVariable("name") String name){
      return  testFacadeService.testMethod(name);
  }
}

 

原文地址:https://www.cnblogs.com/datangguott/p/13922574.html