微服时代来了,快速搭建SpringCloud

一.什么是微服务

就是把一整个后台项目拆分成多个模块, 每一个模块称作一个服务, 每个服务都可以独立运行, 这样做的好处是其中有一个服务挂掉后, 另外的服务不受影响, 这些服务使用接口相互通信, 减少了依赖和耦合.
-- 摘自Object

二.快速开始

首先创建一个maven项目

Next  ——>

Next   ————>

这里什么都不用选,直接Next

直接Finish,接下来等创建好项目

1.Eureka注册中心

首先新建一个Module子项目, 也就是一个微服务模块.

这样就创建好了子模块了,接下来简单配置一下

首先开启eurerka服务

之后找到配置文件

server:
  # 配置服务端口
  port: 8081
eureka:
  client:
    service-url:
      # 配置eureka服务器地址
      defaultZone: http://127.0.0.1:8081/eureka
    #是否需要将自己注册到注册中心(注册中心集群需要设置为true)
    register-with-eureka: false
    #是否需要搜索服务信息 因为自己是注册中心所以为false
    fetch-registry: false

 

接下来启动一下看下

看到输出日志是已经启动成功了,我们访问一下: http://localhost:8081/   看下结果

网页可以正常运行后 我们的注册中心就配置完毕了

2.创建微服务

我们需要找一个地方来写接口, 接下来我们就创建两个服务.

service-b和service-a的创建是一样的,重复再创建一个service-b

这样大致创建ok了

接下来配置 application.yml

首先是service-a:

server:
  # 服务端口号
  port: 8082
spring:
  application:
    # 服务名称 - 服务之间使用名称进行通讯
    name: service-objcat-a
eureka:
  client:
    service-url:
      # 填写注册中心服务器地址
      defaultZone: http://localhost:8081/eureka
    # 是否需要将自己注册到注册中心
    register-with-eureka: true
    # 是否需要搜索服务信息
    fetch-registry: true
  instance:
    # 使用ip地址注册到注册中心
    prefer-ip-address: true
    # 注册中心列表中显示的状态参数
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

然后是service-b:

server:
  # 服务端口号
  port: 8083
spring:
  application:
    # 服务名称 - 服务之间使用名称进行通讯
    name: service-objcat-b
eureka:
  client:
    service-url:
      # 填写注册中心服务器地址
      defaultZone: http://localhost:8081/eureka
    # 是否需要将自己注册到注册中心
    register-with-eureka: true
    # 是否需要搜索服务信息
    fetch-registry: true
  instance:
    # 使用ip地址注册到注册中心
    prefer-ip-address: true
    # 注册中心列表中显示的状态参数
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

接下来将三个服务都启动成功,说明没问题了,然后我们写一个接口

@RestController
public class TestController {

    @RequestMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

重启服务service-a

然后访问 http://localhost:8082/hello 

浏览器出现 Hello World! ,说明没问题了

我们现在有一个需求 使用服务b调用服务a的接口
这时我们就需要用到eurka(注册中心)feign客户端了
首先我们在service-b中创建interface

@FeignClient("SERVICE-OBJCAT-A")
public interface ServiceAFeignClient {

    @RequestMapping("/hello")
    public String hello();
}

可以看到 eureka 有了

之后我们发现报错了 设置一下即可

最后在应用入口加上注解,就能实现服务之间的调用了.

    

重新运行服务b 在网站上访问试试吧

http://localhost:8083/call

到这里服务之间的相互访问也可以完成了 到这里springcloud最基本的环境搭建就完成了

内容扩展

我们来看一个神奇的现象 我把service-a接口中写一个延时函数 我们看一下效果

重启一下service-a,然后运行一下看看

报错 读取超时了 ,原因是 feign的默认请求超时时间是1秒 ,我们设置的1.5秒

ribbon:
  #建立连接超时时间
  ConnectTimeout: 5000
  #读取资源超时间
  ReadTimeout: 5000

加上这个即可

现在看一下负载均衡:

我们现在就在本地开启两个service-a

首先修改一下代码 让服务打印出当前端口号

对服务a做了上图中的修改
1.获取服务器端口号
2.拼接端口号返回给客户端
3.注释掉了延时函数提高效率

因为我们要启动两个a服务器,所以我们在idea要这样设置

我们先把这个8082端口的服务器a重启一下

然后再把application.yml的端口号改成8092,然后再启动一个a服务器

然后我们访问一下 http://localhost:8083/call

这时我们看到有一个8082和8092端口的a服务器,这样说明启动成功了

访问的同一个地址 但是端口会在8082和8092之间来回切换 这就是所谓的本地负载均衡 那么这个机制是怎么实现的呢 其实很简单 就是轮询机制 计算公式就是 总请求次数 % 服务器总数 取模后就调用相对应索引的服务 就可以实现本地均衡负载了 这就是ribbon的基本原理

 

此篇文章是快速搭建SpringCloud,如果大家需要看更详细的,请看 https://www.jianshu.com/p/a0365a635975   此文章也是根据此大佬发表的文章进行学习的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章