ApacheDubbo笔记

Apache Dubbo 是一款高性能的 Java RPC 框架,它提供了服务提供者、消费者的角色抽象,支持分层架构,具有集群容错、负载均衡等功能。这篇笔记详细介绍了 Dubbo 的依赖配置,包括普通 Maven 项目、SpringBoot 和 SpringCloud 的集成,以及各集成方式的配置项和注解说明。

ApacheDubbo笔记

一、Dubbo所需依赖

(1)普通Maven项目(服务提供者和消费者相同)
<?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.zzcfirst</groupId>
    <artifactId>user-provider</artifactId>
    <version>1.0</version>
    
    <dependencies>
        <dependency>
            <groupId>cn.zzcfirst</groupId>
            <artifactId>user-api</artifactId>
            <version>1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.5</version>
        </dependency>
    </dependencies>

</project>
(2)i.SpringBoot集成服务提供者
<?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>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.zzcfirst</groupId>
    <artifactId>springboot-provider</artifactId>
    <version>0.0.1</version>
    <name>springboot-provider</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.6.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>

        <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>2.7.8</version>
        </dependency>

        <dependency>
            <groupId>cn.zzcfirst</groupId>
            <artifactId>user-api</artifactId>
            <version>1.0</version>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
   
</project>
(2)ii.SpringBoot集成服务消费者
<?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>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.zzcfirst</groupId>
    <artifactId>springboot-consumer</artifactId>
    <version>0.0.1</version>
    <name>springboot-consumer</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>

        <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>2.7.8</version>
        </dependency>

        <dependency>
            <groupId>cn.zzcfirst</groupId>
            <artifactId>user-api</artifactId>
            <version>1.0</version>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
(3)ii.SpringCloud集成依赖
<?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>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.zzcfirst</groupId>
    <artifactId>consumer</artifactId>
    <version>0.0.1</version>
    <name>consumer</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring.cloud-version>Hoxton.SR9</spring.cloud-version>
        <alibaba.cloud-version>2.2.1.RELEASE</alibaba.cloud-version>
</properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

        <dependency>
            <groupId>cn.zzcfirst</groupId>
            <artifactId>user-api</artifactId>
            <version>1.0</version>
        </dependency>

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

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba.cloud-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
	</dependencyManagement>

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

二、Dubbo简介

Dubbo是一款高性能、轻量级的开源java RPC分布式服务框架。

核心功能:
面向接口的远程过程调用
集群容错和负载均衡
服务自动注册与发现
特点:
使用分层的架构模式,使得各个层次之间实现最大限度的解耦。
将服务抽象为服务提供者(Provider)与服务消费者(Consumer)两个角色。
在这里插入图片描述

三、ApacheDubbo的使用 – 配置文件方式

1、创建通用接口user-api并发布到maven仓库
2、创建服务提供者模块实现接口
3、配置服务提供者模块
4、创建服务消费者模块
5、配置服务消费者模块
6、启动消费者和提供者

创建接口

public interface IUserService {
    String getNameById(String uid);
}

创建服务提供者模块实现接口

public class UserServiceImpl implements IUserService {
    @Override
    public String getNameById(String uid) {
        System.out.println("receive request data :" + uid);
        return "Mic";
    }
}

配置服务提供者

<?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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo
       http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <dubbo:application name="user-provider"/>
    <dubbo:registry address="N/A"/>
    <dubbo:protocol name="dubbo" port="20880"/>
    <dubbo:service interface="cn.zzcfirst.IUserService" ref="userService"/>
	<bean id="userService" 
          class="cn.zzcfirst.service.UserServiceImpl"/>
</beans>

配置服务消费者

<?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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo
       http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <dubbo:application name="order-service"/>
    <dubbo:registry address="N/A"/>
    <dubbo:reference id="userService" 
                     interface="cn.zzcfirst.IUserService" url="dubbo://127.0.0.1:20880/cn.zzcfirst.IUserService"/>
</beans>

启动服务

public class StartMain {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("classpath:/META-INF/spring/user-provider.xml");
        context.start();
        System.in.read();
    }
}

四、ApacheDubbo的使用 – SpringBoot集成

1、创建服务提供者实现通用接口
2、配置服务提供者
3、创建服务调用者
4、配置服务调用者
5、依赖注入(不同于web方式)
6、启动服务即可

创建服务提供者以及实现接口代码省略

配置服务提供者

spring:
   application:
      name: spring-boot-dubbo-provider
