【SpringCloud】Ribbon使用以及避免Component扫描

简介

​ SpringCloud Ribbon 是一个客户端负载均衡器。当请求到达客户端后,客户端从注册中心拉取的服务列表中,根据制定的负载均衡策略来选择对应的目标服务发出请求。

可以理解为服务与服务之间的负载均衡作用,它只不过是处于客户端内。平时使用的Nginx是属于服务端软件的负载均衡器。

依赖

<!-- 使用nacos的话 自动会引入 -->
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
      <version>2.2.9.RELEASE</version>
      <scope>compile</scope>
</dependency>

配置调用服务的规则

这里使用简单的例子,订单服务(order-service)调用库存服务(stock-service)

订单服务

@RestController
@RequestMapping("order")
public class OrderController {

    @Resource
    RestTemplate restTemplate;

    /**
     * 添加订单
     * @return
     */
    @RequestMapping("add")
    public String add() {
        System.out.println("调用了添加订单功能...");

        //执行远程减库存
        String result  = restTemplate.postForObject("http://stock-service/stock/minus", null, String.class);
        return "成功添加订单,执行库存的结果:"+result;
    }
}
@Configuration
public class WebConfig {

    /**
     * 创建restTemplate
     * @param restTemplateBuilder
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
        return restTemplateBuilder.build();
    }
}

库存服务

@RestController
@RequestMapping("stock")
public class StockController {

    @Value("${server.port}")
    private Integer port;

    @PostMapping("minus")
    public String minus() {
        System.out.println(port+"端口调用了减库存....");
        return "减库存成功";
    }
}

使用注解@RibbonClients

  • 创建好规则配置类

不要在这个配置上加任何注解,加@Configuration 的话就不能被ComponentScan扫描的包内创建这个类

/**
 * 随机规则
 */
public class RibbonRandomRuleConfig {

    @Bean
    public IRule iRule() {
        return new RandomRule();
    }
}
  • @RibbonClients
@SpringBootApplication
@EnableDiscoveryClient
@RibbonClients(value = {@RibbonClient(name="stock-service",configuration = {RibbonRandomRuleConfig.class})})
public class OrderNacosApp {
    public static void main(String[] args) {
        SpringApplication.run(OrderNacosApp.class, args);
    }
}

测试效果

8200端口调用了减库存....
8200端口调用了减库存....
8200端口调用了减库存....
8200端口调用了减库存....
8200端口调用了减库存....
8200端口调用了减库存....
8200端口调用了减库存....
8200端口调用了减库存....


8201端口调用了减库存....
8201端口调用了减库存....

application.yml配置规则类

stock-service: #服务名
  ribbon:
    NFLoadBalancerRuleClassName: com.gaby.cloud.order.config.ribbon.RibbonRoundRuleConfig #配置类的全路径
/**
*@Description   轮询
*@Date          2021/12/14 11:06
*@Version
*/
@Configuration
public class RibbonRoundRuleConfig {

    @Bean
    public IRule iRule() {
        return new RoundRobinRule();
    }
}

测试效果

8200端口调用了减库存....
8200端口调用了减库存....
8200端口调用了减库存....
8200端口调用了减库存....
8200端口调用了减库存....

8201端口调用了减库存....
8201端口调用了减库存....
8201端口调用了减库存....
8201端口调用了减库存....
8201端口调用了减库存....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰肥啊

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值