分布式
在大型开发项目中通常使用分布式服务来根据项目中不同的功能划分为几个不通的模块。
比如在一个商城系统中,通常会把用户服务、下单服务、商品推荐服务分散到几个模块中,如果在下单服务中需要获取用户的信息,这时候就在代码内部调用用户服务的接口即可。这样一个过程就是分布式的基本概念。
Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
--以上内容来自百度百科。
图片
来自官网列举的主要项目
所以,Spring Cloud是一款主流的分布式服务框架,提供了服务注册与调用,统一配置管理,统一网关路由,服务链路监控等功能。并且在远程调用是支持Feign(HTTP)协议。
服务远程调用
3.1 创建两个项目
创建两个项目模拟分布式的场景,分别是userService和orderService,这两个服务对应的数据库不在同一个库中,在userService项目中有一个接口是根据user表的ID查询user对象;
同样的,orderService项目中有一个接口是根据order表的ID查询order信息,在一条信息中包含了单价,数量,总价和用户的ID。
这两个个项目布在了同一个大的项目中。现在有一个功能需求是通过使用orderService的接口查询order信息并同时获得这个订单对应的用户信息。
图片
3.2 远程调用
首先需要创建一个RestTemplate对象,这个对象功能能简单,就是用来发送HTTP请求,所以可以在项目的配置类中创建这么一个对象,然后在Controller层中注入。
图片
图片
这样就完成了一次远程调用了。
使用Postman测试一下,理论上是要返回一个response对象,response对象包含了user对象和order对象。
图片
Eureka服务搭建
在上面的远程调用的例子中,有许多的不足,比如访问的url信息是写死在代码中的,后期部署的时候要再专门修改这样是不现实的。
Eureka服务发现就相当于是一个专门获取项目中所有接口的程序。所以需要先创建一个Spring boot项目,然后把这个项目当作Eureka的server。
4.1 首先在Eureka_Server的Maven中导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
4.2 接着在启动类添加@EnableEurekaServer注解
图片
4.3 在配置文件中配置Eureka服务的端口和应用名称
图片
验证是否成功只需要在浏览器上输入设置的网址,看能否进入页面即可。
图片
Eureka服务注册
5.1 在orderservice和userservice项目中分别引入Eureka依赖信息
注:这里导入的是client依赖。
图片
5.2 在userservice和orderservice配置Eureka的配置信息
注:与4.3的样式一致。
图片
5.3 访问eureka地址查看这俩个新注册的服务
图片
可以发现服务都注册在eureka上了。
Eureka服务发现
6.1 把消费者的调用链接中的ip和端口信息换成注册在Eureka的服务名
图片
6.2 在消费者的配置类的RestTemplate上添加@LoadBalanced注解
注:这里的消费者当然是orderservice。
图片
6.3 再测试一次程序
图片
可见是成功调用了userservice的接口。