ribbon 负载均衡

[复制链接]
发表于 2024-11-23 15:39:40 | 显示全部楼层 |阅读模式

1.1 Ribbon简介

image.png

集中式负载均衡

image.png

进程内负载均衡

image.png

1.1 ribbon的其中负载均衡策略对比和区别

image.png

spring.application.name=eureka-consumer
server.port=8082

eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/

#默认是hostname 注册,改成IP 注册

eureka.instance.perferIpAddress=true

#设置负载均衡策略

eureka-provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

1.1 点对点直连:方便ribbon开发调试eureka-consumer-remove-eureka

生产者和消费者直接连接,不经过eureka

image.png

1.1.1 Resource:application.properties和logback.xml

spring.application.name=eureka-consumer

server.port=8082



#禁用 eureka

ribbon.eureka.enabled=false

#指定具体的服务实例清单

eureka-provider.ribbon.listOfServers=192.168.10.61:8081,192.168.10.16:8081

控制层

package com.agan.eureka.consumer.controller;


import java.util.List;


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

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;


import com.agan.eureka.consumer.domain.Product;

import com.agan.eureka.consumer.service.ProductService;

/\*\*

 \* @author 阿甘 http://study.163.com/instructor/1016671292.htm

 \* @version 1.0

 \*/

@RestController

public class ProductController {

   @Autowired

   private ProductService productService;



   @RequestMapping(value="list",method=RequestMethod.GET)

   public List<Product> listProduct(){

      List<Product> list=this.productService.listProduct();

      return  list;

   }

}

业务层

package
import java.util.List;

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

import org.springframework.cloud.client.ServiceInstance;

import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;

import org.springframework.core.ParameterizedTypeReference;

import org.springframework.http.HttpMethod;

import org.springframework.http.ResponseEntity;

import org.springframework.stereotype.Service;

import org.springframework.web.client.RestTemplate;

import com.agan.eureka.consumer.domain.Product;

/\*\*

\*

\*@author 阿甘

\*@see  http://study.163.com/instructor/1016671292.htm

\*@version 1.0

\*

\*/

@Service

public class ProductService {

@Autowired

private LoadBalancerClient loadBalancerClient;//ribbon 负载均衡客户端

public List listProduct(){

ServiceInstance si=loadBalancerClient.choose("eureka-provider");

StringBuffer sb=new StringBuffer("");

sb.append("http://");

sb.append(si.getHost());

sb.append(":");

sb.append(si.getPort());

sb.append("/list");

System.out.println(sb.toString());

RestTemplate rt=new RestTemplate();

ParameterizedTypeReference> typeRef

=new ParameterizedTypeReference>(){};



ResponseEntity>  resp=rt.exchange(sb.toString(), HttpMethod.GET, null, typeRef) ;

List plist=resp.getBody();

return plist;

}

}

1.1.1 启动类

package com.agan.eureka.consumer;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

/**

* @author 阿甘

* @see http://study.163.com/instructor/1016671292.htm

* @version 1.0

*/

@SpringBootApplication

public class ConsumerApplication {

public static void main(String[] args) {

SpringApplication.run(ConsumerApplication.class, args);

}

}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

GMT+8, 2025-9-8 02:47 , Processed in 0.095941 second(s), 35 queries Archiver|手机版|小黑屋|Attic ( 京ICP备2020048627号 )

快速回复 返回顶部 返回列表