SpringCloud学习3 - 组件:Ribbon负载均衡、请求另一个微服务的数据

28 阅读1分钟

文章目录

1. Ribbon负载策略

负载均衡: 将用户的请求平摊的分配到多个相同功能的服务上,从而达到服务器的高效利用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RQgCCNNq-1587806642976)(en-resource://database/24754:1)]

2. 使用

步骤1:添加依赖

<dependencies>
    
    <!-- Eureka_Client包 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <!-- 这个就是Ribbon包 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--添加springboot_mybatis依赖-->

    <!--mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>

</dependencies>


步骤2:启动类中添加注解@LoadBalanced、以及注册RestTemplate对象、以及负载的策略给容器管理、

@SpringBootApplication
@EnableEurekaClient
public class OrderServiceApplication {

    @Bean
    @LoadBalanced //开启负载功能
    public RestTemplate setRestTemplate() {
        return new RestTemplate();
    }
    
    // Ribbon的负载策略配置
    @Bean
    public IRule getIRule() {
        return new RandomRule();
    }

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }

}


步骤3:配置文件application.yml 跟 Eureka_client的配置文件差不多


步骤4:访问另一个微服务获取数据

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    RestTemplate restTemplate;
    
    @Override
    public int add(Book book) {
            
            // 产品的id号
            int productId = 1;
            
            //获取订单明细中关于产品的信息 -- 调用商品服务进行获取信息
            String url = "http://productService/products/" + productId;
            
            //将json数据转为对应的对象
            Product product = restTemplate.getForObject( url, Product.class );
    }
}