<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>microservice-consumer-movie-ribbon</artifactId> <packaging>jar</packaging> <parent> <groupId>com.itmuch.cloud</groupId> <artifactId>microservice-spring-cloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> </project>
package com.itmuch.cloud.entity; import java.math.BigDecimal; public class User { private Long id; private String username; private String name; private Short age; private BigDecimal balance; public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Short getAge() { return this.age; } public void setAge(Short age) { this.age = age; } public BigDecimal getBalance() { return this.balance; } public void setBalance(BigDecimal balance) { this.balance = balance; } }
package com.itmuch.cloud.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import com.itmuch.cloud.entity.User; @RestController public class MovieController { @Autowired private RestTemplate restTemplate; @GetMapping("/movie/{id}") public User findById(@PathVariable Long id) { return this.restTemplate.getForObject("http://microservice-provider-user/simple/" + id, User.class); } }
package com.itmuch.cloud; 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.cloud.netflix.ribbon.RibbonClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.FilterType; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableEurekaClient public class RibbonApplication { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(RibbonApplication.class, args); } }
spring: application: name: microservice-consumer-movie-ribbon server: port: 8010 eureka: client: healthcheck: enabled: true serviceUrl: defaultZone: http://user:password123@localhost:8761/eureka instance: prefer-ip-address: true
@RibbonClient
聲明其餘配置(位於RibbonClientConfiguration
之上)來徹底控制客戶端。例:啓動類java
package com.itmuch.cloud; 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.cloud.netflix.ribbon.RibbonClient; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; import com.itmuch.config.TestConfiguration; @SpringBootApplication @EnableEurekaClient @RibbonClient(name="microservice-provider-user",configuration=TestConfiguration.class) public class RibbonApplication { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(RibbonApplication.class, args); } }
package com.itmuch.config; 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 public class TestConfiguration { @Autowired IClientConfig config; @Bean public IRule ribbonRule(IClientConfig config) { return new RandomRule(); } }
圖文:web
111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7801:microservice-provider-user2 111--->172.20.10.4:7901:microservice-provider-user 222--->172.20.10.4:7800:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7801:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7800:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7801:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7800:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7801:microservice-provider-user2 111--->172.20.10.4:7901:microservice-provider-user 222--->172.20.10.4:7800:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7801:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7800:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7801:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7800:microservice-provider-user2 111--->172.20.10.4:7901:microservice-provider-user 222--->172.20.10.4:7801:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7800:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7801:microservice-provider-user2 111--->172.20.10.4:7900:microservice-provider-user 222--->172.20.10.4:7800:microservice-provider-user2 111--->172.20.10.4:7901:microservice-provider-user 222--->172.20.10.4:7801:microservice-provider-user2 111--->172.20.10.4:7901:microservice-provider-user 222--->172.20.10.4:7800:microservice-provider-user2
pom.xml算法
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>microservice-consumer-movie-ribbon-config</artifactId> <packaging>jar</packaging> <parent> <groupId>com.itmuch.cloud</groupId> <artifactId>microservice-spring-cloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> </project>
配置文件spring
spring: application: name: microservice-consumer-movie-ribbon-config server: port: 8010 eureka: client: healthcheck: enabled: true serviceUrl: defaultZone: http://user:password123@localhost:8761/eureka instance: prefer-ip-address: true microservice-provider-user: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
實體類apache
package com.itmuch.cloud.entity; import java.math.BigDecimal; public class User { private Long id; private String username; private String name; private Short age; private BigDecimal balance; public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Short getAge() { return this.age; } public void setAge(Short age) { this.age = age; } public BigDecimal getBalance() { return this.balance; } public void setBalance(BigDecimal balance) { this.balance = balance; } }
Controller類服務器
package com.itmuch.cloud.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import com.itmuch.cloud.entity.User; @RestController public class MovieController { @Autowired private RestTemplate restTemplate; @Autowired private LoadBalancerClient loadBalancerClient; @GetMapping("/movie/{id}") public User findById(@PathVariable Long id) { return this.restTemplate.getForObject("http://microservice-provider-user/simple/" + id, User.class); } @GetMapping("/test") public String test(){ ServiceInstance serviceInstance=this.loadBalancerClient.choose("microservice-provider-user"); System.out.println("cyj:--->"+serviceInstance.getHost()+":"+serviceInstance.getPort()+":"+serviceInstance.getServiceId()); ServiceInstance serviceInstance2=this.loadBalancerClient.choose("microservice-provider-user2"); System.out.println("lxq:--->"+serviceInstance2.getHost()+":"+serviceInstance2.getPort()+":"+serviceInstance2.getServiceId()); return "1"; } }
圖文app
@RibbonClient
,stores: ribbon: listOfServers: example.com,google.com
ribbon: eureka: enabled: false
ribbon.eureka.enabled = false
將明確禁用在Ribbon中使用Eureka。spring: application: name: microservice-consumer-movie-ribbon-config server: port: 8010 eureka: client: healthcheck: enabled: true serviceUrl: defaultZone: http://user:password123@localhost:8761/eureka instance: prefer-ip-address: true ribbon: eureka: enabled: false microservice-provider-user: ribbon: listOfServers: localhost:7800