前言
SpringCloud并不是一个第三方框架的名称, 而是一整套微服务框架的统称, 使用这套框架可以快速搭建出高可用的微服务环境, 因为功能众多,所以又被称SpringCloud全家桶, 由于篇幅较长所以文章采用了目录引导, 第二章是微服务的基础, 第三章是功能模块扩展, 如网关, 服务保护, 分布式配置中心, nginx, 下面就跟着我们的文章, 一起来看吧.
一.什么是微服务
就是把一整个后台项目拆分成多个模块, 每一个模块称作一个服务, 每个服务都可以独立运行, 这样做的好处是其中有一个服务挂掉后, 另外的服务不受影响, 这些服务使用接口相互通信, 减少了依赖和耦合.
二.快速开始
创建一个空的spring boot项目,做父工程,整个项目是由maven
进行管理的, 依赖包就是我们开发时需要用到的第三方jar包, 也就是框架, 这里为什么什么也不选? 我说一下, 因为我们要做的是微服务, 所以框架结构为一个基座
+多个子模块
, 我们上面建立的就是基座
, 你可以把它当成一个工作空间
用途是管理子模块。
1.Eureka注册中心
首先要新建我们SpringCloud项目的核心eureka注册中心
, 为什么说它是项目的核心呢, 我在简介中说过了, 微服务就是把一整个后台应用拆分成小的功能模块, 那么这些模块之间如何进行通信呢?
没错就是注册中心, 那么我们接下来就开始搭建一个注册中心吧!
首先在父工程中新建一个Module
子项目, 也就是一个微服务模块.
到这里我们注册中心模块就建立好了, 之后我们来简单配置一下.
在启动类上加上@EnableEurekaServer注解
首先开启eureka
服务
之后找到配置文件
配置一下application.yml
, 如果你的是application.properties
, 请修改后缀为yml
, 这两个配置文件都可以配置工程, 相比之下yml
更直观一些, 所以本教程使用yml
进行配置.
之后我们进行配置
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
注意缩进, 因为yml
使用缩进来区分不同字段的.
然后我们来运行项目吧!
运行启动类
然后我们来访问一下注册中心吧.
网页可以正常运行后 我们的注册中心就配置完毕了
2.创建微服务
光有注册中心是没有用的, 服务都没有, 根本写不了接口, 所以接下来我们就继续在父工程中创建两个服务.
同理配置service-b
, 新建完成之后是这个样子
之后我们配置服务的入口文件,在启动类上加上注解@EnableEurekaClient
然后配置一下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}
之后我们来运行一下刚配置好服务吧运行service-a和service-b的启动类
@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();
}
重启service-b服务
应用名可以在eureka中找到
http://localhost:8081
之后我们来写接口 在服务service-b中添加个控制器
@RestController
public class TestController {
@Autowired
private ServerAFeignClient serverAFeignClient;
@RequestMapping("/call")
public String call() {
String result = serverAFeignClient.hello();
return "b to a 访问结果 ----- " + result;
}
}
之后我们发现报错了 不要慌张设置一下即可
最后在应用入口加上注解@EnableFeignClients,就能实现服务之间的调用了.
重新运行服务b 在网站上访问试试吧
http://localhost:8083/call
到这里服务之间的相互访问也可以完成了 到这里springcloud最基本的环境搭建就完成了 快写几个微服务玩玩吧