RPC就是远程过程调用,依赖于分布式系统。这里建立了两个简单的项目,模拟服务方法的远程调用。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,主要是协调各个服务程序之间的运行。
-
1.创建两个简单的springboot项目,分别命名为消费者与服务提供者
- 服务提供者(接口+实现类),在项目启动类上需加上@EnableDubbo 注解
public interface TicketService { public String getTicket(); }
@DubboService //被扫描后自动注册到注册中心 @Component public class TicketServiceImpl implements TicketService{ @Override public String getTicket() { return "这里我最帅!"; } }
-
消费者(约束接口+服务调用类)
public interface TicketService { //与服务者的接口一致,作为调用约束 public String getTicket(); }
public interface UserService { //接口 public String buyTicket(); }
@DubboService @Component("userService") public class UserServiceImpl implements UserService{ //实现类 //想远程调用服务,需要去注册中心拿到服务 @DubboReference //远程引用 TicketService ticketService; @Override public String buyTicket(){ String ticket = ticketService.getTicket(); System.out.println("在注册中心拿到===>"+ticket); return ticket; } }
-
测试controller
@RestController public class TestController { @Autowired @Qualifier("userService") UserServiceImpl userServiceImpl; @RequestMapping("/test") public String test01(){ return userServiceImpl.buyTicket(); } }
-
-
2.导入所需要的的约束(两个项目都需要)
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.8</version> </dependency> <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
-
3.下载并启动zookeeper服务
-
4.先启动服务提供者项目,再启动消费者项目
测试结果: