分布式系统理论
分布式系统是一组通过网络进行通信、为了完成共同工作而协同工作的计算机节点组成的系统。 分布式系统是为了用普通、廉价的机器完成单个机器无法完成的计算量、存储任务,目的是利用更多的机器处理更多的数据
RPC
RPC即远程过程调用,是一种进程间通信方式,它允许程序调用另一个地址空间(通常指共享网络的另一台机器上)的过程或函数 RPC核心模块:通信、序列化
Dubbo
dubbo是一款高性能、轻量级的开源Java RPC框架,它提供三大核心能力:面向接口的远程方法调用、智能容错和负载均衡、服务自动注册和发现
springboot整合
先安装zookeeper
生产者
配置
server.port=8001
#当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.example.service
代码
package com.example.service;
public interface SayHello {
public String sayHello();
}
package com.example.service;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service
public class SayHelloImpl implements SayHello {
@Override
public String sayHello() {
return "hello world";
}
}
消费者
配置
server.port=8002
#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
代码
注意:生产者和消费者中都有一个SayHello 接口,且他们的路径一样
package com.example.service;
public interface SayHello {
public String sayHello();
}
package com.example.service;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Reference
SayHello sayHello;
public void hello(){
System.out.println(sayHello.sayHello());
}
}
消费者端测试
package com.example;
import com.example.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
class ConsumerServerApplicationTests {
@Autowired
UserService userService;
@Test
public void contextLoads(){
userService.hello();
}
}
结果:
总结
- 前提:zookeeper开启
- 提供者提供服务
A. 导入依赖 B. 配置注册中心的地址,配置服务发现名,扫描包 C. 在要被注册的服务上增加@service注解 - 消费者消费
A. 导入依赖 B. 配置注册中心地址,配置自己的服务名 C. 从远程注入服务
|