SpringCloud之服務消費者和負載均衡

與我上一章寫到的服務提供者相對,有人提供了服務,那麼就要有人去調用這個服務

創建服務消費者

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章