介绍

Dubbo是一个应用的远程调用服务,还提供了统计服务的次数和调用时间,对接第三方的注册中心。

本文将结合Dubbo与ZooKeeper两个框架来实现一个简单的调用过程和详细配置的讲解。

使用

在使用Dubbo之前请确保ZooKeeper的zkServer和zkCli已经启用了。

—稍后补充流程图

api配置

独立的api项目模块,用于服务者实现,消费者引用此接口去调用。

public interface DemoService {

    String sayHello(String name);

}
服务者配置

只有 group,interface,version 是服务的匹配条件,三者决定是不是同一个服务,其它配置项均为调优和治理参数。

1,java配置

/**
 * 服务者提供者实现api模块的DemoService接口,注解@DubboService来提供对外提供服务。
 * version:当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
 */
@DubboService(version = "${demo.service.version}")
public class DefaultDemoService implements DemoService {

    @Override
    public String sayHello(String name) {
        return String.format("Hello  Hello, %s", name);
    }
}

2,yml配置

# Spring boot application
spring.application.name=dubbo-registry-zookeeper-provider-sample
# Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
dubbo.scan.base-packages=org.apache.dubbo.spring.boot.sample.provider.service

# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
## dubbo.application.name=${spring.application.name}

# Dubbo Protocol
dubbo.protocol.name=dubbo
## Random port
dubbo.protocol.port=-1

## Dubbo Registry
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache

## DemoService version
demo.service.version=1.0.0
消费者配置

调用服务者的服务,java类配置

@EnableAutoConfiguration
public class DubboRegistryZooKeeperConsumerBootstrap {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 申请去调用服务者类,可
     * loadbalance:集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。如果服务者和消费者都有loadbalance则按照
     */
    @DubboReference(version = "${demo.service.version}" ,loadbalance = "consistenthash")
    private DemoService demoService;

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

    @Bean
    public ApplicationRunner runner() {
        return args -> logger.info(demoService.sayHello("我是蒋犇犇"));
    }

}

yml配置

spring:
  application:
    name: dubbo-registry-zookeeper-consumer-sample

demo:
  service:
    version: 1.0.0

# 连接zookeeper的端口
embedded:
  zookeeper:
    port: 2181

dubbo:
  registry:
    # 连接注册中心的ip和port
    address: zookeeper://127.0.0.1:${embedded.zookeeper.port}
    # 使用文件缓存注册中心地址列表及服务提供者列表,应用重启时将基于此文件恢复,注意:两个注册中心不能使用同一文件存储
    file: ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache

详细配置

标签上配置属性时,方法级优先,接口级次之,全局配置再次之。如果级别一样,则消费方优先,提供方次之。

<dubbo:service/>
服务配置 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心

<dubbo:reference/> 
引用配置 用于创建一个远程服务代理,一个引用可以指向多个注册中心

<dubbo:protocol/>
协议配置 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受

<dubbo:application/>
应用配置 用于配置当前应用信息,不管该应用是提供者还是消费者

<dubbo:module/>
模块配置 用于配置当前模块信息,可选

<dubbo:registry/>
注册中心配置 用于配置连接注册中心相关信息

<dubbo:monitor/>
监控中心配置 用于配置连接监控中心相关信息,可选

<dubbo:provider/>
提供方配置 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选

<dubbo:consumer/>
消费方配置 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选

<dubbo:method/>
方法配置 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息

<dubbo:argument/>
参数配置 用于指定方法参数配置

运维平台

正式版

正式版还是几年前的,太老旧了,也不知道什么时候更新,听闻新版本将会把监控中心、动态配置等全部加进去。

  1. windows上随便找个地址,创建一个docker-compose.yml文件,内容如下:
version: '3'

services:
  zookeeper:
    image: zookeeper
    ports:
      - 2181:2181
  admin:
    image: apache/dubbo-admin
    depends_on:
      - zookeeper
    ports:
      - 8080:8080
    environment:
      - admin.registry.address=zookeeper://zookeeper:2181
      - admin.config-center=zookeeper://zookeeper:2181
      - admin.metadata-report.address=zookeeper://zookeeper:2181

2.在windows的cmd控制台切换到docker-compose.yml文件所在目录,运行docker-compose up(docker-compose软件要另行安装)

3.在宿主机浏览器上运行localhost:8080就可以看到dubbo admin的后台了