本文部分摘录自翟永超的个人博客
自从上篇博文到近期,工作较为繁忙,一直没时间更新博文。
在 Spring Cloud 学习之旅 — 服务注册与发现(二) 我们介绍了创建一个服务提供者到注册中心中,这一节我们讲讲如何使用消费者调用注册到注册中心的服务提供者提供的服务。
创建“服务消费者”
我们新建一个Maven工程,并在 pom.xml 中引入需要的依赖内容
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.4.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
</dependencies>
在此例子中,我们采用spring cloud的ribbon组件作为我们的负载均衡器和服务的调用。
在 src\main\java
下创建自己的包,并创建一个 ConsumerApplication
类,用作整个 Spring Boot 应用程序的入口。紧接着继续创建一个 ConsumerController
类,用于暴露Rest接口供外部访问。效果如下图:
由于我们也需要将消费者注册到注册中心中,所以我们需要允许应用被外部发现,给 ConsumerApplication
类添加上 @EnableDiscoveryClient
和 @SpringBootApplication
注解。
作为消费者,由于服务提供者往往是多实例的,我们需要开启客户端的负载均衡配置。Ribbon组件为我们提供了 RestTemplate
类和 @LoadBalanced
注解。其中 RestTemplate
类是我们调用服务的核心。使用 @LoadBalanced
注解后,应用将同时具有客户端的负载均衡能力。
紧接着要启动这个 SpringBoot 应用,给 main 函数添加上启动代码。效果如图 :
编写消费者
我们通过 Ribbon组件的 RestTemplate
对象可以调用在同个注册中心注册的服务。
我们创建一个 /consumer
对外接口,并在该接口中实现对上节的 simple-service 进行调用。效果如图:
我们在完成了服务消费的实现之后,再继续对 application.properties(本文中采用的是yml的配置文件) 做一些配置工作,具体如下:
注:注册中心使用的是集群配置的eureka注册中心,后面会有额外一篇博文讲到
启动
按顺序启动注册中心和服务提供者后,我们运行本项目。
启动完成后进入到eureka注册中心的界面,查看消费者的注册情况。
由图可以看出,当消费者注册成功后,我们可以看到这个应用已经注册到了eureka注册中心中。
我们访问刚刚写的对外接口 /consumer
,得到的结果如图:
至此说明访问成功,也说明我们调用服务提供者的服务调用成功了。
回忆负载均衡
还记得我们刚才说到的 @LoadBalanced
注解吗?我们好像没有看到什么效果可以证明我们已经使用到了负载均衡哦。
其实很好验证,这也是为什么我在上面的注册中心截图中,启动了两个服务提供者实例的原因。
我们不需要关闭消费者,此时关掉一个服务提供者,刷新界面就可以看到结果。
当关闭其中一个服务提供者后,不断地刷新将会看到上述两图轮流出现,也印证了我们的负载均衡器是生效的,并且采用的是轮询的机制在进行负载均衡。
那么,看完这篇博文的你,赶紧动手试一试吧^_^