概述
Dubbo
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
SpringCloud
解决方案
实操
Dubbo实现跨服务模块的数据方法调用
provider端
ITicketService接口
package com.suda.service;
public interface ITicketService {
public String getTickets();
}
ITicketService实现类
package com.suda.service;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
//zookeeper:服务注册与发现
@Service //可以被扫描到,在项目启动就自动注册到注册中心
@Component // 使用dubbo后尽量不要用service注解
public class TicketServiceImpl implements ITicketService {
@Override
public String getTickets() {
return "hello pig";
}
}
application.properties
server.port=8001
#服务中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#服务中心名字
dubbo.application.name=provider-server
#被注册服务
dubbo.scan.base-packages=com.suda.service
pom.xml,这个依赖不完整,zookeeper包有坑
<dependencies>
<!--dubbo + zookeeper-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<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>
</dependencies>
Consumer端
直接实现类,不写接口
package com.su.consumerserver.service;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl {
// 从注册中心拿到服务
@Reference //引用, pom坐标,可以定义路径相同的接口名,即远程调用注解
ITicketService ticketService; //这个票是远程的,非本地
public void buyTicket(){
String tickets = ticketService.getTickets();
System.out.println("从注册中心拿到票");
}
}
application.properties
server.port=8002
#消费者去哪拿
dubbo.application.name=consumer.server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
pom.xml和provider一致。
测试需要下载并打开zookeeper,并设置端口和配置文件一致,使用dubbo-client可以查看注册服务。