SpringBoot篇——了解分布式,初识RPC、Dubbo以及Zookeeper的作用和使用方法
RPC(Remote Procedure Call)即远程过程调用,是一种允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数的通信协议。它的主要目标是让你像调用本地函数一样调用远程的子程序。
Dubbo是一个分布式服务框架,在中高并发服务架构中使用较多。它的主要目标是解决分布式系统的服务调用问题,提供容易使用的RPC远程服务调用方法。
Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它的主要目标是为分布式应用提供一种高效、可靠的分布式协调服务。
**Dubbo与Zookeeper的关系:**Dubbo 基于 Zookeeper 实现服务的注册与发现。
Dubbo使用方法:
- 引入Dubbo和Zookeeper的依赖。
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- Zookeeper Client -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
- 在application.properties或application.yml中配置Dubbo和Zookeeper。
# Dubbo 应用名称
dubbo.application.name=demo-provider
# Dubbo 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# Dubbo 协议名称和端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
# Dubbo 包扫描
dubbo.scan.base-packages=com.example.service
- 创建服务接口和实现。
public interface DemoService {
String sayHello(String name);
}
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "Hello, " + name + "!";
}
}
- 暴露服务。
@EnableDubbo
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
- 在消费者中引用服务。
@DubboReference
private DemoService demoService;
public void execute() {
String result = demoService.sayHello("World");
System.out.println(result);
}
以上是使用Dubbo框架的基本步骤,实现服务的提供和消费。
Zookeeper使用方法:
- 引入Zookeeper的依赖。
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
- 创建Zookeeper客户端并使用。
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", retryPolicy);
client.start();
String path = "/service";
byte[] data = "some data".getBytes();
client.create().cre
评论已关闭