思考:什么是分布式?什么是微服务?

  一些概念:RPC-远程过程调用,某台机器想要调用另一台机器所需要的一种服务,及分布式的服务框架,比如dubbo或者SpringCloud。

  铺天盖地的分布式互联网系统,使用较多的是zookeeper+dubbo组合,而Springboot推荐使用全栈Spring,就是Springboot+SpringCloud。

  举例说明一下基本原理:A想要获得数据B,但是有10台机器都可能存放了数据B,那么我要去哪台取数据B呢?A和B中间就有了一个管理站,这个管理站类似一个分配和注册中心,他可以告诉A想要的数据B在哪些机器里,A知道了以后就可以去这些机器里取了。同样B想要把自己数据分享给A,那么可以咨询这个管理站来知道可以分享给谁。

  那么我们说的Dubbo或者SpringCloud就是上边说到的RPC服务框架,而Zookeeper和SpringBoot就可以作为这个管理站点来使用。

  Zookeeper+Dubbo

  官方看文档,或者网搜相关部署,比如:https://www.cnblogs.com/jaycekon/p/SpringBootDubbo.html

  这篇文章主要以这个为主来讲,上边的自己看吧,有需要我再单独补文章~

SpringBoot+SpringCloud

  Cloud与Dubbo的区别,Dubbo解决的就是远程过程调用的RPC服务,而Cloud更全面,它有一整套的分布式需要的对应的解决方案:配置管理、服务发现、熔断、路由、微代理、控制总线、一次性token、全局锁、leader选举、分布式session、集群状态。所以使用Cloud可以更快速的与云平台进行对接。

  SpringCloud五大常用组件:

    • 服务发现-Netflix Eureka
    • 客服端负载均衡-Netflix Ribbon
    • 断路器-Netflix Hystrix
    • 服务网关-Netflix Zuul
    • 分布式配置-SpringCloudConfig

  那么我们来看SpringCloud怎么搞~

  1)、配置-Eureka信息

  首先我们创建几个需要用到的module,一个注册中心,一个服务提供方,一个服务使用方。然后在注册中心进行一下配置:

  这里可以使用编译器中创建Spring Initializr的快捷模式

  1. # 这里我使用了application.yml的配置,看起来会更清晰
    server:
  2. port: 8761 #启动端口
  3. eureka:
  4. instance:
  5. hostname: eureka-server #eureka实例主机名-注册中心的名字
  6. client:
  7. register-with-eureka: false #不把自己注册到注册中心,因为本身就是作为注册中心的存在
  8. fetch-registry: false #不从eureka上获取注册信息,同上
  9. service-url:
  10. defaultZone: http://localhost:8761/eureka #配置默认的启动路径
  1. /**
  2. * 注册中心
    * EnableEurekaServer启动eureka服务
  3. */
  4. @EnableEurekaServer
  5. @SpringBootApplication
  6. public class EurekaServerApplication {
  7.  
  8. public static void main(String[] args) {
  9. SpringApplication.run(EurekaServerApplication.class, args);
  10. }
  11. }

  2)、启动主程序,打开浏览器测试一下(先看启动信息,已经启动了该服务):

  2)、配置-provider信息

    1.创建服务并将主程序启动(这是服务中心的服务不要停,也是在启动状态的),然后再来看服务已经注册进去了

  1. import org.springframework.stereotype.Service;
  2.  
  3. @Service
  4. public class TicketService {
  5.  
  6. public String getTicket() {
  7. return "《大鲨鱼》";
  8. }
  9. }

service.TicketService

  1. import com.ice.provider.service.TicketService;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5.  
  6. @RestController
  7. public class TicketController {
  8.  
  9. @Autowired
  10. TicketService ticketService;
  11.  
  12. @GetMapping("/ticket")
  13. public String getTicket() {
  14. return ticketService.getTicket();
  15. }
  16. }

controller.TicketController

  1. server:
  2. port: 8001 #提供方的启动端口
  3. spring:
  4. application:
  5. name: provider
  6. eureka:
  7. instance:
  8. prefer-ip-address: true #注册服务的时候使用服务ip地址
  9. client:
  10. service-url:
  11. defaultZone: http://localhost:8761/eureka

application.yml

    2.来看,如果有多个应用呢?

    修改一下server.port,一个8001,一个8002,分别打包启动。然后再来看注册中心里边(两个都在)

  3)、配置-consumer信息

  同样,先把自己注册到注册中心,然后创建个controller,并启动主程序,检查:

  1. server:
  2. port: 8200 #提供方的启动端口
  3. spring:
  4. application:
  5. name: consumer
  6. eureka:
  7. instance:
  8. prefer-ip-address: true #注册服务的时候使用服务ip地址
  9. client:
  10. service-url:
  11. defaultZone: http://localhost:8761/eureka

application.yml

  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  4. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.web.client.RestTemplate;
  7.  
  8. @EnableDiscoveryClient // 开启发现服务
  9. @SpringBootApplication
  10. public class ConsumerApplication {
  11.  
  12. public static void main(String[] args) {
  13. SpringApplication.run(ConsumerApplication.class, args);
  14. }
  15.  
  16. @LoadBalanced // 启用负载均衡服务
  17. @Bean
  18. public RestTemplate restTemplate() {
  19. return new RestTemplate();
  20. }
  21. }

