zoukankan      html  css  js  c++  java
  • Dubbox

    Dubbox

    Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,
    后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护,为了与原有的Dubbo区分,故将其命名为Dubbox。

    工作原理:

    节点角色说明

    Provider: 暴露服务的提供方
    Consumer: 调用远程服务的服务消费方
    Registry: 服务注册与发现的注册中心
    Monitor: 统计服务调用次数和调用时间的监控中心

    Container: 服务运行容器

    调用关系说明

    服务容器负责启动、加载,运行服务提供者
    服务提供者在启动时,向注册中心注册自己提供的服务
    服务消费者在启动时,向注册中心订阅自己所需的服务
    注册中心返回返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台
    服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    依赖

    <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>dubbo</artifactId>
          <version>2.8.4</version>
        </dependency>
        <!-- 添加zk客户端依赖 -->
        <dependency>
          <groupId>com.github.sgroschupf</groupId>
          <artifactId>zkclient</artifactId>
          <version>0.1</version>
        </dependency>
        <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-jaxrs</artifactId>
          <version>3.0.7.Final</version>
        </dependency>
        <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-client</artifactId>
          <version>3.0.7.Final</version>
        </dependency>
        <dependency>
          <groupId>javax.validation</groupId>
          <artifactId>validation-api</artifactId>
          <version>1.0.0.GA</version>
        </dependency>
    
        <!-- 如果要使用json序列化 -->
        <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-jackson-provider</artifactId>
          <version>3.0.7.Final</version>
        </dependency>
    
        <!-- 如果要使用xml序列化 -->
        <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-jaxb-provider</artifactId>
          <version>3.0.7.Final</version>
        </dependency>
    
        <!-- 如果要使用netty server -->
        <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-netty</artifactId>
          <version>3.0.7.Final</version>
        </dependency>
    
        <!-- 如果要使用Sun HTTP server -->
        <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-jdk-http</artifactId>
          <version>3.0.7.Final</version>
        </dependency>
    
        <!-- 如果要使用tomcat server -->
        <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-core</artifactId>
          <version>8.0.11</version>
        </dependency>
        <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-logging-juli</artifactId>
          <version>8.0.11</version>
        </dependency>
        <dependency>
          <groupId>com.esotericsoftware.kryo</groupId>
          <artifactId>kryo</artifactId>
          <version>2.24.0</version>
        </dependency>
        <dependency>
          <groupId>de.javakaffee</groupId>
          <artifactId>kryo-serializers</artifactId>
          <version>0.26</version>
        </dependency>
        <dependency>
          <groupId>de.ruedigermoeller</groupId>
          <artifactId>fst</artifactId>
          <version>1.55</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.3.3</version>
        </dependency>
        <dependency>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>jetty</artifactId>
          <version>7.0.0.pre5</version>
        </dependency>
        <dependency>
          <groupId>com.dubbo</groupId>
          <artifactId>dubbox_service</artifactId>
          <version>1.0-SNAPSHOT</version>
          <scope>compile</scope>
        </dependency>
      </dependencies>

    dubbox_provider

    DoSomeService

    @Path("/dosomeService")
    public interface DoSomeService 
        @Path("/doSome/{userName}")
        @GET
        @Consumes({ MediaType.APPLICATION_JSON })
        public String doSome(@PathParam("userName") String userName);
    

    DoSomeServiceImpl

    public class DoSomeServiceImpl implements DoSomeService {
        @Override
        public String doSome(String userName) {
            System.out.println("dubbox 发布的DoSomeService 服务   doSome方法	"+userName);
            return "bubbox";
        }
    }

    applicationContext-provider.xml

    <!--声明服务提供方-->
        <dubbo:application name="dubbox-provider"/>
        <!--注册中心地址-->
        <dubbo:registry address="zookeeper://0.0.0.1:2181"/>
        <!--dubbo服务端口-->
        <dubbo:protocol name="rest" port="8080"/>
        <!--服务注册-->
        <dubbo:service interface="com.dubbo.service.DoSomeService" ref="doSomeService"/>
        <bean id="doSomeService" class="com.dubbo.service.impl.DoSomeServiceImpl"/>

    AppTest

    public class AppTest 
    {
        public static void main(String[] args) throws IOException {
            //加载配置文件:配置文件中通过SPring将Dubbo服务注册到注册中心当中去
            ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext-provider.xml");
            System.out.println("dubbox服务已经发布!!!!!");
            //阻塞
            System.in.read();
        }
    }

    dubbox_consumer

    DoSomeService

    @Path("/dosomeService")
    public interface DoSomeService {
        @Path("/doSome/{userName}")
        @GET
        @Consumes({ MediaType.APPLICATION_JSON })
        public String doSome(@PathParam("userName") String userName);
    }

    applicationContext-provider.xml

    <!--声明服务提供方-->
        <dubbo:application name="dubbox-consumer"/>
        <!--注册中心地址-->
        <dubbo:registry address="zookeeper://0.0.0.1:2180"/>
        <!--服务消费-->
        <dubbo:reference interface="com.dubbo.service.DoSomeService" id="doSomeService"/>

    AppTest

    public class AppTest 
    {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-consumer.xml");
            DoSomeService doSomeService = (DoSomeService)ctx.getBean("doSomeService");
            doSomeService.doSome("李四");
        }
    }
  • 相关阅读:
    Nginx下配置SSL安全协议
    Java嵌套类
    python命名空间与作用域
    Effective Java 4:类和接口
    VIM快捷键(转载)
    Eclipse快捷键
    Effective Java 3:对于所有对象都通用的方法
    Effective Java 1:创建和销毁对象-续
    Effective Java 1:创建和销毁对象
    python文件操作(转载)
  • 原文地址:https://www.cnblogs.com/dabrk/p/12012545.html
Copyright © 2011-2022 走看看