72 SpringCloud客户端负载均衡器

1 本地负载均衡器基本概念

2,本地负载均衡器与nginx的区别

3,利用openfeign客户端实现rpc调用

4,Ribbon实现客户端负载均衡器源码解读

本地负载均衡器:
什么是本地负载均衡器: 我们的消费者从我们的注册中心上获取接口调用地址列表,本地实现负载均衡算法(轮询,随机,hash一致,权重)等原理,获取接口的列表,采用算法获取选择一个接口地址实现本地的rpc远程调用。

本地负载均衡器有: 自己写基于httpclient客户端,ribbon SpringCloud 第一代中,
loadbalancerSpringCloud 自己研发。
如何选择 ribbon 还是loadbalancer
SpringCloud Rest 或者Openfeign 都是默认支持ribbon

本地负载均衡器与nginx实现负载均衡器有哪些区别呢?

Nginx 属于服务器负载均衡器,客户端所有的请求都是统一交给我们的nginx,再由我们的nginx转发到我们的真实服务实现负载均衡。
本地负载均衡器: 属于客户端负载均衡
Nginx实现负载均衡与本地实现负载均衡器应用场景。
Nginx 实现对我们的服务器实现负载均衡器 一般用于tomcat、jetty服务器。
本地负载均衡器属于客户端负载均衡器,一般用于微服务rpc远程调用 比如dubbo,rest模板,openfeign 或者rpc远程调用框架。
SpringCloud rest 或者openfeign 客户端默认都是ribbon 实现调用。
@loadbalancer 实际上是我们的springcloud 自己写的

loadBlancerClientSpringCloud 根据服务id 获取id获取负载均衡器rpc地址。
Openfeign 客户端:
SpringCloud 第一代采用feign 第二代采用openfeign
openfeign 客户端作用: 是一个web声明式的http客户端远程调用工具。,底层是封装HttpClient 技术。
Openfeign 属于Springcloud自己研发,而feign是netflix 代码写法几乎没有任何变化。

真正的一个微服务架构 项目架构模式:

mayikt-meite-openfeign-parent---整个依赖父类
-----mayikt-service-api---开放的api接口 定义了接口没有任何代码业务实现。
--------mayikt-service-api-member---会员提供开放接口
--------mayikt-service-api-order---订单提供开放接口

-----mayikt-service-impl---对我们开放的api接口代码实现
--------mayikt-service-impl-member---会员提供开放接口
--------mayikt-service-impl-order---订单提供开放接口

微服务构建基本的样式,最大的优点是能够对我们feign 实现复用机制。
注意feign客户端调用的事项: 如果请求参数没有加上注解的话,默认采用post请求发送
Openfeign 默认支持负载均衡, ribbon
nacos 服务注册 服务名称是否 有下划线
在微服务架构中服务的名称不能有下划线。
Maven依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>


<dependencies>
    <!--  springboot 整合web组件-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>0.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>
</dependencies>

会员服务接口

public interface MemberService {

    /**
     * 提供会员接口
     *
     * @param userId
     * @return
     */
    @GetMapping("/getUser")
    String getUser(@RequestParam("userId") Long userId);
}


@RestController
public class MemberServiceImpl implements MemberService {
    @Value("${server.port}")
    private String serverPort;

    @Override
    public String getUser(Long userId) {
        return "我是会员服务端口号为:" + serverPort;
    }
}

订单服务

@RestController
public class OrderService {
    @Autowired
    private MemberServiceFeign memberServiceFeign;

    /**
     * 订单调用会员
     *
     * @return
     */
    @GetMapping("/orderToMember")
    public String orderToMember() {
        String result = memberServiceFeign.getUser(10L);
        return "我是订单服务,调用会员服务接口返回结果:" + result;
    }
}

@FeignClient(name = "meitemayikt-member")
public interface MemberServiceFeign extends MemberService {
//    /**
//     * 提供会员接口
//     *
//     * @param userId
//     * @return
//     */
//    @GetMapping("/getUser")
//    String getUser(@RequestParam("userId") Long userId);
}

微服务架构基本的样式 最大的优点能够对我们feign实现复用机制。

注意feign客户端调用的事项:如果请求参数没有加上注解的话,默认采用post请求发送。
Openfeign默认是支持负载均衡,ribbon。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章