ConsumerApplication

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.web.bind.annotation.GetMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. import org.springframework.web.client.RestTemplate;
  5.  
  6. @RestController
  7. public class UserController {
  8.  
  9. @Autowired
  10. RestTemplate restTemplate;
  11.  
  12. @GetMapping("/buy")
  13. public String buyTicket(String name) {
  14. // 从注册中心获取提供方的信息,http://提供方应用的名字/路径,String类型
  15. String s = restTemplate.getForObject("http://PROVIDER/ticket", String.class);
  16. return name + "购买了" + s;
  17. }
  18. }

controller.UserController

  如此,我们的分布式就说到这里,这么看,不是很难理解吧?

  P.S:我们在上边有一个负载均衡的注解,哪里可以看来有什么作用呢?如果你启动了8001和8002的两个服务,可以通过启动窗口看到(我们有在两个服务中加入不同的打印语句),两个端口分别被调用,轮询式的均衡调用~

  

SpringBoot日记——分布式篇的更多相关文章

  1. SpringBoot日记——国际化篇

    听起来高大上的国际化,起始就是在利用浏览器语言,或者页面中的中英文切换,将页面的文字在其他语言和中文进行切换,比如: 我们想让这个功能实现,点击中文,页面就是中文的,点击英文就是英文的. 国际化配置 ...

  2. SpringBoot日记——实战篇——Url定向

    搞定了SpringBoot的一些基础核心的东西,我们需要实践一个项目来确认自己学习的东西能被应用,最初,我们会选择自己写一个登陆页面,这也是每个网站几乎都有的门面. 在写之前,还有一些知识点需要记录— ...

  3. JAVA复习笔记分布式篇:zookeeper

        前言:终于到分布式篇,前面把JAVA的一些核心知识复习了一遍,也是一个JAVA程序员最基本要掌握的知识点,接下来分布式的知识点算是互联网行业的JAVA程序员必备的技能:     概念:ZooK ...

  4. SpringBoot第六篇:整合通用Mapper

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10876339.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   在以往的项 ...

  5. Redis分布式篇

    Redis分布式篇 1 为什么 需要 Redis 集群 1.1 为什么需要集群? 1.1.1 性能 ​ Redis 本身的 QPS 已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响. ...

  6. SpringBoot第七篇:整合Mybatis-Plus

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10881666.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   一看这个名 ...

  7. Springboot快速入门篇,图文并茂

    Springboot快速入门篇,图文并茂 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! image-20 ...

  8. springboot实现分布式锁(spring integration,redis)

    Springboot实现分布式锁(Spring Integration+Redis) 一.在项目的pom.xml中添加相关依赖 1)Spring Integration依赖 <dependenc ...

  9. SpringBoot分布式篇Ⅷ --- 整合SpringCloud

    SpringCloud是一个分布式的整体解决方案.Spring Cloud为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局锁,leader选举.分布 ...

随机推荐

  1. 使用openssl在windows 10下本地xampp配置https开发环境

    安装win64OpenSSL-1_1_0j后重新启动:以管理员权限启动powershell; 执行以下命令 set OPENSSL_CONF=c:\xampp\apache\conf\openssl. ...

  2. 将 Azure 文件共享用于 Windows VM

    可将 Azure 文件共享用作一种从 VM 中存储和访问文件的方式. 例如,你可以存储一个要与所有 VM 共享的脚本或应用程序配置文件. 本主题将介绍如何创建和装载 Azure 文件共享,以及如何上传 ...

  3. Linux 查看本机串口方法

    最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1.查看串口是否可用 可以对串口发送数据比如对com1口,echo /dev/ttyS02.查看串口名称使用 ls -l /de ...

  4. windows服务器设置文件属性设置去掉隐藏已知文件类型的扩展名(即文件后缀名可见)

    摘要: 1.文件后缀名不可见,系统运维过程容易发生同名不同后缀的文件操作混淆的情况 2.windows系统默认是文件后缀名不可见 3.所以需要更改一下配置. 4.操作步骤如下图: (1)点击组织-文件 ...

  5. 关于无限试用JetBrains产品的方案

    JetBrains免费试用期限为30天,通过对其试用机制的设想,找到了其破解试用机制的方案,具体如下: 在选择试用JetBrains产品的时候,它会在 C:\Users\用户名\对应产品\config ...

  6. Conjob For hybris

    1.Defining the Job 写conjob的逻辑:core包下当做service层(要继承AbstractJobPerformable<CronJobModel>) public ...

  7. ABAP设计模式——适配器

    计算机科学中的大多数问题都可以通过增加一层间接性来解决.  ——David Wheeler 适配器模式(Adapter Design Pattern),是一个广泛应用于真实世界和面向对象编程语言的设计 ...

  8. Word中类似正则匹配的查找替换通配符的使用详解

    一.Word查找栏代码&通配符一览表 序号 清除使用通配符复选框 勾选使用通配符复选框 特殊字符 代码 特殊字符 代码or通配符 1 任意单个字符 ^? 任意单个字符 ? 2 任意数字 ^# ...

  9. 5、爬虫之scrapy框架

    一 scrapy框架简介 1 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Sc ...

  10. Django之知识总结

    1. 课程介绍 - 数据类型 - 函数 - 面向对象三大特性:继承,封装,多态 - socket:本质传输字节:所有网络通信都基于socket - 数据库设计:单表.FK.M2M (自己作业:自己领域 ...