与我上一章写到的服务提供者相对,有人提供了服务,那么就要有人去调用这个服务
创建服务消费者
1.新建maven项目,zgq_order,添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath />
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--eureka client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
2.创建application.yml配置文件
#服务端口号
server:
port: 8001
#服务名称
spring:
application:
name: zgq-order
#服务注册到eureka
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8100/eureka
#注册自己
register-with-eureka: true
#是否需要从eureka上获取注册信息
fetch-registry: true
3.新建启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableEurekaClient
public class OrderApp {
public static void main(String[] args) {
SpringApplication.run(OrderApp.class,args);
}
@Bean
//负载均衡
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
4.新建调用服务的类,调用刚刚注册到eureka上的接口
新建OrderController类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping(value = "/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/get")
public String getOrder(){
//去调用我们的用户服务,Ribben负载均衡
String memberUrl="http://zgq-member/user/get";
String result = restTemplate.getForObject(memberUrl, String.class);
//拿到接口返回的数据
System.out.println("8001通过Member调用获取的数据:"+result);
return result;
}
}
5.启动项目
访问: http://127.0.0.1:8001/order/get
这样我们可以看到,我们就拿到了user/get给我们返回的数据
验证Ribben的负载均衡
首先为了验证负载均衡,我们将我们上一篇写的生产者复制一份,名叫zgq_member_second,可以参考上一篇springcloud生产者的创建
,我们需要修改的是将这个模块的端口修改成8002,将userControlle中输出返回输出8002,为的是在控制台输出时更好的区分。
我们将所有的项目关闭,重新启动所有项目,,访问:http://127.0.0.1:8100/
我们可以看到我们注册的两个生产者和一个消费者
我们在访问:http://127.0.0.1:8001/order/get ,多刷新几次页面,可以看到的是不同的端口的输出的值,这也就实现了负载均衡,因为我们在控制台打印了,也可以在控制台查看效果:
温馨提示:这样反复的停止重启很有可能会在浏览器中留下缓存,导致我们在重启之后看不到我们想要的效果,所以最好是将浏览器的数据清除一下!这是我在实现负载均衡时血的教训,花了我一个小时,但是代码都是对的,后来将浏览器清除一下数据立马就好了!