Posted in Spring, Spring Boot, 技术

Spring Boot Dubbo applications.properties 配置清单

摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢!

『 与其纠结,不如行动学习。Innovate ,And out execute ! 』

本文提纲
一、前言
二、applications.properties 配置清单
三、@Service 服务提供者常用配置
四、@Reference 服务消费者常用配置
五、小结

 

运行环境:JDK 7 或 8、Maven 3.0+
技术栈:SpringBoot 1.5+、、Dubbo 2.5+

一、前言

在泥瓦匠出的
Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

Spring Boot 中如何使用 Dubbo Activate 扩展点

两篇文章后,很多人跟我聊 Spring Boot 整合 Dubbo 的细节问题。当然最多的是配置问题,比如
Q:如果一个程序既提供服务又是消费者怎么配置 scan package?
A(群友周波): 就是 com.xxx.provider 生产者,com.xxx.consumer 消费者,那么 scan package 就设置到 com.xxx

 

Q:如何设置消费者调用生产者的超时时间?
A:目前不能通过 application.properties 定义。@Reference timeout

 

Q:consumer 怎么配置接入多个 provider?
A:@Reference 可以指定不同的 register。register (注册中心 like provider container)里面可以对应多个 provider

 

Q: @Service(version = “1.0.0”) 这个 1.0.0 可以从 application.properties 配置文件中读取吗?可以区分不同的环境,可以统一升级管理
A:占时还没有解决… 但是应用环境,如:dev/test/run 可以使用下面的配置,在 application.properties 定义
spring.dubbo.application.environment

Spring Boot 整合 Dubbo 的项目依赖了 spring-boot-starter-dubbo 工程,该项目地址是 https://github.com/teaey/spring-boot-starter-dubbo。 感谢作者~

二、applications.properties 配置清单

根据 starter 工程源码,可以看出 application.properties 对应的 Dubbo 配置类 DubboProperties 。

@ConfigurationProperties(prefix = "spring.dubbo")
public class DubboProperties {

    private String scan;

    private ApplicationConfig application;

    private RegistryConfig registry;

    private ProtocolConfig protocol;
}

包括了扫描路径、应用配置类、注册中心配置类和服务协议类

 

所以具体常用配置下
扫描包路径:指的是 Dubbo 服务注解的服务包路径

## Dubbo 配置
# 扫描包路径
spring.dubbo.scan=org.spring.springboot.dubbo

 

应用配置类:关于 Dubbo 应用级别的配置

## Dubbo 应用配置
# 应用名称
spring.dubbo.application.name=xxx

# 模块版本
spring.dubbo.application.version=xxx

# 应用负责人
spring.dubbo.application.owner=xxx

# 组织名(BU或部门)
spring.dubbo.application.organization=xxx

# 分层
spring.dubbo.application.architecture=xxx

# 环境,如:dev/test/run
spring.dubbo.application.environment=xxx

# Java代码编译器
spring.dubbo.application.compiler=xxx

# 日志输出方式
spring.dubbo.application.logger=xxx

# 注册中心 0
spring.dubbo.application.registries[0].address=zookeeper:#127.0.0.1:2181=xxx
# 注册中心 1
spring.dubbo.application.registries[1].address=zookeeper:#127.0.0.1:2181=xxx

# 服务监控
spring.dubbo.application.monitor.address=xxx

这里注意多个注册中心的配置方式。下面介绍单个注册中心的配置方式。

 

注册中心配置类:常用 ZooKeeper 作为注册中心进行服务注册。

## Dubbo 注册中心配置类
# 注册中心地址
spring.dubbo.application.registries.address=xxx

# 注册中心登录用户名
spring.dubbo.application.registries.username=xxx

# 注册中心登录密码
spring.dubbo.application.registries.password=xxx

# 注册中心缺省端口
spring.dubbo.application.registries.port=xxx

# 注册中心协议
spring.dubbo.application.registries.protocol=xxx

# 客户端实现
spring.dubbo.application.registries.transporter=xxx

spring.dubbo.application.registries.server=xxx

spring.dubbo.application.registries.client=xxx

spring.dubbo.application.registries.cluster=xxx

spring.dubbo.application.registries.group=xxx

spring.dubbo.application.registries.version=xxx

# 注册中心请求超时时间(毫秒)
spring.dubbo.application.registries.timeout=xxx

# 注册中心会话超时时间(毫秒)
spring.dubbo.application.registries.session=xxx

