dubbo入门

dubbo入门

什么是dubbo

Apache Dubbo™ 是一款高性能Java RPC框架。

dubbo在微服务架构中担任着注册/发现服务的角色,这里丢一张官网的流程图
dubbo流程图

其中有五个组件

  1. container:服务运行的容器
  2. provider:服务提供者
  3. registry:注册中心
  4. consumer:服务消费者
  5. monitor:监控中心

大致的流程是服务提供者将自己的服务注册到注册中心,消费者通过注册中心订阅提供者的地址,在注册中心拿到提供者的地址后,远程调用提供者的服务.

其中注册中心是必不可少的,所以我们需要先安装注册中心,dubbo支持多种注册中心,官方推荐zookeeper,也可以尝试一波阿里开源的nacos.

系统架构

spring-boot-dubbo-demo
  |-- dubbo-service
  |-- dubbo-consumer
  |-- dubbo-provider

以上是系统的大致架构,其中spring-boot-dubbo-demo为父模块,dubbo-service模块写接口,dubbo-consumer为消费者,dubbo-provider为提供者.需要注意的是消费者和提供者都依赖于接口模块,但他们之间不相互依赖.

新建一个spring-boot工程,引入dubbo的依赖,因为注册中心为zookeeper,所以也需要引入zookeeper的依赖

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

  <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>com.alibaba.spring.boot</groupId>
              <artifactId>dubbo-spring-boot-starter</artifactId>
              <version>2.0.0</version>
          </dependency>

          <dependency>
              <groupId>org.apache.zookeeper</groupId>
              <artifactId>zookeeper</artifactId>
              <version>3.4.14</version>
          </dependency>
          <dependency>
              <groupId>com.101tec</groupId>
              <artifactId>zkclient</artifactId>
              <version>0.4</version>
          </dependency>
      </dependencies>
  </dependencyManagement>

service

新建一个dubbo-service的module,这里就写一个简单的hello接口

public interface HelloService {
    String helloWorld();
}

服务提供者

  1. 新建一个dubbo-provider的module,pom文件如下:
    <dependencies>
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.demo</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>
  1. 新建一个java类,实现刚刚的HelloService接口
  @Service
  @Component
  @Slf4j
  public class HelloServiceImpl implements HelloService {
      @Override
      public String helloWorld() {
          log.info("hello world");
          return "hello world";
      }
  }
  

@Service注解是dubbo包的注解,并不是spring的注解
@Component,实测不加这个注解会注册不成功

  1. 创建spring-boot入口类
@SpringBootApplication
@EnableDubboConfiguration
public class ProviderApp {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApp.class, args);
    }
}

  1. 新建一个application.properties
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider 
spring.dubbo.server=true  ##表示开启dubbo服务
spring.dubbo.registry.address=zookeeper://localhost:2181  ##注册中心地址
spring.dubbo.protocol.name=dubbo  ##协议名称,默认dubbo
spring.dubbo.protocol.port=20883  ##有多个提供者时需要指定端口防止冲突,默认20881
spring.dubbo.scan=com.demo.provider.service

  1. 启动提供者,观察控制台,如果有zookeeper包打印的信息,表示注册成功,实在不放心可以查看zookeeper的节点有没有接口

服务消费者

  1. 新建dubbo-consumer的module,消费者所需的依赖于提供者相同
  2. 新建一个DemoService类
@Service
public class DemoService {

    @Reference(check = false)
    HelloService helloService;

    public String hello(){
        return  helloService.helloWorld();
    }
}

@Service为spring包下的注解
@Reference为dubbo包下的注解,其中check表示启动时是否检查提供者的存在,默认为true,此时若提供者不存在,消费者无法启动

  1. 新建一个HelloController类
@RestController
public class HelloController {

    @Autowired
    DemoService demoService;

    @GetMapping("/hello")
    public String hello() {
        return demoService.hello();
    }
}

4.新建一个入口函数

@SpringBootApplication
@EnableDubboConfiguration
public class ConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApp.class, args);
    }
}
  1. application配置如下:
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://localhost:2181
spring.dubbo.scan=com.demo.consumer.service

server.port=8081
  1. 启动消费者,访问localhost:8080/hello

参考

GitHub - alibaba/dubbo-spring-boot-starter: Dubbo Spring Boot Starter
dubbo官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值