SpringBoot与Dubbo和Zookeeper实现分布式

今天就来简单使用Spring Boot与Dubbo及zookeeper整合使用分布式
首先, 先来简单了解一下什么是Dubbo及zookeeper

Zookeeper
Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护,域名服务,分布式同步,组服务等

Dubbo
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度的松耦合),从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色

1. 在Liunx系统下下载Zookeeper, 参考如下命令:

[root@localhost ~]# docker pull registry.docker-cn.com/library/zookeeper

这里的Zookeeper是装在docker中的, 如果大家没有装有docker的话, 可以参考: https://blog.csdn.net/w1316022737/article/details/83652919

2. 启动Zookeeper, 参考如下命令:

docker run --name 给zookeeper启的名字 -p 2181:2181 --restart always -d 这块为安装的Zookeeper的id

3. 这里采用的工具是IntelliJ IDEA进行开发, 首先建立一个空项目, 如图操作:
在这里插入图片描述

4. 在建立的空工程里面, 建立两个项目, 第一个项目为提供服务者(将服务提供者注册到注册中心), 首先建立第一个项目, 如图操作:
在这里插入图片描述
在这里插入图片描述
在Group处填写包名, Artifact中填写项目名, 其他默认即可, 直接Next
在这里插入图片描述
这里选择Web就行了, 一定要选好Spring Boot版本
在这里插入图片描述
以上是创建空工程中两个项目的步骤:
5. 编写第一个服务提供者项目, 首先在pom.xml中引入相关依赖

        <!--引入dubbo的相关依赖-->
		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>0.1.0</version>
		</dependency>

		<!--引入zookeeper的客户端工具-->
		<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>

6. 在application.properties配置文件中配置相应属性:

#dubbo.application.name表示当前应用的名字
dubbo.application.name=springboot-06-provider-ticker

#dubbo.registry.address表示dubbo要将服务发送到注册中心,值为zookeeper的地址,该地址为虚拟机的zookeeper地址
dubbo.registry.address=zookeeper://这块为Liunx系统的ip加Zookeeper的端口号

#dubbo.scan.base-packages表示要将那个包下的什么发送出去
dubbo.scan.base-packages=com.atguigu.springboot06providerticker.service

7. 编写service接口及实现类

public interface TickerService {

    public String getTicker();
    
}
/**
 * 注解Service是dubbo的service
 * 该注解的作用是将服务发布出去
 */
@Component
@Service
public class TickerServiceImper implements TickerService {
    @Override
    public String getTicker() {
        return "<厉害了,我的国>";
    }
}

8. 参考启动类的注释

/**
 * provider-ticker项目是供应者
 * consumer-user项目是消费者
 * 1.将服务提供者注册到注册中心
 *   1)在pom.xml文件中导入dubbo与zookeeper的相关依赖
 *   2)在application.properties配置文件中配置相应属性,如:要将那个服务发送出去,发送的地址等
 *   3)在service实现类中标注service注解,该注解为dubbo下的
 */
@SpringBootApplication
public class Springboot06ProviderTickerApplication {

	public static void main(String[] args) {
		SpringApplication.run(Springboot06ProviderTickerApplication.class, args);
	}
}

9. 建立第二个消费者项目, 建立项目的步骤和第4步建立项目一样, 建立好项目之后, 首先引入pom.xml文件中的相关依赖:

        <!--引入dubbo的相关依赖-->
		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>0.1.0</version>
		</dependency>

		<!--引入zookeeper的客户端工具-->
		<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>

10. 在application.properties配置中配置相应属性:

#dubbo.application.name表示当前应用的名字
dubbo.application.name=consumer-user
#dubbo.registry.address表示dubbo要将服务发送到注册中心,值为zookeeper的地址,该地址为虚拟机的zookeeper地址
dubbo.registry.address=zookeeper://这块为Liunx系统的ip加Zookeeper的端口号

11. 复制服务提供者项目中service的全路径, 路径名要和消费者项目的路径名一样, 只需要接口类, 不需要实现类

public interface TickerService {

    public String getTicker();
}

12. 编写service

/**
 * 引用服务的这块标注的Service注解是spring下的
 */
@Service
public class UserService {

    /**
     * 注解Reference的作用是远程引用
     * 过程:根据TckerService类全类名进行匹配,看谁给注册中心注册了这个全类名的服务
     */
    @Reference
    TickerService tickerService;

    public void hello(){
        String ticker = tickerService.getTicker();
        System.out.println("买到票了:"+ticker);
    }

}

13. 编写测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerUserApplicationTests {

	@Autowired
	UserService userService;
	@Test
	public void contextLoads() {
		userService.hello();
	}

}

14. 过程请参考启动类注释

/**
 * provider-ticker项目是提供者
 * consumer-user项目是消费者
 * 引用服务:
 *   1)在pom.xml文件中导入dubbo与zookeeper的相关依赖
 *   2)在application.properties配置文件中配置相应的属性
 *   3)引用服务
 *    在引用服务时,要将发送服务项目的全路径包复制到引用服务的项目中,包的结构要一模一样,
 *    如这块的:springboot06providerticker/service
 *    但是不需要发送服务项目中service的实现类
 */
@SpringBootApplication
public class ConsumerUserApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConsumerUserApplication.class, args);
	}
}

注: 在测试的时候, 一定要先启动服务提供者, 在启动服务提供者项目时最后从启动类中启动, 保证服务一直是运行状态, 再启动消费者项目中的测试类, 在测试类完成之前, 服务提供者项目的启动类必须一直处于运行状态

猜你喜欢

转载自blog.csdn.net/w1316022737/article/details/83928399