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 ,多刷新几次页面,可以看到的是不同的端口的输出的值,这也就实现了负载均衡,因为我们在控制台打印了,也可以在控制台查看效果:
在这里插入图片描述
温馨提示:这样反复的停止重启很有可能会在浏览器中留下缓存,导致我们在重启之后看不到我们想要的效果,所以最好是将浏览器的数据清除一下!这是我在实现负载均衡时血的教训,花了我一个小时,但是代码都是对的,后来将浏览器清除一下数据立马就好了!

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