Ribbon负载均衡与nacos集群

发布于:2022-11-09 ⋅ 阅读:(9) ⋅ 点赞:(0) ⋅ 评论:(0)

 ribbon是基于netfilx ribbon实现的一个工作在consumer端的负载均衡工具,提供了很多负载均衡策略:轮询、随机

nacos集成了ribbon 不需要启动器

 

 先配置一个RestTemplate

  RestTemplate是由Spring框架提供的一个可用于应用中调用rest服务的类它简化了与http服务的通信方式,统一了RESTFul的标准,封装了http连接,我们只需要传入url及其返回值类型即可。相较于之前常用的HttpClientRestTemplate是一种更简单的调用RESTFul服务的方式

@Configuration
public class BeanConfig {
    @Bean
    public RestTemplate restTemplate(){
        return  new RestTemplate();
    }
}

利用注解开启负载均衡  @LoadBalanced//开启负载均衡

负载均衡默认轮询策略  可以自行配置随机策略

@Configuration
public class BeanConfig {
    @Bean
    /**
     * 添加了@LoadBalanced注解之后,Ribbon会给restTemplate请求添加一个拦截器,在拦截器中获取
     * 注册中心的所有可用服务,通过获取到的服务信息(ip,port)替换 serviceId 实现负载请求。
     */
    @LoadBalanced//开启负载均衡
    public RestTemplate restTemplate(){
        return  new RestTemplate();
    }

    //随机策略
    @Bean
    public IRule iRule(){
        return new RandomRule();
    }
}

application.yml

server:
  port: 8090
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.81.130
  application:
    name: ribbon-provider
server:
  port: 8099
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.81.130
  application:
    name: ribbon-provider

测试

@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;//获取服务的实例的工具类

    @RequestMapping("/getUserById/{id}")
    public User getUserById(@PathVariable("id") Integer id){
        String url ="http://ribbon-provider/provider/getUserById/"+id;
        return restTemplate.getForObject(url,User.class);
    }
}

//不使用ribbon:ip:port
        //String serviceUrl = "127.0.0.1:9090";
        //使用ribbon:不再使用ip:port的方式,而是改成了serviceId(即Nacos中注册的服务名称)

nacos集群搭建
       1)修改nacos的cluster.conf,配置3台nacos的通讯地址
            cd /usr/local/nacos/conf
            cp cluster.conf.example cluster.conf
            vim cluster:
                192.168.81.130:8848
                192.168.81.130:8849
                192.168.81.130:8850

复制3台nacos
            cd /usr/local
            mkdir nacos_cluster
            cp -r nacos nacos_cluster/nacos_8848
            cp -r nacos nacos_cluster/nacos_8849
            cp -r nacos nacos_cluster/nacos_8850

修改3台nacos的port
            vim /usr/local/nacos_cluster/nacos_8849/conf/application.properties:
                server.port=8849
            vim /usr/local/nacos_cluster/nacos_8849/conf/application.properties:
                server.port=8850

启动集群
            cd /usr/local/nacos_cluster/nacos_8848/bin
            ./startup
            cd /usr/local/nacos_cluster/nacos_8849/bin
            ./startup
            cd /usr/local/nacos_cluster/nacos_8850/bin
            ./startup

搭建nginx
        1)安装c语言环境
            yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
        2)下载nginx
            cd /usr/upload
            wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
        3)解压
            tar -zxvf nginx-1.12.0.tar.gz
        4)配置安装路径
            cd nginx-1.12.0
            ./configure --prefix=/usr/local/nginx
        5)编译并安装
            make && make install
        6)启动和关闭
            启动:
                cd /usr/local/nginx/sbin
                ./nginx
            关闭:
                cd /usr/local/nginx/sbin
                ./nginx -s stop

  7)配置nginx代理nacos集群
            upstream nacos {
              server 192.168.81.130:8848;
              server 192.168.81.130:8849;
              server 192.168.81.130:8850;
            }

            server {
              location / {
                proxy_pass http://nacos;
              }
            }