Dubbo是一个基于Java的高性能RPC框架,由阿里巴巴开源。RPC (Remote Procedure Call) 远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 Dubbo 提供了完整的服务治理方案,包括服务注册、发现、负载均衡、容错、分组路由和监控等。
下面我们来一步步学习Dubbo的使用。
1.安装Dubbo
首先我们需要在maven中加入Dubbo依赖包:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.6</version>
</dependency>
2.配置Dubbo
在Dubbo中,提供者和消费者之间的交互需要通过注册中心来协调管理。Dubbo支持多种注册中心,例如zookeeper、Redis等,这里我们使用zookeeper。
<!-- 引入Zookeeper的依赖 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- Dubbo中使用的Zookeeper客户端,需要单独引入 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-registery-zookeeper</artifactId>
<version>2.5.6</version>
</dependency>
配置Dubbo的dubbo.properties
文件:
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 服务提供者应用名称
dubbo.application.name=demo-provider
# 服务提供者协议、端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
# 服务提供者暴露的接口
dubbo.provider.interface=com.example.demo.DemoService
3.编写服务提供者
编写一个简单的接口DemoService
:
public interface DemoService {
String sayHello(String name);
}
然后编写实现类DemoServiceImpl
:
@Service
public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello, " + name;
}
}
在实现类上添加@Service
注解,表示这是一个Dubbo服务。
4.发布服务
在服务提供者中创建Server
类:
public class Server {
public static void main(String[] args) throws IOException {
// 配置zookeeper地址
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("zookeeper://127.0.0.1:2181");
// 配置服务提供者
ServiceConfig<DemoService> serviceConfig = new ServiceConfig<>();
serviceConfig.setInterface(DemoService.class);
serviceConfig.setRef(new DemoServiceImpl());
serviceConfig.setRegistry(registryConfig);
// 开启服务
serviceConfig.export();
// 等待服务关闭
System.in.read();
}
}
在Server
类中,我们首先配置zookeeper地址,然后配置服务提供者,将DemoServiceImpl
实例化后设置到ServiceConfig
中,最后使用export()
方法发布服务。
5.编写服务消费者
编写一个简单的消费者:
public class Client {
public static void main(String[] args) {
// 配置zookeeper地址
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("zookeeper://127.0.0.1:2181");
// 配置服务消费者
ReferenceConfig<DemoService> referenceConfig = new ReferenceConfig<>();
referenceConfig.setInterface(DemoService.class);
referenceConfig.setRegistry(registryConfig);
// 获取服务实例
DemoService demoService = referenceConfig.get();
// 调用服务
String result = demoService.sayHello("World");
System.out.println(result);
}
}
在消费者中,我们也需要配置zookeeper地址和服务消费者,使用ReferenceConfig
获取服务实例,然后调用服务。
6.运行服务
我们需要先启动zookeeper服务:
$ bin/zkServer.sh start
然后运行服务提供者:
$ java Server
最后运行服务消费者:
$ java Client
执行结果应该会打印出:
Hello, World
至此,我们已经完成了Dubbo的入门学习。Dubbo还有很多强大的功能,例如负载均衡、容错、路由、监控等,我们可以结合具体的应用场景来学习。