SpringBoot(34)服务注册发现实例以及分布式开发
Dubbo 与分布式系统
【1】分布式系统:分布式系统就是若干个独立的计算机的集合,这些计算机对于用户来说就是一个整体大型的计算机。目的就是当一台计算机的能力不足时,我们用更多的电脑处理更多的数据。
【2】Dubbo:Apache Dubbo 是一个基于Java的高性能,轻量级的RPC框架。Dubbo提供了三个关键功能,包括基于接口的远程呼叫,容错和负载平衡以及自动服务注册和发现。
【3】RPC 分布式服务框架 :一个个计算机的增加可以解决计算能力的不足,但是同时带了一个问题,一台计算机的项目中不同功能的使用率不一样,比如浏览商品与购买商品使用效率不一样,如果只是单纯的增加计算机的话,会导致电脑上浏览商品功能出现空闲,造成浪费。因此,将项目中的核心业务抽取出来,单独做一个服务,可以让项目更加快速。
【4】Dubbo运行原理图:
【5】图解:Consumer服务消费者,Provider服务提供者。Container服务容器。消费当然是invoke提供者了,invoke这条实线按照图上的说明当然同步的意思了,多说一句,在实际调用过程中,Provider的位置对于Consumer来说是透明的,上一次调用服务的位置(IP地址)和下一次调用服务的位置,是不确定的。这个地方就是实现了软负载。
【6】过程:服务提供者先启动start,然后注册register服务。消费订阅subscribe服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服务通过notify到消费者。
服务注册发现实列
服务注册发现:简而言之就是将上述的图进行跑一遍即可。
1.创建provider-server module(module使用springboot web模板),即服务提供者。
注意:必须搭建好dubbo+zookeeper环境
【1】导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--dubbo-->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<!-- 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.3</version>
</dependency>
<!--zkclient-->
<!-- 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>
【2】编写服务提供者接口,即实现买票功能
接口
public interface TicketService {
String getTicket();
}
实现类
//zookeeper:服务启动与发现
@Service //可以被扫描到,在项目一启动就自动注册到注册中心
@Component //使用Dubbo后尽量不要使用service注解,同名不好辨别
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "获取车票";
}
}
【3】注册register服务
server.port=8081
#服务应用的名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#那些服务被注册
dubbo.scan.base-packages=com.liuqing.service
注意:实现类@Service 使用的dubbo的注解,用来表示功能被注册(注册默认查找的是接口,而不是实现类)
2.创建cunsumer-server module(module使用springboot web模板),即服务消费者。
【1】导入依赖,与第一步依赖相同
【2】编写服务消费者类
注意:@Reference 获取服务提供者的功能。 ticketService只存在服务提供者里面,如何获取? 即通过pom坐标获取,即创建一个相同目录的接口,即com.相同路经.TicketService接口.。因为服务提供者注册到注册中心时,注册的是接口的全路径。
@Service
public class UserService {
@Reference
TicketService ticketService;
public void buyTicket(){
String ticket = ticketService.getTicket();
System.out.println("在注册中兴->"+ticket);
}
}
【3】 消费订阅subscribe服务
因为是消费,不用注册服务,就不需要提供包的扫描了。
server.port=8082
#注册中心怎么给消费者拿到服务,起一个名字
dubbo.application.name=cunsumer-server
#消费者从哪里拿到服务,服务的注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
3.进行服务的注册与发现
【1】.开启注册中心,即运行zookeeper服务。即进入bin目录下,运行zkService.cmd
【2】运行dubbo-admin,查看服务提供者与服务消费者
【3】运行provider-server ,然后运行cunsumer-server
【4】测试
@SpringBootTest
class CunsumerServerApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
userService.buyTicket();
}
}
【5】输出结果:在注册中兴->获取车票,即实现了简单的分布式服务开发。
本文地址:https://blog.csdn.net/OVO_LQ_Start/article/details/108839938
上一篇: D. Make Them Equal(思维+构造)
下一篇: vue条件渲染+列表渲染+事件处理器