# 动态注册中心列表存储文件
spring.dubbo.application.registries.file=xxx

# 停止时等候完成通知时间
spring.dubbo.application.registries.wait=xxx

# 启动时检查注册中心是否存在
spring.dubbo.application.registries.check=xxx

# 在该注册中心上注册是动态的还是静态的服务
spring.dubbo.application.registries.dynamic=xxx

# 在该注册中心上服务是否暴露
spring.dubbo.application.registries.register=xxx

# 在该注册中心上服务是否引用
spring.dubbo.application.registries.subscribe=xxx

 

服务协议配置类:

## Dubbo 服务协议配置


# 服务协议
spring.dubbo.application.protocol.name=xxx

# 服务IP地址(多网卡时使用)
spring.dubbo.application.protocol.host=xxx

# 服务端口
spring.dubbo.application.protocol.port=xxx

# 上下文路径
spring.dubbo.application.protocol.contextpath=xxx

# 线程池类型
spring.dubbo.application.protocol.threadpool=xxx

# 线程池大小(固定大小)
spring.dubbo.application.protocol.threads=xxx

# IO线程池大小(固定大小)
spring.dubbo.application.protocol.iothreads=xxx

# 线程池队列大小
spring.dubbo.application.protocol.queues=xxx

# 最大接收连接数
spring.dubbo.application.protocol.accepts=xxx

# 协议编码
spring.dubbo.application.protocol.codec=xxx

# 序列化方式
spring.dubbo.application.protocol.serialization=xxx

# 字符集
spring.dubbo.application.protocol.charset=xxx

# 最大请求数据长度
spring.dubbo.application.protocol.payload=xxx

# 缓存区大小
spring.dubbo.application.protocol.buffer=xxx

# 心跳间隔
spring.dubbo.application.protocol.heartbeat=xxx

# 访问日志
spring.dubbo.application.protocol.accesslog=xxx

# 网络传输方式
spring.dubbo.application.protocol.transporter=xxx

# 信息交换方式
spring.dubbo.application.protocol.exchanger=xxx

# 信息线程模型派发方式
spring.dubbo.application.protocol.dispatcher=xxx

# 对称网络组网方式
spring.dubbo.application.protocol.networker=xxx

# 服务器端实现
spring.dubbo.application.protocol.server=xxx

# 客户端实现
spring.dubbo.application.protocol.client=xxx

# 支持的telnet命令,多个命令用逗号分隔
spring.dubbo.application.protocol.telnet=xxx

# 命令行提示符
spring.dubbo.application.protocol.prompt=xxx

# status检查
spring.dubbo.application.protocol.status=xxx

# 是否注册
spring.dubbo.application.protocol.status=xxx

三、@Service 服务提供者常用配置

常用 @Service 配置的如下

version 版本
group 分组
provider 提供者
protocol 服务协议
monitor 服务监控
registry 服务注册
…

 

四、@Reference 服务消费者常用配置

常用 @Reference 配置的如下

version 版本
group 分组
timeout 消费者调用提供者的超时时间
consumer 服务消费者
monitor 服务监控
registry 服务注册

 

五、小结

主要介绍了 Spring Boot Dubbo 整合中的细节问题大集合。

推荐:《Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

 

欢迎扫一扫我的公众号关注 — 及时得到博客订阅哦!
— http://www.bysocket.com/ —
— https://github.com/JeffLi1993 —

Posted in Spring, Spring Boot, 技术

Spring Boot 中如何使用 Dubbo Activate 扩展点

摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢!

『 公司的核心竞争力在于创新 – 《启示录》 』

继续上一篇:《 Springboot 整合 Dubbo/ZooKeeper 》,在 Spring Boot 使用 Dubbo Activate 扩展点。这是一个群友问的,我总结下,分享给更多人。

本文提纲
一、什么是 Dubbo Activate 注解
二、使用 Dubbo Activate
三、小结

 

运行环境:JDK 7 或 8,Maven 3.0+
技术栈:SpringBoot 1.5+、Dubbo 2.5+、ZooKeeper 3.3+

 

一、什么是 Dubbo Activate 注解

@Activate 是一个 Duboo 框架提供的注解。在 Dubbo 官方文档上有记载:
对于集合类扩展点,比如:Filter, InvokerListener, ExportListener, TelnetHandler, StatusChecker等, 可以同时加载多个实现,此时,可以用自动激活来简化配置。

 

用 @Activate 来实现一些 Filter ,可以具体如下:
1. 无条件自动激活
直接使用默认的注解即可