dubbo:
   application:
      name: springboot-provider
   protocol:
      name: dubbo
      port: 20880
   #若不注册服务中心则值为N/A 注意Dubbo服务的注册协议名称对应服务器名称
   registry:
      address: zookeeper://127.0.0.1:2181

创建服务调用者代码省略

启动类上加注解**@DubboComponentScan**

配置服务调用者

spring:
   application:
      name: spring-boot-consumer
server:
   port: 8888
dubbo:
   application:
      name: springboot-consumer
   #若不注册服务中心则值为N/A
   registry:
      address: zookeeper://127.0.0.1:2181

依赖注入

@SpringBootApplication
public class SpringbootCosumerApplication {

    //若进行服务注册 则此处不需要填写协议地址和服务名称
    @DubboReference(url = "dubbo://127.0.0.1:20880/cn.zzcfirst.IUserService")
	private IUserService userService;

    public static void main(String[] args) {
        SpringApplication.run(SpringbootCosumerApplication.class, args);
    }
    
    @Bean
    public ApplicationRunner runner(){
        return args->System.out.println(userService.getNameById("1"));
	}
}

五、ApacheDubbo的使用 – SpringCloud集成

1、创建服务提供者实现通用接口
2、配置服务提供者
3、创建服务调用者
4、配置服务调用者
5、依赖注入(不同于web方式)
6、启动服务即可

创建服务提供者实现通用接口

@DubboService
public class TestService implements IUserService {
    @Override
    public String getNameById(String s) {
        return "hello " + s;
    }
}

配置服务提供者

dubbo:
  protocol:
    port: 20880
    name: dubbo
  registry:
    address: zookeeper://127.0.0.1:2181
  application:
    id: provider
spring:
  cloud:
    zookeeper:
      discovery:
        register: true
      connect-string: 127.0.0.1:2181
  application:
    name: provider
server:
  port: 8888

创建服务调用者

@RestController
public class TestController {
    @DubboReference
	private IUserService userService;

    @GetMapping("/{uid}")
    public String test(@PathVariable("uid") String uid){
        return userService.getNameById(uid);
	}
}

配置服务调用者

dubbo:
  application:
    id: consumer
  protocol:
    port: 20880
    name: dubbo
  registry:
    address: zookeeper://127.0.0.1:2181
  cloud:
	subscribed-services: provider

spring:
  application:
    name: consumer
  cloud:
    zookeeper:
      discovery:
        register: false
      connect-string: 127.0.0.1:2181
server:
  port: 8881

依赖注入(不同于web方式)
见服务调用者代码
启动服务即可

六、配置文件方式配置项说明

配置项作用
<dubbo:application name=“user-provider”/>应用名称
<dubbo:registry address=“N/A”/>注册中心地址N/A表示不注册
<dubbo:protocol name=“dubbo” port=“20880”/>协议类型以及协议对应端口
<dubbo:service interface="cn.zzcfirst.IUserService"ref=“userService”/>暴露的服务接口以及参照的服务实现
< bean id=“userService” class=“cn.zzcfirst.service.UserServiceImpl”/>服务实现类
<dubbo:reference id="userService"interface=“cn.zzcfirst.IUserService” url=“dubbo://127.0.0.1:20880/cn.zzcfirst.IUserService”/>id配置服务id对应发布者暴露的服务interface为公共接口全类名url为协议+ip+端口+service中暴露的interface值(也就是公共接口名)

七、SpringBoot集成方式配置项以及注解说明

配置项作用
dubbo.application.name: springboot-provider服务的名称
dubbo.protocol.name: dubbo协议的名称
dubbo.protocol.port: 20880协议的端口
dubbo.registry.address: N/A注册服务器的地址(N/A表示不注册)
注解作用
@DubboComponentScan扫描包中的Dubbo组件
@DubboService标注为一个Dubbo服务
@DubboReference(url = “dubbo://127.0.0.1:20880/cn.zzcfirst.IUserService”)Dubbo依赖注入注解

八、SpringCloud集成方式配置项以及注解说明

配置项作用
dubbo.application.id: provider服务的id
dubbo.protocol.name: dubbo协议的名称
dubbo.protocol.port: 20880协议的端口
spring: cloud: zookeeper: discovery: register: true将服务注册到zookeeper
spring: cloud: zookeeper: connect-string: 127.0.0.1:2181注册地址为127.0.0.1:2181
dubbo: cloud: subscribed-services: provider订阅的服务名称 默认为*全部
注解作用
@DubboComponentScan扫描包中的Dubbo组件
@DubboService标注为一个Dubbo服务
@DubboReferenceDubbo依赖注入注解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值