• 分布式服务治理框架dubbo


    Dubbo最主要功能有两个

     1 RPC调用  

     2 SOA服务治理方案

    Dubbo的架构

    Dubbo常见的注册中心有2中,zookeeper以及redis

    这篇文章讲解的是采用的zookeeper,要求读者对zookeeper有一定的认识。

    http://www.cnblogs.com/javabigdata/p/7491116.html zookeeper相关知识看这里

    服务的提供者Provider将服务注册到Registry

    消费者Consumer需要从Registry中发现、监听到服务的变动

    Provider需要运行在Container容器中

    Monitor(监控中心) 主要是用来对服务的调用次数统计等。

    以下主要是一个快速入门,怎么使用dubbo

    我们需要创建多个项目

    Provider (服务提供者) 包括实现类 一个项目,接口定义为一个项目

    Consumer (服务消费者) 一个项目

    这里我定义一个公用的pom项目来对maven依赖做一个统一的管理

    整体项目采用maven构建,使用dubbox (2.8.4) ,并提供源码下载

     ======================================================================

    test-parent (pom项目)主要定义jar版本信息

    ======================================================================

    服务提供者接口定义(所谓的发布服务,就是将接口对外暴露,生产者和消费者都是需要引用接口的,所以在这里接口将在test-facade中提供)

     

    这个项目主要是定义接口

    主要代码如下

    @Path("/userTestService")
    @Consumes({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    @Produces({ ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8 })
    public interface IUserTestService {
    	@GET
    	User getUserTest();
    
    	@GET
    	@Path("/testGet")
    	public void testget();
    }
    

      

    注解代码说明:

      @Path:代表服务的访问路径,如“user”,则访问路径为domain:port/context/user,在方法上注解是相对类上面的。依次展开路径即可。

      @POST:服务请求的方式,支持POST、GET等。

      @Consumes:表示将接收到的数据自动转换为什么格式的,支持json和xml。

      @Produces:表示将结果返回时候输出为什么格式的,支持json和xml。

    ======================================================================

    服务接口实现(一般来说,服务提供者我们使用注解开发)

     

    部分代码如下

    @Service
    @com.alibaba.dubbo.config.annotation.Service(interfaceClass = com.cc.facade.IUserTestService.class, protocol = { "rest",
    		"dubbo" })
    public class UserServImpl implements IUserTestService {
    	@Override
    	public User getUserTest() {
    		User user = new User();
    		user.setId(1);
    		user.setName("cc");
    		return user;
    	}
    
    	@Override
    	public void testGet() {
    		System.out.println("test=get");
    	}
    }
    

      

    解释:

    @com.alibaba.dubbo.config.annotation.Service 表示将该服务注册到dubbo

    dubbo-provider.xml 文件内容如下 ,
    <!-- 引入配置文件 -->
    	<context:property-placeholder location="classpath:config.properties" />
    
    	<dubbo:application name="${dubbox.application}"
    		owner="programmer" organization="dubbox" />
    
    	<!-- zookeeper注册中心 -->
    	<dubbo:registry address="${dubbox.registry.address}"
    		timeout="100000" />
        <!- dubbo  service自动扫描 -->
    	<dubbo:annotation package="com" />
    
    	<!-- kryo实现序列化 -->
    	<dubbo:protocol name="dubbo" host="192.168.1.7" port="20883"
    		serialization="kryo" optimizer="com.cc.serial.SerializationOptimizerImpl" />
    
    	<!-- 发布rest服务 -->
    	<dubbo:protocol name="rest" host="192.168.1.7" server="${dubbox.rest.server}"
    		port="${dubbox.rest.port}" contextpath="${dubbox.rest.contextpath}"
    		threads="${dubbox.rest.threads}" accepts="${dubbox.rest.accepts}" />
    </beans>
    

    ======================================================================

    服务消费者(一般使用xml配置

    dubbo-provider.xml配置文件如下

    <!-- 引入配置文件 -->
    	<context:property-placeholder location="classpath:config.properties" />
    
    	<!-- 消费服务名称 -->
    	<dubbo:application name="${dubbox.application}"
    		owner="programmer" organization="dubbox" />
    
    	<!-- zookeeper注册中心 zookeeper://192.168.1.111:2181 -->
    	<dubbo:registry address="${dubbox.registry.address}"
    		timeout="30000" />
    
    	<!-- 扫描dubbox注解位置 -->
    	<dubbo:annotation package="com.cc" />
    
    	<!-- kryo实现序列化 -->
    	<dubbo:protocol name="dubbo" serialization="kryo"
    		optimizer="com.cc.serial.SerializationOptimizerImpl" />
    
    	<!-- 生成远程服务接口配置 -->
    	<dubbo:reference interface="com.cc.facade.IUserTestService"
    		id="testFacade" />
    
    
    </beans>
    

      

    最后,我们先运行

    test-service/src/test/java/ProviderTest.java   main方法,注册服务到zookeeper

    接着运行

    test-consumer/src/test/java/ConsumerTest.java main方法

    可以看到控制台打印

    源码下载:https://pan.baidu.com/s/1KdUDjJZdmftsdXW4iQoGZA

    注意:

    1导入源码的时候注意修改zookeeper地址

    2 dubbox并没有发布到maven中央仓库的包,目前代码在github上,需要自己down下来编译,基于maven开发的。

       项目GitHub地址:https://github.com/dangdangdotcom/dubbox

    好了,快速入门到这里就结束了,更多细节请看 dubbo官方用户手册。

    http://dubbo.io/books/dubbo-user-book/ 

  • 相关阅读:
    MySQL 8.0+ 时区问题
    SSM框架整合搭建流程
    最大子段和、最大子矩阵和
    棋盘覆盖(分治)
    石子合并问题
    矩阵连乘
    selenium完成滑块验证
    背包问题(2)
    背包问题(1)
    皇后问题
  • 原文地址:https://www.cnblogs.com/javabigdata/p/7565241.html
Copyright © 2020-2023  润新知