• dubbo集群应用


    前面写了一篇dubbo的基础应用篇,单机版 http://www.cnblogs.com/yun965861480/p/6257670.html,

    这次将集群的相关配置记录下来。

    1.zookeeper,dubbo-admin,dubbo应用我就不写了,还是沿用基础应用篇的demo

    http://www.cnblogs.com/yun965861480/p/6257670.html

    2.对于集群的配置使用,只需要在服务端暴露接口的时候添加2个参数就可以了

    cluster="failover"  loadbalance="random"

    配置如下

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
        xsi:schemaLocation="http://www.springframework.org/schema/beans        
     http://www.springframework.org/schema/beans/spring-beans.xsd        
     http://code.alibabatech.com/schema/dubbo         
     http://code.alibabatech.com/schema/dubbo/dubbo.xsd        ">
     
    <!--      提供方应用名称信息,这个相当于起一个名字,我们dubbo管理页面比较清晰是哪个应用暴露出来的 -->
        <dubbo:application name="dubbo_provider" />
    <!--     使用zookeeper注册中心暴露服务地址 -->
        <dubbo:registry address="zookeeper://192.168.158.129:2181" check="false" subscribe="false" register=""></dubbo:registry>
    <!--     要暴露的服务接口  -->
        <dubbo:service interface="com.yum.service.DubboServer" ref="dubboService" accesslog="/apps/logs/dubbo.log"
        cluster="failover"  loadbalance="random"  version="1.0"/>
        
        <dubbo:service interface="com.yum.service.DubboProvider"  ref="dubboProvider"  accesslog="/apps/logs/dubbo.log"
        cluster="failover"  loadbalance="random"  version="1.0"/>
    <!--     expose this service through dubbo protocol, through port 20880 -->
        <dubbo:protocol name="dubbo" port="20880" />
    <!--     which service interface do we expose? -->
    <!--     bean配置 -->
        <bean id="dubboService" class="com.qihh.dubbo.service.impl.DubboServerImpl" />
        <bean id="dubboProvider" class="com.qihh.dubbo.service.impl.DubboProviderImpl" />
        
    </beans> 

    2.将服务端打包放到服务器上,我是在虚拟机上操作的,同一台上放置了2台tomcat,部署2台应用。

    在当然在启动之前需要更改tomcat的端口(在tomcat的配置目录 conf/server.xml中),dubbo对外提供的端口 

    <dubbo:protocol name="dubbo" port="20880" /> 也要不一样。我这里设置了 20880,20881

    3.启动服务端,我们查看下注册中心,发现提供者有2个了。同一个IP下的不同端口。

     4.启动测试,启动客户端调用,

     
    package com.dubbo.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.yum.entity.Person;
    import com.yum.service.DubboProvider;
    import com.yum.service.DubboServer;
    
    /**
     *Administrator
     *2016年8月10日
     *TODO
     */
    public class DubboClientTest {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                    new String[] { "dubbo_client.xml" });
            context.start();
            DubboServer dubboServer = (DubboServer) context.getBean("dubboService");
            DubboProvider dubboProvider = (DubboProvider) context.getBean("dubboProvider");
            Person person = new Person();
            person.setAge(22);
            person.setName("qihh");
            List list = new ArrayList();
            list.add("abc");
            list.add("123");
            list.add("zzzz");
            person.setList(list);
            System.out.println(dubboServer.hello("hello world"));
            System.out.println(dubboProvider.PersonInfo(person));
            
        }
        
    }

     查看dubbo的日志,这里日志地址在服务接口定义时已经指定了,这里是 /apps/logs/dubbo.log,第二台是 /apps/logs/dubbo2.log

    打开2个日志,发送请求,发现服务被路由到了2台应用上了。表示,dubbo应用集群成功。

    4.关于参数

    cluster="failover"  loadbalance="random"

    可参考

    http://dubbo.io/Registry+Config-zh.htm

    http://liureying.blog.163.com/blog/static/61513520141145473756/

    dubbo如何集群,同一个服务部署多台机或者同一台机不同端口在注册中心注册。客户端就通过访问规则访问集群内的不同节点的服务。

    集群策略
    Failover Cluster :失败自动切换,当出现失败,重试其它服务器,通常用于读操作(推荐使用)
    Failfast Cluster :快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作
    Failsafe Cluster : 失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作
    Failback Cluster : 失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作
    Forking Cluster : 并行调用多个服务器,只要一个成功即返回,通常用于实时性要求较高的读操作
    Broadcast Cluster : 广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于更新提供方本地状态

    集群访问策略
    Random LoadBalance : 随机,按权重设置随机概率(推荐使用)
    RoundRobin LoadBalance : 轮循,按公约后的权重设置轮循比率
    LeastActive LoadBalance : 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差,使慢的机器收到更少请求。
    ConsistentHash LoadBalance : 一致性Hash,相同参数的请求总是发到同一提供者,当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动

    声明需要暴露的服务接口
    <!-- 声明需要暴露的服务接口 -->
    <!--loadbalance="random" 随机,按权重设置随机概率。-->
    <!--loadbalance="roundrobin" 轮循,按公约后权重设置轮循比率。-->
    <!--loadbalance="LeastActive" 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。-->
    <!--loadbalance="ConsistentHash" 一致性Hash,相同参数的请求总是发到同一提供者。-->
    <dubbo:service interface="com.hwz.demo.DemoService" ref="demoService" cluster="failsafe" loadbalance="random />

  • 相关阅读:
    使用自定义RadioButton和ViewPager实现TabHost效果和带滑动的页卡效果
    Android 实现文件上传功能(upload)
    Hibernate配置文件
    ICMP报文分析
    AVC1与H264的差别
    内存泄漏以及常见的解决方法
    数据挖掘十大经典算法
    关于java的JIT知识
    Ubuntu安装二:在VM中安装Ubuntu
    hdu 1520Anniversary party(简单树形dp)
  • 原文地址:https://www.cnblogs.com/yun965861480/p/6541730.html
Copyright © 2020-2023  润新知