1.1 Ribbon简介

集中式负载均衡

进程内负载均衡

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

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

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);
}
} |