dubbo + ZooKeeper

本文详细介绍了如何搭建Dubbo框架,包括consumer和provider的配置、Zookeeper注册中心的使用。讨论了Dubbo的负载均衡策略,如随机、轮询、哈希一致性和最少活跃数。还涵盖了Dubbo的容错机制,如Failover和Failfast。最后,简述了Zookeeper的角色、数据结构和在分布式环境中的应用。
摘要由CSDN通过智能技术生成

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

【dubbo系列一】搭建 dubbo 框架

consumer和provider是框架中必然存在的,Registry做为全局配置信息管理模块,推荐生产环境使用Registry,可实时推送现存活的服务提供者,Monitor一般用于监控和统计RPC调用情况、成功率、失败率等情况,让开发及运维了解线上运行情况

应用执行过程大致如下:

1,启动服务者,根据协议信息绑定到配置的IP和端口上,如果已有绑定过相同IP和端口则跳过

2,注册服务信息至注册中心

3,客户端启动,根客户端启动,根据接口和协议信息订阅注册中心中注册的服务,注册中心将存活的服务地址通知到客户端,当有服务信息变更时客户端可以通过定时通知得到变更信息

4,在客户端需要调用服务时,从内存中拿到上次通知的所有存活服务地址,根据路由信息和负载均衡机制选择最终调用的服务地址,发起调用

5,通过filter分别在客户端发送请求前和服务端接收请求后,通过异步记录一些需要的信息传递到monitor做监控或者统计

注册中心 interface

pom.xml配置

   <dependencies>

        <!--spring框架-->

        <!--用于spring整体整合的jar包 {jdbc+web+test+mvc+核心}-->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context</artifactId>

            <!--<version>5.1.5.RELEASE</version>-->

        </dependency>

        <!--分页管理-->

        <dependency>

            <groupId>com.github.pagehelper</groupId>

            <artifactId>pagehelper</artifactId>

            <!--<version>5.1.2</version>-->

        </dependency>

        <!--hutool工具类-->

        <dependency>

            <groupId>cn.hutool</groupId>

            <artifactId>hutool-all</artifactId>

            <version>5.7.17</version>

        </dependency>

    </dependencies>

服务端 (提供层provider)

dubbo-privder.xml下配置信息

<?xml version="1.0" encoding="UTF-8"?>

<!--suppress SpringFacetInspection -->

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd

       http://dubbo.apache.org/schema/dubbo

       https://dubbo.apache.org/schema/dubbo/dubbo.xsd">

  <!--配置应用名 提供方应用信息,用于计算依赖关系 -->

    <dubbo:application name="student-app"  /> 

  <!--配置dubbo注解识别处理器,不指定包名的话会在spring bean中查找对应实例的类配置了dubbo注解的-->

    <dubbo:annotation ="com.cxl.service"></dubbo:annotation> 

 <!-- 配置注册中心,通过group指定注册中心分组,可通过register配置是否注册到该注册中心以及subscribe配置是否从该注册中心订阅, -->

    <dubbo:registry address="zookeeper://192.168.182.130:2182" group="test"/> 

 <!-- 配置服务协议,通过IP指定绑定的IP地址,不指定或者指定非法IP的情况下会绑定在0.0.0.0 -->

    <dubbo:protocol name="dubbo" port="20882" /> 

 <!--通过xml配置文件配置服务暴露,首先要有个spring bean实例(无论是注解配置的还是配置文件配置的),在下面ref中指定bean实例ID,作为服务实现类-->

    <!-- <dubbo:service interface="com.cxl.service.StudentService" ref="StudentServiceImpl" version="1.0"></dubbo:service>

  -->

</beans>

通过注解方式配置服务暴露,Component是Spring bean注解,Service是dubbo的注解(不要和spring bean的service注解弄混),如前文所述,dubbo注解只会在spring bean中被识别

import com.cxl.service.StudentService;

import org.apache.dubbo.config.annotation.Service;

import org.springframework.stereotype.Component;

@Component

@Service(version="1.0")  //版本可省略

public class StudentServiceImpl implements StudentService {

    @Override

    public List<Student> list() {

        ArrayList<Student> list = new ArrayList<>();

        return list;

    }

}

pom.xml配置

<dependencies>

        <!-- dubbo依赖 -->

        <dependency>

            <groupId>org.apache.dubbo</groupId>

            <artifactId>dubbo</artifactId>

        </dependency>

        <dependency>

            <groupId>org.apache.dubbo</groupId>

            <artifactId>dubbo-dependencies-zookeeper</artifactId>

            <type>pom</type>

        </dependency>

        <!-- spring的jar包 -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-core</artifactId>

            <!-- 引用版本 -->

            <scope>compile</scope>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-beans</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-web</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-webmvc</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-jdbc</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-tx</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context-support</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-test&l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值