Ling3-dubbo

来自ling
跳转至: 导航搜索

优化点

  • 减少配置,支持多组配置
  • dubbox
  • 注重单元测试
  • 提高缓存模块在框架中的地位
  • chome封装
  • AngularJS和单元测试
  • bootstrape
  • 尽量解决baseentity中version的使用问题
  • 久代码模块重构规则:原来模块保留api和dubbo reference定义. impl独立为新的模块

配置管理

多组配置支持

数据库多profile支持

  • 复制任何一份config-xxx.properties并修改
  • 复制xxxDatasourcesConfig并修改引用的properties,同时修改profile名称
  • ProfilesDef 中定义当前profile
  • 修改ProfilesDef.CURRENT的值并在parent项目运行单元测试,保证所有单元测试通过
  • 在web.xml中配置profile并使用

数据库多profile支持

安装初始化配置

系统属性设置和使用

编码规范

模块划分

  1. xxx-api 接口规范
  2. xxx-impl服务实现者,组件方式时调用,依赖xxx-impl
  3. xxx-provider 服务提供者,服务方式时使用,依赖xxx-impl获取到spring bean和api
  4. xxx-customer 服务使用者,服务方式时使用,依赖xxx-api 供需要使用xxx的模块调用
  5. 需要使用xxx模块时,在api模块中添加相应依赖,组件方式时调用,依赖xxx-impl.服务方式时使用xxx-customer

编码规范

  • 所有xxx.provider继承ling.pl.dubbo.provider,xxx.impl
  • provider的xml文件放在包beans.dubbo.provider中命名为dubbo-xxx-provider.xml
  • 所有xxx.customer继承ling.pl.dubbo.customer,xxx.api
  • provider的xml文件放在包beans.dubbo.customer中命名为dubbo-xxx-customer.xml
    1. 模块独立启动测试
    2. 单元测试
  1. xxx-customer 服务消费者,内容为reference,依赖xxx-api
  2. 相同模块provider,customer不共存
  3. 服务使用者,通过maven引用xxx-customer来达到使用相应模块的能力,而不是直接使用xx-api或xxx-impl

缓存机制的使用

  • CacheUtil缓存和Spring注解缓存不共享数据
  • 缓存现有三种实现,可以在profile中指定你使用的profile方式.和数据库一样,你只能使用一种.
   public static final String CACHE_HASHMAP = "hashMapCache";
   public static final String CACHE_EHCACHE = "ehcacheCache";
   public static final String CACHE_REDIS = "redisCache";
  • redisCache支持集群,hashMapCache和ehcacheCache不支持集群未来可以扩展ehcacheCache对集群的支持
  • 必须扩展从preference扩展.

CacheUtil缓存

  • 系统只提供默认的缓存实现
  • 因为业务场景不同而需要不同的缓存机制,可以新增utils,并继承cacheutils,然后修改utils中的ApplicationCache beanid来扩展需要的缓存机制实现
  • CacheUtils在api中,通过调用bean id为ApplicationCache.BEAN_ID来完成具体的实现.
  1. dubbo时来源于customer中对应的provider中对应的profile决定的缓存机制
  2. java组件时,决定于impl中设置的profile
  • provider中可以在xml中配置beanid方式提供多种ApplicationCache的实现,

Spring注解缓存

其他

  • 因为很多utils问题,hibernate依赖还是放在parent上,不在支持多个hibernate版本

Dubbo REST中如何实现负载均衡和容错(failover)

如果dubbo REST的消费端也是dubbo的,则Dubbo REST和其他dubbo远程调用协议基本完全一样,由dubbo框架透明的在消费端做load balance、failover等等。

如果dubbo REST的消费端是非dubbo的,甚至是非java的,则最好配置服务提供端的软负载均衡机制,目前可考虑用LVS、HAProxy、 Nginx等等对HTTP请求做负载均衡。