前言:关于dubbo,作为阿里巴巴开源的基于 Java 的高性能 RPC(远程调用)分布式服务框架,主要提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,这里不多说,详情请google…
日常所做项目架构基本都为单体架构,什么是单体架构呢,大致意思就是说只需要一个服务器,将程序进行打包发布,但是随着流量的增大,常规的垂直应用架构已无法应对,所以,架构就发生了变化,简单来说主要是为了解决下面几个问题:
因为dubbo作为ali开源的项目,因此其内部使用了Netty、Zookeeper等,保证了高性能高可用性,那么他与我们常说的springcloud有什么区别呢?
上图为dubbo官方架构图,强烈推荐,非常详细,对于每一层的详细介绍以及作用可以借鉴官网的说明,在此只对简单的架构做一个描述如下图所示:
其实上图其实相当于对上上图,也就是详细架构图做了一个封装,从大的方面来讲,consumer、provider、register、monitor代表了部署的节点,而在这些大的节点里面包含了许多的小模块,表示对其节点的内部业务逻辑处理;并且通过虚线可以看出他们之间可以相互进行远程调用,因为图只包含 RPC 的层,不包含 Remoting 的层,Remoting 整体都隐含在 Protocol 中
综上架构图顺便总结出如下几点:
1.选择ZooKeeper作为注册中心
在linux环境中使用docker安装ZooKeeper
//拉取zookeeper镜像
docker pull zookeeper
//启动zookeeper
docker run -d -p 2181:2181 -v /mysoft/zookeeper/data/:/data/ --name=zookeeper --privileged zookeeper
2.创建maven项目统一声明接口,把所有接口提取到单独的项目,通过maven引入到其他项目
public class UserAddress implements Serializable {
private Integer id;
private String userAddress;
private String userId;
//省略getter,setter
}
OrderService.java
public interface OrderService {
List initOrder(String id);
}
UserService
public interface UserService {
List getAddress(String userId);
}
3.创建生产者SpringBoot项目
在pom.xml引入上文api接口项目,引入dubbo依赖
com.api
api
1.0-SNAPSHOT
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
实现UserService接口,作为dubbo的生产者需要用@Service注解,为了和spring的@Service注解区分,所以这里用的是@Component注解
UserServiceImpl.java
@Service
@Component
public class UserServiceImpl implements UserService {
@Override
public List getAddress(String userId) {
UserAddress u1 = new UserAddress();
u1.setId(1);
u1.setUserAddress("TianJin");
u1.setUserId("001");
UserAddress u2 = new UserAddress();
u2.setId(2);
u2.setUserAddress("Peking");
u2.setUserId("002");
return Arrays.asList(u1,u2);
}
}
启动类上用@EnableDubbo启用Dubbo注解
@EnableDubbo
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
配置文件application.properties指定应用名称,注册中心,服务协议和端口号
dubbo.application.name=provider
dubbo.registry.address=zookeeper://你自己的主机IP:2181
dubbo.monitor.protocol=registry
dubbo.protocol.host=你自己的主机IP
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
之后启动程序,可以发现服务已经注册上去(问这个怎么看,可以自行google安装dubbo,在此不解)
4.创建消费者SpringBoot项目
pom.xml添加引入上文接口项目,引入dubbo依赖
com.api
api
1.0-SNAPSHOT
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
实现OrderServiece接口,这里的@Service是spring的,这里使用@Reference注解声明UserService是通过远程调用注入进来
OrderServiceImpl.java
@Service
public class OrderServiceImpl implements OrderService {
@Reference
UserService userService;
@Override
public List initOrder(String id) {
List list = userService.getAddress(id);
for(UserAddress u:list){
System.out.println(u.getUserAddress());
}
return list;
}
}
OrderController.java
@RestController
public class OrderController {
@Autowired
OrderService orderService;
@GetMapping("/initOrder")
public List initOrder(@RequestParam(name="id") String id){
return orderService.initOrder(id);
}
}
启动类@EnableDubbo启用Dubbo注解
@EnableDubbo
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
配置文件application.properties中声明服务名称,注册中心,以及tomcat对外端口号
dubbo.application.name=consumer
dubbo.registry.address=zookeeper://自己的主机IP:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.host=自己的主机IP
server.port=8081
最后url访问 localhost:8081/initOrder?userId=001即可访问provider提供的对应json数据,关于springboot整合dubbo实战,博主已经将完整的实战项目上传到github上了,需者可以自行下载,
下载地址:https://github.com/Wangxy9527/dubbo.git或者https://github.com/Wangxy9527/dubbo.git
.