SpringCloudAlibaba基础学习--Ribbon负载均衡与openFeign服务调用

  •  Ribbon负载均衡
  1. Ribbon
     spring Cloud Ribbon 是一个客户端的负载均衡器,提供客户端对服务端的访问控制。
     
  2. 负载均衡策略 
    随机、 轮询、哈希、权重
     
  3.  Ribbon与Nginx 
     Ribbon  
         是将从注册中心获取到的服务缓存到本地,然后在本地实现负载均衡策略。属于本地负载均衡
         应用场景: 微服务中RPC远程调用框架,比如Dubbo、SpringCloud中都是采用本地负载均衡
     
     Nginx    
          将客户端所有请求统一交给 nginx,由 nginx进行实现负载均衡请求转发,属于服务器端负载均衡
          应用场景:  tomcat 、Jetty
      
  • OpenFeign 
     

    是一个Web声明式的Http客户端调用工具,提供接口和注解形式调用,底层采用httpClient技术 。默认集成了 Ribbon实现负载均衡的效果。

    SpringCloud第一代采用feign   第二代采用openFeign

     

  • 项目整合openfeign并实现负载均衡
     
    会员项目
  1.   创建会员项目,在pom.xml引入依赖
     
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
         
      
    
     
          org.springframework.boot
          spring-boot-starter-web
          
     
          org.springframework.boot
          spring-boot-starter-test
          test
    
    
          org.springframework.cloud
          spring-cloud-starter-alibaba-nacos-discovery
          0.2.2.RELEASE
    
    application.yml配置如下:
    spring:
      application:
        ###服务的名称
        name: pitch-member
      cloud:
        nacos:
          discovery:
            ###nacos注册地址
            server-addr: 127.0.0.1:8848
    server:
      port: 9001
  2.   创建会员服务接口及实现
    import org.springframework.web.bind.annotation.GetMapping;
    
    
    public interface MemberService {
    
        @GetMapping("/member")
        String member();
    
        @GetMapping("/params")
        String findMemberById(Integer id);
    }
     
    import com.pitch.service.MemberService;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class MemberServiceImpl implements MemberService {
        @Value("${server.port}")
        private String port;
    
        @Override
        public String member() {
            return "hello admin"+port;
        }
    
        @Override
        public String findMemberById(Integer id) {
            return "hello id"+id+"  "+port;
        }
        
    }
     
     
  3.   启动
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * Hello world!
     *
     */
    @SpringBootApplication
    public class AppMember {
        public static void main( String[] args ) {
            SpringApplication.run(AppMember.class);
        }
    }
    

     
  4.   测试
     http://127.0.0.1:9001/member
     

       订单服务

  1.   创建订单服务项目
     pom.xml添加openfeign依赖; 
     
         org.springframework.cloud
         spring-cloud-starter-openfeign
         2.0.0.RELEASE
     
    application.yml配置
    spring:
      application:
        ###服务的名称
        name: pitch-order
      cloud:
        nacos:
          discovery:
            ###nacos注册地址
            server-addr: 127.0.0.1:8848
    server:
      port: 8001

     

  2.   创建订单openfign服务接口
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    
    @FeignClient("pitch-member")
    public interface OpenFeignMemberService {
    
        @GetMapping("/member")
        String member();
    
        // openfeign如果有参数默认会改成post请求, 需要生效get请求,需要在参数上加 RequestParam注解
        @GetMapping("/params")
        String findMemberById(@RequestParam("id") Integer id);
    }
    
    pitch-member: 表示会员服务的名称
     注意:  openfeign如果有参数默认会改成post请求, 需要生效get请求,需要在参数上加 RequestParam注解
  3.  使用订单服务调用会员服务 
    import com.pitch.openfeign.OpenFeignMemberService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.ServiceInstance;
    import org.springframework.cloud.client.discovery.DiscoveryClient;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.util.List;
    
    @RestController
    public class OrderService {
    
        @Autowired
        private DiscoveryClient discoveryClient;
        @Autowired
        private OpenFeignMemberService openFeignMemberService;
    
    
        @GetMapping("/feign1")
        public String feign1(){
           return openFeignMemberService.member();
        }
    
        @GetMapping("/feign2")
        public String feign2(Integer id){
            return openFeignMemberService.findMemberById(id);
        }
    
        @GetMapping("/info")
        public Object getMemberServerInfo(){
            // 通过服务名称获取nacos上的服务信息        pitch-member:为会员的服务名称
            List instances = discoveryClient.getInstances("pitch-member");
            return instances;
        }
    }
  4. 启动类 添加
    @EnableFeignClients注解
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    
    /**
     * Hello world!
     *
     */
    @SpringBootApplication
    @EnableFeignClients
    public class AppOrder {
    
    
        public static void main( String[] args ){
            SpringApplication.run(AppOrder.class);
        }
    }

     
  5.  启动测试
     启动端口9001会员服务
     启动端口9002会员服务  
     启动订单服务  
     
     测试  http://127.0.0.1:8001/feign1
     测试  http://127.0.0.1:8001/feign2?id=1   
     
     SpringCloudAlibaba基础学习--Ribbon负载均衡与openFeign服务调用_第1张图片SpringCloudAlibaba基础学习--Ribbon负载均衡与openFeign服务调用_第2张图片
    结果: openfeign默认使用Ribbon实现了本地负载均衡

     

你可能感兴趣的:(SpringCloudAlibaba基础学习--Ribbon负载均衡与openFeign服务调用)