springboot2集成dubbo

2024-07-06 11:03

Dubbo

官网:https://cn.dubbo.apache.org/zh-cn/overview/home/

https://github.com/apache/dubbo/tree/3.1.10-release

简介

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。

​ Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

gRPC协议

https://grpc.io/docs/what-is-grpc/introduction/

自 Dubbo3 开始,Dubbo 提供了 Dubbo、Golang、Rust、Node.js 等多语言实现,未来会有更多的语言实现。

Dubbo SDK 用户手册

https://cn.dubbo.apache.org/zh-cn/overview/mannual/

springboot2集成dubbo实例

jdk1.8 + dubbo 3.1.9 +springboot-2.3.12.RELEASE版本

步骤1:创建maven项目

创建maven项目

创建springboot2-dubbo-provider 服务提供方

创建springboot2-dubbo-consumer 服务消费方

创建springboot2-dubbo-demo-api 接口api对象

如图:

image.png

步骤2:配置pom.xml

springboot2-dubbo-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>cn.spring.boot2</groupId>
        <artifactId>springboot2-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>springboot2-dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot2-dubbo-provider</name>
    <description>springboot2-dubbo-provider</description>
    <properties>
        <java.version>8</java.version>
        <dubbo.version>3.1.9</dubbo.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.3.12.RELEASE</version>
            <type>pom</type>
            <scope>import</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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.spring.boot2</groupId>
            <artifactId>springboot2-dubbo-samples-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </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-rpc-api</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-configcenter-zookeeper</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-metadata-report-zookeeper</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-config-spring</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-remoting-netty4</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-serialization-hessian2</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-serialization-fastjson2</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
            <exclusions>
                <!-- Fix the bug of log4j refer:https://github.com/apache/logging-log4j2/pull/608 -->
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.33</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- Observability -->

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-qos</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

    </dependencies>

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

</project>

springboot2-dubbo-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>cn.spring.boot2</groupId>
        <artifactId>springboot2-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>springboot2-dubbo-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot2-dubbo-consumer</name>
    <description>springboot2-dubbo-consumer</description>
    <properties>
        <java.version>8</java.version>
        <dubbo.version>3.1.9</dubbo.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.3.12.RELEASE</version>
            <type>pom</type>
            <scope>import</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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.spring.boot2</groupId>
            <artifactId>springboot2-dubbo-samples-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-api</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-configcenter-zookeeper</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-metadata-report-zookeeper</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-config-spring</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-remoting-netty4</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-serialization-hessian2</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-serialization-fastjson2</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
            <exclusions>
                <!-- Fix the bug of log4j refer:https://github.com/apache/logging-log4j2/pull/608 -->
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.33</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- Observability -->

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-qos</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
    </dependencies>

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

springboot2-dubbo-demo-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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.spring.boot2.dubbo.demo.api</groupId>
    <artifactId>springboot2-dubbo-demo-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot2-dubbo-demo-api</name>
    <description>springboot2-dubbo-demo-api</description>
    <properties>
        <java.version>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-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
            <version>1.9</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>springboot2-dubbo-demo-api</finalName>
    </build>

</project>

步骤3:配置application.yaml

springboot2-dubbo-provider


application.yaml

server:
  port: 9000
  servlet:
    context-path: /
spring:
  application:
    name: dubbo-provider
dubbo:
  application:
    name: dubbo-springboot2-demo-provider
  protocol:
    name: dubbo
    port: -1
  registry:
    id: zk-provider
    address: zookeeper://${zookeeper.address:192.168.137.40}:2181
    timeout: 250000
    parameters:
      blockUntilConnectedWait: 250
  logging:
    pattern:
      level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
zookeeper:
  address: 192.168.137.40

image-20230505132125019


注意:如果用虚拟机zookeeper需要加blockUntilConnectedWait参数


springboot2-dubbo-consumer


application.yaml

server:
  port: 9001
  servlet:
    context-path: /
spring:
  application:
    name: dubbo-consumer
dubbo:
  application:
    name: dubbo-springboot2-demo-consumer
  protocol:
    name: dubbo
    port: -1
  registry:
    id: zk-provider
    address: zookeeper://${zookeeper.address:192.168.137.40}:2181
    timeout: 250000 # 连接超时时间,默认 30s
    parameters:
      blockUntilConnectedWait: 250
  logging:
    pattern:
      level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
zookeeper:
  address: 192.168.137.40
步骤4:日志配置

log4j.properties

###set log levels###
log4j.rootLogger=info, stdout,debug
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n

步骤5:代码

springboot2-dubbo-demo-api

public interface DemoService {
    String sayHello(String name);
    
    default CompletableFuture<String> sayHelloAsync(String name) {
        return CompletableFuture.completedFuture(sayHello(name));
    }

}

public interface GreetingService {
    String hello();
}

@Path("/demoService")
public interface RestDemoService {
    @GET
    @Path("/hello")
    Integer hello(@QueryParam("a") Integer a, @QueryParam("b") Integer b);

    @GET
    @Path("/error")
    String error();

    @POST
    @Path("/say")
    @Consumes({MediaType.TEXT_PLAIN})
    String sayHello(String name);

    @GET
    @Path("/getRemoteApplicationName")
    String getRemoteApplicationName();
}

public interface TripleService {
    String hello();
}

springboot2-dubbo-provider

@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return name+":say Hello";
    }

    @Override
    public CompletableFuture<String> sayHelloAsync(String name) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            System.out.println("执行有返回值的异步任务");
            return name+":say hello async";
        });
       return future;
    }
}
@SpringBootApplication
@EnableDubbo
public class Springboot2DubboProviderApplication {

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

}

springboot2-dubbo-consumer

@Component  
public class TaskService implements CommandLineRunner {
    @DubboReference
    private DemoService demoService;
    @Override
    public void run(String... args) throws Exception {
        String result = demoService.sayHello("spring1");
        System.out.println("result:sayHello:"+result);
        new Thread(()->{
           while(true){
               try {
                   Thread.sleep(1000);
                   CompletableFuture<String> spring2= demoService.sayHelloAsync("spring2");
                   System.out.println("result:sayHello:futrue:"+spring2.get());
               } catch (InterruptedException e) {
                   e.printStackTrace();
               } catch (ExecutionException e) {
                   e.printStackTrace();
               }
           } 
        }).start();
    }
}
@SpringBootApplication
@EnableDubbo
public class Springboot2DubboConsumerApplication {

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

}

步骤6:启动demo

image-20230505135138214


image-20230505135151988

备注

关于dubbo详解详见官网

相关新闻
热点
视频
投票
查看结果
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量:

© 2025 个人网站 版权所有

备案号:苏ICP备2024108837号

苏公网安备32011302322151号