與我上一章寫到的服務提供者相對,有人提供了服務,那麼就要有人去調用這個服務
創建服務消費者
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 ,多刷新幾次頁面,可以看到的是不同的端口的輸出的值,這也就實現了負載均衡,因爲我們在控制檯打印了,也可以在控制檯查看效果:
溫馨提示:這樣反覆的停止重啓很有可能會在瀏覽器中留下緩存,導致我們在重啓之後看不到我們想要的效果,所以最好是將瀏覽器的數據清除一下!這是我在實現負載均衡時血的教訓,花了我一個小時,但是代碼都是對的,後來將瀏覽器清除一下數據立馬就好了!