springcloud:Ribbon自定义配置

阅读更多

总括:

 

ribbon的使用也是类似zuul一样是个入口,经过这个入口的才会有后面的路由,负载

 

自定义的ribbon只能指定某一个微服用这个自定义的负载,或者应用于所有经过这个项目访问的微服务(放在componentscan扫描范围内,由于框架内部都是

@beanonconditionmiss--这个就是外部只要用自定义的同名的就会用自定义的)

 

需要指定这个系统中访问某一个服务才用自定义策略的时候,这个自定义的不可在主类全局的扫描范围之内

   1,用exlucde: 基于路径的定位排除,或者基于注解的定位排除--------------------java中类似的定位1,用类路径,2,用注解---类似切面,这里用注解定位排除 ---自定义注解的用处就在于定位,标记

   2,自定义的ribbon类在@feignCLient中用属性配置即可

 

 

一、编写一个注解ExcludeFromComponentScan.java

 

package com.itmuch.cloud;

 

public @interface ExcludeFromComponentScan {

 

}

二 、编写一个TestConfiguration.java,将负载均衡策略变为随机

 

package com.itmuch.cloud;

 

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

 

 

import com.netflix.client.config.IClientConfig;

import com.netflix.loadbalancer.IRule;

import com.netflix.loadbalancer.RandomRule;

 

 

@Configuration

@ExcludeFromComponentScan

public class TestConfiguration {

@Autowired

IClientConfig config;

 

@Bean 

public IRule ribbonRule(IClientConfig config){

return new RandomRule();

}

}

public class TestConfiguration {

@Autowired

IClientConfig config;

 

@Bean 

public IRule ribbonRule(IClientConfig config){

return new RandomRule();

}

}

三、修改启动类ConsumerMovieRibbonApplication.java

在类上添加两个注解:

 

 

@RibbonClient(name="microservice-provider-user",configuration = TestConfiguration.class)

@ComponentScan(excludeFilters={@ComponentScan.Filter(type=FilterType.ANNOTATION,value=ExcludeFromComponentScan.class)})

四、在Controller中添加测试代码:

 

@Autowired

private LoadBalancerClient LoadBalancerClient;

 

@GetMapping("/test")

public String test() {

ServiceInstance serviceInstance = this.LoadBalancerClient.choose("microservice-provider-user");

System.out.println("111"+serviceInstance.getHost()+":"+serviceInstance.getPort()+":"+serviceInstance.getServiceId());

 

ServiceInstance serviceInstance2 = this.LoadBalancerClient.choose("microservice-provider-user2");

System.out.println("222"+serviceInstance2.getHost()+":"+serviceInstance2.getPort()+":"+serviceInstance2.getServiceId());

 

return "1";

}

五、启动

先启动eureka,再启动四个提供者实例,7900,7901,7902(user2),7903(user2),修改application.yml即可。最后启动消费者。启动成功界面:

 


springcloud:Ribbon自定义配置_第1张图片
 

 

六、访问页面:localhost:8010/test,刷新八次。



springcloud:Ribbon自定义配置_第2张图片
 

 

小结

到这里,自定义配置的展示就完成了。其中的知识点总结一下。

 

1、扫描包的排除:

@Configuration这个注解是不能@SpringBootApplication的所在扫描到的,否则将自定义的配置将失效。所以需要将TestConfiguration.java排除在包扫描之外,用自定义的注解@ExcludeFromComponentScan,然后在启动类加注解@ComponentScan(excludeFilters{@ComponentScan.Filter(type=FilterType.ANNOTATION,value=ExcludeFromComponentScan.class)})将其排除。

 

2、自定义负载均衡策略的更换。

 

@Bean

public IRule ribbonRule(IClientConfig config){

return new RandomRule();

}

这里是关键,还可以换成其它负载均衡策略。

 

  • springcloud:Ribbon自定义配置_第3张图片
  • 大小: 51.5 KB
  • springcloud:Ribbon自定义配置_第4张图片
  • 大小: 42.8 KB
  • 查看图片附件

你可能感兴趣的:(springcloud)