定制小程序开发springcloud之ribbon的使用

springcloud-是什么?

ribbon定制小程序开发是开发的一套负载均衡的工具,只要为ribbon定制小程序开发提供应用程序名,定制小程序开发就可以实现负债均衡。ribbon提供了很多负载均衡算法。也就是com.netflix.loadbalancer.IRule接口的实现类。我们也可以自己定义负载均衡算法。

ribbon架构图

ribbon具体代码实现

1.首先我们需要一个eureka注册中心,最少两个服务提供者,一个服务消费方。

项目结构:

 2.客户端我们需要导入eureka客户端的pom文件,因为eureka-client已经包含了ribbon的包了,所以不用重复导入。

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  4. </dependency>

可以看到包含关系

 3.在往spring容器里面注入RestTemplate的时候,加上注解LoadBalanced可以通过服务名访问服务提供者,并支持负载均衡。

  1. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.client.RestTemplate;
  5. @Configuration
  6. public class ApplicationConfig {
  7. @Bean
  8. @LoadBalanced // 多个服务提供者可以轮询调用
  9. public RestTemplate restTemplate(){
  10. return new RestTemplate();
  11. }
  12. }

4.有了LoadBalanced注解,我们可以不用写ip地址,直接写应用的名称。  比如我们有两个一样的服务只是端口号不同,那就可以通服务名去调用服务。

  1. import com.xx.job.common.CommonResult;
  2. import com.xx.job.entity.Payment;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.cloud.client.ServiceInstance;
  5. import org.springframework.cloud.client.discovery.DiscoveryClient;
  6. import org.springframework.http.ResponseEntity;
  7. import org.springframework.web.bind.annotation.*;
  8. import org.springframework.web.client.RestTemplate;
  9. import java.util.List;
  10. @RestController
  11. @RequestMapping("/consumer")
  12. public class ConsumerController {
  13. // 有了LoadBalanced注解,我们可以不用写ip地址,直接写应用的名称。
  14. // 比如我们有两个一样的服务只是端口号不同,那就可以通服务名去调用服务。
  15. public static final String URI = "http://SPRING-CLOUD-PAYMENT";
  16. @Autowired
  17. private RestTemplate restTemplate;
  18. @Autowired
  19. private DiscoveryClient discoveryClient;
  20. @GetMapping("/selectById/{id}")
  21. public CommonResult selectById(@PathVariable Long id){
  22. ResponseEntity<CommonResult> forEntity = restTemplate.getForEntity(URI + "/payment/selectById/" + id, CommonResult.class);
  23. CommonResult body = forEntity.getBody();
  24. return body;
  25. }
  26. @GetMapping("/insert")
  27. public CommonResult insert( Payment payment){
  28. ResponseEntity<CommonResult> forEntity = restTemplate.postForEntity(URI + "/payment/insert", payment, CommonResult.class);
  29. return forEntity.getBody();
  30. }
  31. @GetMapping("/discovery")
  32. public Object discoveryClient(){
  33. List<String> services = discoveryClient.getServices();
  34. services.forEach(x->{
  35. System.out.println(x);
  36. });
  37. List<ServiceInstance> instances = discoveryClient.getInstances("SPRING-CLOUD-PAYMENT");
  38. instances.forEach(x->{
  39. System.out.println(x.getHost());
  40. System.out.println(x.getInstanceId());
  41. System.out.println(x.getPort());
  42. System.out.println(x.getServiceId());
  43. System.out.println(x.getUri());
  44. System.out.println(x.getMetadata());
  45. System.out.println(x.getScheme());
  46. System.out.println("------------------------");
  47. });
  48. return discoveryClient;
  49. }
  50. }

5.Ribbon更换默认 RandomRule(随机)

注意:默认算法配置类不能放到@ComponentScan注解同级或者子级。

  1. import com.netflix.loadbalancer.RandomRule;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. @Configuration
  5. public class MyRandomRule {
  6. @Bean
  7. public RandomRule randomRule(){
  8. return new RandomRule();
  9. }
  10. }

负载均衡算法有哪些

 

启动类配置RibbonClient注解,name要调用的服务提供者,configuration负载配置类

  1. import com.xx.MyRule.MyRandomRule;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  5. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  6. import org.springframework.cloud.netflix.ribbon.RibbonClient;
  7. import org.springframework.cloud.netflix.ribbon.RibbonClients;
  8. @EnableDiscoveryClient
  9. @EnableEurekaClient
  10. @SpringBootApplication
  11. @RibbonClient(name = "SPRING-CLOUD-PAYMENT",configuration = MyRandomRule.class)
  12. public class OrderConsumer80 {
  13. public static void main(String[] args) {
  14. SpringApplication.run(OrderConsumer80.class,args);
  15. }
  16. }

6.完成,测试

git地址:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发