赞
踩
分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
分布式系统是建立在网络之上的软件系统。
需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升高昂到得不偿失的时候,应用程序也不不能进一步优化的时候,我们才考虑分布式系统。因为,由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。
Dubbo文档https://dubbo.apache.org/zh/overview/
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求,此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
序列化:数据传输需要转换
Dubbo:高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
Dubbo文档https://dubbo.apache.org/zh/overview/
环境搭建
https://zookeeper.apache.org/releases.html
下载稳定版本Apache ZooKeeper 3.7.1(asc, sha512)
https://dubbo.incubator.apache.org/zh/docs3-v2/java-sdk/quick-start/spring-boot/
dubbo-admin:是一个监控管理后台~查看我们注册了哪些服务,哪些服务被消费了
Dubbo:jar包
<!-- 导入依赖:zookeeper,dubbo--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.0.7</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 日志会冲突--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.2.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>
server.port=8001
# 服务应用名字
dubbo.application.name=provider
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服务要被注册
dubbo.scan.base-packages=com.qian.service
写一个取票服务
TicketService.java
package com.qian.service;
public interface TicketService {
public String getTicket();
}
TicketServiceImpl.java
package com.qian.service;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
//zookeeper:服务注册与发现
@DubboService //可以被扫描到。在项目一启动就自动注册到注册中心
@Component //使用了dubbo后尽量不要用service注解
public class TicketServiceImpl implements TicketService{
@Override
public String getTicket() {
return "《青春猪头少年》";
}
}
@DubboService 注意这个,与service不同,不要导错了
server.port=8002
#消费者去哪里拿服务 需要暴露自己的名字
dubbo.application.name=consumer
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
UserService.kava
package com.qian.service; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Service; @Service //放到容器中 public class UserService { //想拿到provider提供的票(相当于两个程序),要去注册中心拿到服务 @DubboReference //引用 Pom坐标 ,可以定义路径相同的接口名,拷贝过去 TicketService ticketService; public void buyTicket(){ String ticket= ticketService.getTicket(); System.out.println("在注册中心拿到=>"+ticket); } }
@DubboReference :引用别的服务器上的服务
Pom坐标
定义路径相同的接口名,即把TicketService拷贝到consumer下的service包下
测试
package com.qian; import com.qian.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class ConsumerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); } }
启动服务前要提前打开zookeeper后台,kzServer.cmd
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。