import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.Filter;
 
@Activate // 无条件自动激活
public class XxxFilter implements Filter {
    // ...
}

 

2. 配置 xxx 参数,并且参数为有效值时激活,比如配了cache=”lru”,自动激活 CacheFilter

import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.Filter;
 
@Activate("xxx") // 当配置了xxx参数,并且参数为有效值时激活,比如配了cache="lru",自动激活CacheFilter。
public class XxxFilter implements Filter {
    // ...
}

 

3. 只对提供方激活,group 可选 provider 或 consumer

import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.Filter;
 
@Activate(group = "provider", value = "xxx") 
// 只对提供方激活,group可选"provider"或"consumer"
public class XxxFilter implements Filter {
    // ...
}

 

二、使用 Dubbo Activate 注解

基于以前的 springboot-dubbo-server 和 springboot-dubbo-client 工程,GitHub 地址:https://github.com/JeffLi1993/springboot-learning-example 。

这里我们在消费端,既 springboot-dubbo-client 工程上添加一个 Filter。代码如下:

package com.xxx;
 
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcException;
 
 
public class XxxFilter implements Filter {
    public Result invoke(Invoker<?> invoker, 
Invocation invocation) throws RpcException {
        // before filter ...
        Result result = invoker.invoke(invocation);
        // after filter ...
        return result;
    }
}

 

启动 client 工程发现,Console 报错,出现:

Caused by: java.lang.IllegalStateException: No such extension dubboConsumerFilter for filter/com.alibaba.dubbo.rpc.Filter

发现这个 Filter 初始化时,报错了。证明没有配置成功。

 

原来根据官方文档中描述,我们需要配置扩展点配置文件。

在 META-INF 中配置:

xxx=com.xxx.XxxFilter

Maven 项目目录结构

src
 |-main
    |-java
        |-com
            |-xxx
                |-XxxFilter.java (实现Filter接口)
    |-resources
        |-META-INF
            |-dubbo
                |-com.alibaba.dubbo.rpc.Filter (纯文本文件,内容为:xxx=com.xxx.XxxFilter)

三、小结

调用拦截扩展的应用场景很多,比如黑白名单,比如 IP 等。

 

欢迎扫一扫我的公众号关注 — 及时得到博客订阅哦!
http://www.bysocket.com/
https://github.com/JeffLi1993

Posted in Spring, Spring Boot, 技术

Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!
“看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然。所以,无论什么事情,仔细想一想,都没有什么大不了的。这能帮助自己在遇到挫折时稳定心态,想得更开。”  – 《腾讯传》
本文提纲
一、为啥整合 Dubbo 实现 SOA
二、运行 springboot-dubbo-server 和 springboot-dubbo-client 工程
三、springboot-dubbo-server 和 springboot-dubbo-client 工程配置详解

Spring Boot 系列文章:《Spring Boot 那些事

 

一、为啥整合 Dubbo 实现 SOA

Dubbo 不单单只是高性能的 RPC 调用框架,更是 SOA 服务治理的一种方案。
核心
1. 远程通信,向本地调用一样调用远程方法。
2. 集群容错
3. 服务自动发现和注册,可平滑添加或者删除服务提供者。
我们常常使用 Springboot 暴露 HTTP 服务,并走 JSON 模式。但慢慢量大了,一种 SOA 的治理方案。这样可以暴露出 Dubbo 服务接口,提供给 Dubbo 消费者进行 RPC 调用。下面我们详解下如何集成 Dubbo。

 

二、运行 springboot-dubbo-server 和 springboot-dubbo-client 工程

运行环境:JDK 7 或 8,Maven 3.0+
技术栈:SpringBoot 1.5+、Dubbo 2.5+、ZooKeeper 3.3+

 

1.ZooKeeper 服务注册中心
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
下载 ZooKeeper ,地址 http://www.apache.org/dyn/closer.cgi/zookeeper
解压 ZooKeeper
tar zxvf zookeeper-3.4.8.tar.gz
在 conf 目录新建 zoo.cfg ,照着该目录的 zoo_sample.cfg 配置如下。
cd zookeeper-3.3.6/conf
vim zoo.cfg
zoo.cfg 代码如下(自己指定 log 文件目录):
tickTime=2000
dataDir=/javaee/zookeeper/data 
dataLogDir=/javaee/zookeeper/log
clientPort=2181
在 bin 目录下,启动 ZooKeeper:
cd zookeeper-3.3.6/bin
./zkServer.sh start

 

