一文带你搞懂Spring核心

- 日理万妓 2022-01-20 11:23 470阅读 0赞

为什么要使用分布式系统?

容错

减少延迟/提高性能

可用性

负载均衡

总而言之,其实目的只有一个,”用户体验“。

什么是分布式系统?

分布式系统是由使用分发中间件连接的自治计算机组成的网络。它们有助于共享不同的资源和功能,为用户提供单一且集成的连贯网络。

搭建一个简单的分布式系统

1)在服务器(虚拟机)上安装Zookeeper(我这里使用Docker安装)。

(1)去docker-cn.com获取镜像加速地址

(2)使用docker pull registry.docker-cn.com/library/zookeeper命令下载Zookeeper

(3)使用docker run —name zk01 -p 2181 —restart always -d zookeeper命令安装zookeeper

(4)使用docker ps命令查看进程,至此zookeeper已安装完成,具体的安装文档请参照https://hub.docker.com/\_/zookeeper

2)创建服务提供者,服务消费者(我使用的开发工具是IDEA)。

(1)New Project 选择 Empty Project

(2)创建一个子工程作为服务提供者。

2.1 new Model 选择Spring Initalizr为了测试方便引入web模块。

2.2 创建一个service

  1. package com.example.ticket.Service;
  2. public interface TicketService {
  3. public String getTicket();
  4. }

2.3 创建serviceimpl,注意引入的包

  1. package com.example.ticket.Service;
  2. import com.alibaba.dubbo.config.annotation.Service;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. @Service //将服务发布出去
  6. public class TicketServiceImpl implements TicketService {
  7. @Override
  8. public String getTicket() {
  9. return "《厉害了,我的国》";
  10. }
  11. }

2.4 引入dubbo和zklient相关依赖

  1. <!--引入dubbo-->
  2. <dependency>
  3. <groupId>com.alibaba.boot</groupId>
  4. <artifactId>dubbo-spring-boot-starter</artifactId>
  5. <version>0.1.0</version>
  6. </dependency>
  7. <!--引入zookeeper-->
  8. <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
  9. <dependency>
  10. <groupId>com.github.sgroschupf</groupId>
  11. <artifactId>zkclient</artifactId>
  12. <version>0.1</version>
  13. </dependency>

2.5 配置dubbo的扫描包和注册中心地址

  1. #当前应用的名称
  2. dubbo.application.name=provider-ticket
  3. #注册中心的地址
  4. dubbo.registry.address=zookeeper://地址:2181
  5. #扫描哪些包(发布什么内容)
  6. dubbo.scan.base-packages=com.example.ticket.Service

(3)子工程作为服务消费者。

3.1 new Model 选择Spring Initalizr为了测试方便引入web模块。

3.2 创建一个UserService

3.3 引入dubbo和zklient相关依赖

  1. <!--引入dubbo-->
  2. <dependency>
  3. <groupId>com.alibaba.boot</groupId>
  4. <artifactId>dubbo-spring-boot-starter</artifactId>
  5. <version>0.1.0</version>
  6. </dependency>
  7. <!--引入zookeeper-->
  8. <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
  9. <dependency>
  10. <groupId>com.github.sgroschupf</groupId>
  11. <artifactId>zkclient</artifactId>
  12. <version>0.1</version>
  13. </dependency>

3.4 配置dubbo的注册中心地址

  1. #应用名称
  2. dubbo.application.name=consumer-user
  3. #注册中心的地址
  4. dubbo.registry.address=zookeeper://地址:2181

3.5 将所需服务提供者工程的service copy过来(一定要全类名相同),之后的目录结构如下图

1240

3.6 编写UserService

  1. package com.example.user.Service;
  2. import com.alibaba.dubbo.config.annotation.Reference;
  3. import com.example.ticket.Service.TicketService;
  4. import org.springframework.stereotype.Service;
  5. @Service
  6. public class UserService {
  7. @Reference
  8. TicketService ticketService;
  9. public void hello(){
  10. String ticket = ticketService.getTicket();
  11. System.out.println("买到票了:"+ticket);
  12. }
  13. }

至此,一个简单的分布式系统就搭建完毕。

发表评论

表情:
评论列表 (有 0 条评论,470人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL的隔离级别

    一. 前言 最近遇到这样一个题目:【假设目前你们使用的数据库是MySQL,现在有一个事务A,在事务A开始时读取数据的结果是1;事务A中间有一段耗时操作,在事务A中做耗时操