java面试—dubbo

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qizonghui/article/details/81675956

1.dubbo的容错机制;
    1)、Failover Cluster:失败自动切换,当出现失败,重试其他服务器
    2)、Failfast Cluster:快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作。
    3)、Failsafe Cluster:失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作。
    4)、Failback Cluster:失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作。
    5)、Forking Cluster:并行调用多个服务器,只要一个成功即返回,通常用于实际性要求比较高的读写操作,但需要浪费更多服务资源,可通过forks="2"来设置最大并行数;
    6)、Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错,
    *在实际应用中查询语句容错策略建议使用默认Faillover Cluster,而增删改建议使用Failfast Cluster或者使用Failover Cluster(retries="0")策略,防止出现数据,重复添加等待其他问题
2.dubbo中遇到的问题
    1)、增加提供服务版本号和消费服务版本号
        这个具体来说不算是个问题,而是一种问题的解决方案,在我们的实际工作中面临各种环境资源短缺的问题,刚刚开始提供一个服务进行相关开发和测试,但是当有多个环境多个版本,多个任务的时候,就不满足我们的需求,通过提供方增加版本的方式来区分,

<dubbo:serviceinterface="com.XXX.XXXservice" ref="xXXservice" version="1.0"/>
<dubbo:referceid="xxxService" interface="com.XXX.XXXservice" version="1.0">

2)、dubbo reference注解
        @Reference只能在springbean实例对应的当前类中使用,暂时无法在父类使用;如果确实要在父类声明一个引用,可通过配置文件配置dubbo:reference,然后在引用的地方跟引用sprinbean一样可以;
    3)、出现RpcException:No provid for remote service异常,表示没有可用的服务提供者
        a.检查链接的注册中心是否真确
        b.到注册中心查看相应的服务提供者是否存在
        c.检查服务提供者是否正常进行
    4)、服务提供者没挂,在注册中心看不到
        确认服务提供者是否链接真确的注册中心,地址网络等链接;看看服务器提供者是否繁忙,阻塞

3.dubbo链接方式
    广播,直连,zookeeper注册中心
    1)、dubbo广播:
    manager服务端配置

        <!-- 提供方应用信息,用于计算机依赖关系 -->
		<dubbo:application name="manager-service"/>
		<!-- 使用multicate广播暴露服务地址 -->
		<dubbo:registry address="multicast://ip:port"/>
		<!-- 使用dubbo协议在20880协议暴露服务 -->
		<dubbo:protocol name="dubbo" port="20880"/>
		<!-- 声明需要暴露的服务接口 -->
		<dubbo:service interface="com.**.**.Testservice" ref="testserviceImpl"/>

客户端配置manager-web配置

        <!-- 配置dubbo服务 -->
		<dubbo:application name="manager-web"/>
		<!-- 使用multicast广播暴露服务地址 -->
		<dubbo:registry address="multicast://ip:port"/>
		<!-- 声明要调用的服务timeout是设置连接超时最长时间,如果不设置,默认超时时间3秒 -->
		<dubbo:service interface="com.***.Testservice" id="testService" timeout="60000"/>

2)、dubbo直连
    服务端配置:取消广播,注册中心地址N/A

		<!-- 提供方应用信息,用于计算机依赖关系 -->
		<dubbo:application name="manager-service"/>
		<!-- <dubbo:registry address="multicast://ip:port"/> -->
		<dubbo:registry address="N/A">
		<!-- 使用dubbo协议在20880协议暴露服务 -->
		<dubbo:protocol name="dubbo" port="20880"/>
		<!-- 声明需要暴露的服务接口 -->
		<dubbo:service interface="com.**.**.Testservice" ref="testserviceImpl"/>

manager-web配置,取消广播,从指定url中获取服务

<!-- 配置dubbo服务 -->
		<dubbo:application name="manager-web"/>
		<!-- 声明要调用的服务timeout是设置连接超时最长时间,如果不设置,默认超时时间3秒 -->
		<dubbo:service interface="com.***.Testservice" id="testService" timeout="60000"/>

3)、zookeeper注册中心
        服务交给注册中心管理,

        a.provider:暴露服务的服务提供方。
        b.consumer:调用远程服务的服务消费方。
        c.registry:服务注册与发现注册中心。
        d.Monitor:统计服务的调用次调和调用时间的监控中心。
        e.container:服务运行容器。
        调用关系:
        a.服务容器负责启动,加载,运行服务提供者。
        b.服务提供者在启动时,向注册中心注册自己提供的服务。
        c.服务消费者在启动时,向注册中心订阅自己所需的服务。
        d.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
        e.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
        f.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

猜你喜欢

转载自blog.csdn.net/Qizonghui/article/details/81675956
今日推荐