2. git clone 下载工程 springboot-learning-example
git clone git@github.com:JeffLi1993/springboot-learning-example.git

然后,Maven 编译安装这个工程:

cd springboot-learning-example
mvn clean install

 

3.运行 springboot-dubbo-server Dubbo 服务提供者工程
右键运行 springboot-dubbo-server 工程 ServerApplication 应用启动类的 main 函数。Console 中出现如下表示项目启动成功:
这里表示 Dubbo 服务已经启动成功,并注册到 ZK (ZooKeeper)中。

 

4.运行 springboot-dubbo-client Dubbo 服务消费者工程

右键运行 springboot-dubbo-client 工程 ClientApplication 应用启动类的 main 函数。Console 中出现如下:

...
2017-03-01 16:31:38.473  INFO 9896 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2017-03-01 16:31:38.538  INFO 9896 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-03-01 16:31:38.547  INFO 9896 --- [           main] org.spring.springboot.ClientApplication  : Started ClientApplication in 6.055 seconds (JVM running for 7.026)
City{id=1, provinceId=2, cityName='温岭', description='是我的故乡'}
最后打印的城市信息,就是通过 Dubbo 服务接口调用获取的。顺利运行成功,下面详解下各个代码及配置。

 

三、springboot-dubbo-server 和 springboot-dubbo-client 工程配置详解

1.详解 springboot-dubbo-server Dubbo 服务提供者工程
springboot-dubbo-server 工程目录结构
├── pom.xml
└── src
    └── main
        ├── java
        │   └── org
        │       └── spring
        │           └── springboot
        │               ├── ServerApplication.java
        │               ├── domain
        │               │   └── City.java
        │               └── dubbo
        │                   ├── CityDubboService.java
        │                   └── impl
        │                       └── CityDubboServiceImpl.java
        └── resources
            └── application.properties

 

a.pom.xml 配置

pom.xml 中依赖了 spring-boot-starter-dubbo 工程,该项目地址是 https://github.com/teaey/spring-boot-starter-dubbo。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>springboot</groupId>
    <artifactId>springboot-dubbo-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-dubbo 服务端:: 整合 Dubbo/ZooKeeper 详解 SOA 案例</name>

    <!-- Spring Boot 启动父依赖 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>

    <properties>
        <dubbo-spring-boot>1.0.0</dubbo-spring-boot>
    </properties>

    <dependencies>

        <!-- Spring Boot Dubbo 依赖 -->
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>${dubbo-spring-boot}</version>
        </dependency>

        <!-- Spring Boot Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Boot Test 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>
b.application.properties 配置

## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=org.spring.springboot.dubbo
这里 ZK 配置的地址和端口,就是上面本机搭建的 ZK 。如果有自己的 ZK 可以修改下面的配置。配置解释如下:
spring.dubbo.application.name 应用名称
spring.dubbo.registry.address 注册中心地址
spring.dubbo.protocol.name 协议名称
spring.dubbo.protocol.port 协议端口
spring.dubbo.scan dubbo 服务类包目录
c.CityDubboServiceImpl.java 城市业务 Dubbo 服务层实现层类
// 注册为 Dubbo 服务
@Service(version = "1.0.0")
public class CityDubboServiceImpl implements CityDubboService {

    public City findCityByName(String cityName) {
        return new City(1L,2L,"温岭","是我的故乡");
    }
}
@Service 注解标识为 Dubbo 服务,并通过 version 指定了版本号。
d.City.java 城市实体类
实体类通过 Dubbo 服务之间 RPC 调用,则需要实现序列化接口。最好指定下 serialVersionUID 值。

 

2.详解 springboot-dubbo-client Dubbo 服务消费者工程
springboot-dubbo-client 工程目录结构
├── pom.xml
└── src
    └── main
        ├── java
        │   └── org
        │       └── spring
        │           └── springboot
        │               ├── ClientApplication.java
        │               ├── domain
        │               │   └── City.java
        │               └── dubbo
        │                   ├── CityDubboConsumerService.java
        │                   └── CityDubboService.java
        └── resources
            └── application.properties
pom.xml 、 CityDubboService.java、City.java 没有改动。Dubbo 消费者通过引入接口实现 Dubbo 接口的调用。

 

a.application.properties 配置
## 避免和 server 工程端口冲突
server.port=8081

## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=org.spring.springboot.dubbo
因为 springboot-dubbo-server 工程启动占用了 8080 端口,所以这边设置端口为 8081。

 

