官网传送门

Dubbo是什么

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

Dubbo架构

在这里插入图片描述

节点角色说明
节点角色说明
Provider暴露服务的服务提供方
Consumer调用远程服务的服务消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器
调用关系
  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

**简短截说:**服务提供方开发服务后向注册中心注册服务,服务消费方向注册中心订阅服务,注册中心把服务提供者地址推送给消费方,这样消费方就可以使用服务了。

Dubbo使用入门

主要有三个部分

注册中心

官方推荐使用zookeeper 参考链接2.3~2.7
安装:

// 下载压缩包
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
// 解压
tar zxvf zookeeper-3.3.3.tar.gz
// 进入解压后的目录
cd zookeeper-3.3.3
// 拷贝一份配置文件
cp conf/zoo_sample.cfg conf/zoo.cfg
// 创建一个保存数据的目录
mkdir data

配置:

// 编辑配置文件
vi conf/zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 上面查创建的data目录
dataDir=../data
# the port at which the clients will connect
# 端口号
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
# 单体应用
server.1=127.0.0.1:2888:3888
# 集群
#server.2=127.0.0.2:2890:3890
#server.3=127.0.0.3:2892:3892
# 在data目录下创建一个myid文件,并输入1保存退出,这个1对应配置文件中的server.1
cd data
vi myid
1

启动:
在bin目录下执行命令

// 启动  ./zkServer.sh start
macdeMacBook-Pro:bin mac$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/mac/Desktop/library/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
// 查看状态   ./zkServer.sh status
macdeMacBook-Pro:bin mac$ ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /Users/mac/Desktop/library/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
// 停止   ./zkServer.sh stop
macdeMacBook-Pro:bin mac$ ./zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /Users/mac/Desktop/library/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... ./zkServer.sh: line 213: kill: (983) - No such process
STOPPED
服务提供者
1. 引入依赖
<!-- zookeeper -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.5</version>
</dependency>

<!-- zookeeper客户端curator依赖 -->
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.2.0</version>
</dependency>
<!-- dubbo依赖 -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.2</version>
</dependency>
2. 开发服务(注解版)

和正常开发一样,创建一个service接口及实现类

public interface UserService {
    String hello();
}

import org.apache.dubbo.config.annotation.Service;
// 这里的Service是dubbo中的注解,不要和Spring中的Service搞混了
// 这个注解表示此服务为要向注册中心注册的服务
@Service
public class UserServiceImpl implements UserService {
    @Override
    public String hello() {
        System.out.println("服务提供者say hello。。。");
        return "服务提供者";
    }
}
3. Dubbo配置
// application.properties
# 服务提供者名称
dubbo.application.name=annotation-provider
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 通过dubbo协议的20880端口暴露服务
# 使用的协议名称
dubbo.protocol.name=dubbo
# 使用的协议端口号
dubbo.protocol.port=20880
4. 启动服务提供者

创建一个配置类并启动服务提供者,启动成功后可以在dubbo的管理控制台⬇️⬇️⬇️中看到服务已经注册成功。

@Configuration
@EnableDubbo(scanBasePackages = "com.hxm.provider.service.impl")
@PropertySource("classpath:application.properties")
public class ProviderApplication {

    public static void main(String[] args) throws IOException {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderApplication.class);
        context.start();
        // 让程序一直保持运行状态,让消费者可以调用服务,按任意键可退出
        System.in.read();
    }
}

在这里插入图片描述

服务消费者
1.引入依赖
<!-- zookeeper -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.5</version>
</dependency>

<!-- zookeeper客户端curator依赖 -->
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.2.0</version>
</dependency>
<!-- dubbo依赖 -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.2</version>
</dependency>
2.Dubbo配置
# 端口号
server.port=8090
# 服务消费者应用名称
dubbo.application.name=annotation-consumer
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
3.开发服务

这里只需要创建一个service接口并添加对应方法即可,不需要实现类。

public interface UserService {
    String hello();
}

我这里是在Controller中添加的service属性

@RestController
@RequestMapping("/user")
public class UserController {

	// dubbo注解,表示使用的是dubbo中的服务
    @Reference
    private UserService userService;

    @RequestMapping("/hello")
    public String hello() {
        System.out.println(userService.hello() + userService);
        return "hello";
    }
}
4.启动应用

启动应用并访问/user/hello
服务消费者控制台:接口调用成功,打印出提供者服务的返回结果以及服务对象
消费者控制台
服务提供者控制台:提供者服务调用成功,执行服务内的打印语句
提供者控制台

Dubbo管理控制台

官网介绍

Maven方式部署
// 下载项目
git clone https://github.com/apache/dubbo-admin.git
// 进入主目录
cd dubbo-admin
// 清空旧的安装包并重新打包
mvn clean package
// 进入打包目录下
cd dubbo-admin-distribution/target
// 通过java命令启动项目
java -jar dubbo-admin-0.1.jar

访问localhost:8080即可进入控制台。
因为我的zookeeper启动时启动了一个Java进程占用了8080端口,所以需要修改一下端口号,在dubbo-admin/dubbo-admin-server/src/main/resources/application.properties中修改端口号就可以了server.port=8081。
另外因为我这里的服务提供者和消费者都是单独的project,所以也需要修改两个项目的端口号,在对应的application.properties中修改server.port=xxxx即可

后续。。。
  1. zookeeper客户端zkclient和acurtor的详细配置和使用
  2. zookeeper集群配置及使用
  3. dubbo监控中心的配置及使用
  4. dubbo单项目和多项目的配置的使用


学习尚浅,如有不足,欢迎指出,谢谢?


回到顶部

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