• spring-cloud: eureka之:ribbon负载均衡自定义配置(二)


    spring-cloud: eureka之:ribbon负载均衡自定义配置(二)

    有默认配置的话基本上就是轮询接口,现在我们改用自定义配置,同时支持:轮询,随机接口读取

    准备工作:

    1.eureka服务

    2.两个user服务: 项目名:spring-cloud-user接口:7900/7901

    3.两个user服务:项目名:spring-cloud-user2接口:8800/8801

    4.movie服务,读取/调用user信息接口

    eureka启动文件加入@EnableEurekaServer注解

    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(EurekaApplication.class, args);
    	}
    }
    

    user服务:

    spring-cloud-user配置文件:

    #port
    server.port=7901/7900
    #data
    spring.jpa.generate-ddl=false
    spring.jpa.show-sql=true
    spring.jpa.hibernate.ddl-auto=none
    spring.datasource.platform=h2
    spring.datasource.schema=classpath:schema.sql
    spring.datasource.data=classpath:data.sql
    spring.application.name=spring-cloud-user
    #log
    logging.level.root=INFO
    logging.level.org.org.hibernate=INFO
    logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
    logging.level.org.hibernate.type.descriptor.sql.BasicExtractor=TRACE
    logging.level.com.muyang=debug
    #eureka
    eureka.client.serviceurl.defaultzone=http://localhost:8761/eureka
    eureka.instance.preferIpAddress=true
    

    spring-cloud-user启动文件加入@EnableEurekaClient注解

    @EnableEurekaClient
    @SpringBootApplication
    public class BootUserApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(BootUserApplication.class, args);
    	}
    }
    

    spring-cloud-user的接口文件代码

    @RestController
    public class UserController {
    
    	@Autowired
    	private UserRepository userRepository;
    	
    	@GetMapping("/simple/{id}")
    	public User findById(@PathVariable Long id)
    	{
    		return userRepository.findOne(id);
    	}
    	
    }
    

    spring-cloud-user2的配置同上,请注意相应的端口号的修改.

    movie服务:

    新建一个testConfiguration.java配置文件,跟启动文件目录同级

    然后再新建一个@interface的ExcludeFromComponentScan注解文件,作为testConfiguration.java的componetscan注解

    ExcludeFromComponentScan.java

    public @interface ExcludeFromComponentScan {
    
    }
    

    TestConfiguration.java配置文件

    引入componetScan,和随机接口读取

    @Configuration
    @ExcludeFromComponentScan
    public class TestConfiguration {
    
    	//@Autowired
    	//IClientConfig config;
    	
    	//随机
    	@Bean
    	public IRule ribbonIRule()
    	{
    		return new RandomRule();
    	}
    	
    }
    

    Application.java启动文件

    再启动文件加入,@EnableEurekaClient注解,

    同时设置spring-cloud-user接口为随机读取:@RibbonClient(name = "spring-cloud-user", configuration = TestConfiguration.class)

    排除不合适的组件类型:excludeFilters:指定不适合组件扫描的类型

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

    @EnableEurekaClient
    @SpringBootApplication
    
    
    
    //随机spring-boot-user
    @RibbonClient(name = "spring-boot-user", configuration = TestConfiguration.class)
    @ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, value = ExcludeFromComponentScan.class) })
    
    
    //spring-boot-user2负载均衡
    public class Application {
         
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
     
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

      

    movieController.java文档

    以/test为例,spring-cloud-user为随机读取接口,spring-cloud-user2位轮询读取接口

    @RestController
    public class MovieController {
    
    	@Autowired
    	private RestTemplate restTemplate;
    	
    	@Autowired
    	LoadBalancerClient loadBalancerClient;
    	
    	@GetMapping("/movie/{id}")
    	public User findById(@PathVariable Long id)
    	{
    		//http://localhost:7900/simple/
    		return restTemplate.getForObject("http://spring-boot-user/simple/" + id, User.class);
    	}
    	
    	
    	@GetMapping("/test")
    	public String testUser()
    	{       //随机
    		ServiceInstance serviceInstance = this.loadBalancerClient.choose("spring-boot-user");
    		System.out.println("111:"+serviceInstance.getServiceId() + ":" + serviceInstance.getHost() + ":" + serviceInstance.getPort());
    		//负载均衡
    		ServiceInstance serviceInstance2 = this.loadBalancerClient.choose("spring-boot-user2");
    		System.out.println("222:" + serviceInstance2.getServiceId() + ":" + serviceInstance2.getHost() + ":" + serviceInstance2.getPort());
    		
    		return "1";
    		
    	}
    }
    
  • 相关阅读:
    人脉是麻烦出来的
    oracle撤销表空间和回滚段
    linux虚拟机ip地址更改
    linux各个文件夹的用途
    Apache的配置文件http.conf参数含义详解
    账户管理_新建用户_用户组
    【刷题】BZOJ 3994 [SDOI2015]约数个数和
    【刷题】BZOJ 2301 [HAOI2011]Problem b
    【刷题】洛谷 P3455 [POI2007]ZAP-Queries
    【刷题】BZOJ 2820 YY的GCD
  • 原文地址:https://www.cnblogs.com/achengmu/p/9484437.html
Copyright © 2020-2023  润新知