b.CityDubboConsumerService.java 城市 Dubbo 服务消费者
@Component
public class CityDubboConsumerService {

    @Reference(version = "1.0.0")
    CityDubboService cityDubboService;

    public void printCity() {
        String cityName="温岭";
        City city = cityDubboService.findCityByName(cityName);
        System.out.println(city.toString());
    }
}
@Reference(version = “1.0.0”) 通过该注解,订阅该接口版本为 1.0.0 的 Dubbo 服务。
这里将 CityDubboConsumerService 注入 Spring 容器,是为了更方便的获取该 Bean,然后验证这个 Dubbo 调用是否成功。

 

c.ClientApplication.java 客户端启动类
@SpringBootApplication
public class ClientApplication {

    public static void main(String[] args) {
        // 程序启动入口
        // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
        ConfigurableApplicationContext run = SpringApplication.run(ClientApplication.class, args);
        CityDubboConsumerService cityService = run.getBean(CityDubboConsumerService.class);
        cityService.printCity();
    }
}
解释下这段逻辑,就是启动后从 Bean 容器中获取城市 Dubbo 服务消费者 Bean。然后调用该 Bean 方法去验证 Dubbo 调用是否成功。

 

四、小结

还有涉及到服务的监控,治理。这本质上和 SpringBoot 无关,所以这边不做一一介绍。感谢阿里 teaey 提供的 starter-dubbo 项目。

 

欢迎扫一扫我的公众号关注 — 及时得到博客订阅哦!
— http://www.bysocket.com/ —
— https://github.com/JeffLi1993 —
Posted in Working Skills, 技术

Dubbo实战一:快速入门 [译]

本文根据https://github.com/alibaba/dubbo 的README,然后实战操作记录如下:

一、简介

Dubbo不单单只是高性能的RPC调用框架,更是SOA服务治理的一种方案。

核心:

1. 远程通信,向本地调用一样调用远程方法。

2. 集群容错

3. 服务自动发现和注册,可平滑添加或者删除服务提供者。

二、快速入门

环境:Maven,git,jdk

1. 克隆dubbo开源项目

  1. cd ~
  2. git clone https://github.com/alibaba/dubbo.git

2. Maven编译项目

  1. cd ~/dubbo
  2. mvn clean install -Dmaven.test.skip ## 跳过测试

下面核心点有:zookeeper作为注册中心(服务订阅和发布依托于注册中心)、服务生产者(提供服务)项目、服务生产者(提供服务)项目和监控Web项目。

过程如下:

3. 下载启动zk

  1. cd ~
  2. ## 下载解压
  3. wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
  4. tar zxvf zookeeper-3.3.3.tar.gz
  5. ## 启动
  6. cd ../bin
  7. ./zkServer.sh start

下面项目遇到target目录中编译好的项目为xxx.tar.gz。请自行用下面命令解压:

  1. tar zxvf XXX.tar.gz

4. 启动服务消费者

  1. cd ~/dubbo/dubbo-demo/dubbo-demo-consumer/target/dubbo-demo-consumer-2.5.4-SNAPSHOT/conf
  2. vim dubbo.properties
  3.    - edit: dubbo.registry.adddress=zookeeper://127.0.0.1:2181 ## 更改注册中心为zk
  4. cd ../bin
  5. sh ./start.sh

5. 启动服务生产者

  1. cd ~/dubbo/dubbo-demo/dubbo-demo-provider/target/dubbo-demo-provider-2.5.4-SNAPSHOT/conf
  2. vim dubbo.properties
  3.   - edit: dubbo.registry.adddress=zookeeper://127.0.0.1:2181
  4. cd ../bin
  5. sh ./start.sh

其实到这里已经o了,可以打开生产者消费者项目的log进行查看:

  1. ## 打开消费者的log
  2. cd dubbo-demo-consumer/target/dubbo-demo-consumer-2.5.4-SNAPSHOT/logs
  3. tail -f dubbo-demo-consumer.log

熟悉的Hello,World的案例coming…

6. 启动监控Web项目

  1. cd ~/dubbo/dubbo-simple/dubbo-monitor-simple/target/dubbo-monitor-simple-2.5.4-SNAPSHOT/conf
  2. vim dubbo.properties
  3.    - edit: dubbo.registry.adddress=zookeeper://127.0.0.1:2181
  4. cd ../bin./start.sh
  5. ## 浏览器访问
  6. http://127.0.0.1:8080

可以在监控中看到消费者,生产者实例等信息