服务拆分
概念
定义: 在微服务架构中,服务拆分是将一个大型应用程序拆分为多个小型、独立的服务的过程。这种拆分有助于提高应用程序的可伸缩性、可维护性和部署灵活性。
服务通信
在对一个系统进行服务拆分之后,我们每个服务之间都是隔离的,因为服务之间都是有关联的,所以,我们要进行服务之间的调用,就设计一些通信方式:远程调用,Eureka对服务进行服务注册与发现等。
服务通信——远程调用
等下将通过一个简单案例,来对远程调用进行说明,这里有一个cloud-demo项目,这个项目包含了两个子项目:user-service跟user-service两个服务。
项目导入
这两个服务之间,order-service调用了user-service服务中的查询用户,这里就涉及到我们两个服务间的通信了。
未远程调用运行情况:
基于RestTemplate进行远程调用
RestTemplate是Spring框架中的一个类,用于进行基于HTTP的客户端请求和响应操作。它提供了一种简单而灵活的方式来与RESTful风格的服务进行交互。
1.注册RestTemplate
在order-service的启动类中,进行注册。
2.在orderController进行处理请求
在orderController里面自动装配RestTemplate,然后调用getForObject方法,编写url地址,发送http请求。
效果展示
通过RestTemplate实现了远程调用,就可以在order服务中请求user服务中的数据。
远程调用的问题
可以看出,我们这次远程调用时,其实是采用硬编码的能力,这样不利于我们业务的开展,如果我们的服务是一个集群,如何选择端口呢?选择的服务是否可以正常运行呢?等等问题都暴露了出来。
服务通信-Eureka
Eureka是Netflix开源的一款服务注册与发现组件,用于构建基于微服务架构的应用程序。它提供了服务注册、服务发现和故障恢复的功能,使得微服务之间的通信更加简单和可靠。
搭建注册中心
1.引入依赖
编写启动类
编写配置文件
效果
服务注册
导入依赖
编写配置文件
重新启动服务,即可完成注册
服务发现
重写代码
实现负载均衡
测试案例
通过上面操作,我们实现了两个userService集群,1个orderService跟一个eureka服务,然后,在网页进行了发送两次请求。
测试效果
通过上面的测试用例,在第一次请求后,会请求到userService1,第二次会请求到userService2上,实现了负载均衡跟远程调用。
总结
以上就是微服务的简单知识总结,通过上述的理论与实践,也初步了解了服务拆分与远程调用等知识,服务拆分是让一个系统粒子化,提高整个系统的可维护性。服务拆分后,就涉及一个通信问题,这里主要从restTemplate发送http请求跟Eureka两个方式进行阐述。