欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot(34)服务注册发现实例以及分布式开发

程序员文章站 2022-03-26 11:40:28
Dubbo 与分布式系统【1】分布式系统:分布式系统就是若干个独立的计算机的集合,这些计算机对于用户来说就是一个整体大型的计算机。目的就是当一台计算机的能力不足时,我们用更多的电脑处理更多的数据。【2】Dubbo:Apache Dubbo 是一个基于Java的高性能,轻量级的RPC框架。Dubbo提供了三个关键功能,包括基于接口的远程呼叫,容错和负载平衡以及自动服务注册和发现。【3】RPC 分布式服务框架 :一个个计算机的增加可以解决计算能力的不足,但是同时带了一个问题,一台计算机的项目中不同功能的使...

Dubbo 与分布式系统

【1】分布式系统:分布式系统就是若干个独立的计算机的集合,这些计算机对于用户来说就是一个整体大型的计算机。目的就是当一台计算机的能力不足时,我们用更多的电脑处理更多的数据。
【2】Dubbo:Apache Dubbo 是一个基于Java的高性能,轻量级的RPC框架。Dubbo提供了三个关键功能,包括基于接口的远程呼叫,容错和负载平衡以及自动服务注册和发现。
【3】RPC 分布式服务框架 :一个个计算机的增加可以解决计算能力的不足,但是同时带了一个问题,一台计算机的项目中不同功能的使用率不一样,比如浏览商品与购买商品使用效率不一样,如果只是单纯的增加计算机的话,会导致电脑上浏览商品功能出现空闲,造成浪费。因此,将项目中的核心业务抽取出来,单独做一个服务,可以让项目更加快速
【4】Dubbo运行原理图:
SpringBoot(34)服务注册发现实例以及分布式开发

【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