目录
1 服务间调用
微服务的特点是服务数量特别多,服务和服务之间也需要有交互,这就涉及到服务间的调用,即服务与服务之间如何通信。提到服务与服务之间的通信,最通用的莫过于HttpClient,在其它的通信架构中基本都使用HttpClient来作为底层的通讯模型。在SpringCloud中依然可以使用HttpClient进行服务与服务调用,只不过如果采用HttpClient调用的话,会有一些弊端,例如: 如果同一个服务有多个负载的话,采用HttpClient调用时,没有办法处理负载均衡的问题。还有另一个问题就是HttpClient只是提供了核心调用的方法并没有对调用进行封装,所以在使用上不太方便,需要自己对HttpClient进行简单的封装。
在SpringCloud提供了两种方式来解决服务与服务通信的问题,RestTemplate和Feign。虽然从名字上看这两种调用的方式不同,但在底层还是和HttpClient一样,采用Http的方式进行调用的。只不过是对HttpClient进行的封装。下面就一起来探讨一下这两种方式的区别。
2 RestTemplate方式调用
2.1 创建演示项目
要演示服务之间的调用,需要有服务端(Server)和客户端(Clinet),服务端提供服务供客户端调用。服务端和客户端都需要注册到Eureka提供的注册中心中,所以还需要创建注册中心项目。所以本篇我们需要创建服务提供者(服务端)项目,服务调用方(客户端)项目和注册中心项目。
实际上Server端和Client端是相互的,不一定Client端一定要调用Server端,Server端一样可以调用Client端。下面我们分别看一下Server端和Client端的实现。Server端的配置如下:
#端口号
server:
port: 8001
#Eureka实例名,集群中根据这里相互识别
spring:
application:
name: hello-service
eureka:
#客户端
client:
#注册中心地址
service-url:
defaultZone: http://localhost:7001/eureka/
创建一个Controller,并编写一个简单的接口来供Client调用。下面为Controller的源码。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ServerController {
@RequestMapping("/helloServer")
public String hello(){
return "hello-server";
}
}
下面我们访问一下这个接口看看,是否能正确返回数据。
在浏览器中输入:http://192.168.1.6:8001/helloServer
得到如下图所示的结果:

我们看已经成功的返回了接口的数据了。下面我们看一下eureka。看看是否成功的检测到了server端的服务。
在浏览器中输入:http://localhost:7001/
下面为eureka管理界面地址:

可以看到Eureka已经成功的检测到了Server端注册成功了。
下面我们看一下client端的代码,创建一个Controller,并编写一个接口。下面为具体配置及代码。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ClientController {
@RequestMapping("/helloClient")
public String hello(){

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



