/ocean-swak

业务多实现框架-参考swak ppt实现

Primary LanguageJava

参考闲鱼swak -ppt实现

  • 为multiple-core提供平台和业务分离能力

  • 不仅为多渠道实现,也可以为处理if—else沉淀平台能力

列子

  • 引入pom
        <dependency>
            <groupId>com.ocean.swak</groupId>
            <artifactId>ocean-swak</artifactId>
        </dependency>
  • 分析业务上不变的和可变的

  • 把可变的业务提取 成接口

@SwakInterface(desc = "发财的各种方式")
public interface PayBiz {

    String getPayUrl(String channel, SwakContext context);
}
  • 写不同的实现类
// tags 标识 manwei 漫威
@SwakBiz(tags = "manwei")
public class ManWeiPayBiz implements PayBiz {

    @Override
    public String getPayUrl(String channel, SwakContext context) {

        return "manwei---- getpayUrl";
    }
}

// tag 标识 dc 
@SwakBiz(tags = "dc")
public class DcPayBiz implements PayBiz {

    @Autowired
    private BigBigService bigBigService;

    @Autowired
    private SwakService swakService;

    @Override
    public String getPayUrl(String channel, SwakContext context) {


        bigBigService.bigTest();

        swakService.test();

        return "dc --- get pay Url";
    }
}

@Primary
@SwakBiz
public class DefaultPayBiz implements PayBiz {

    @Override
    public String getPayUrl(String channel, SwakContext context) {
        return "default --- biz";
    }
}
  • 然后 注入接口 调用
@Service
public class HejService {

    // 注入 接口
    @Autowired
    private PayBiz payBiz;

    @Autowired
    private SwakService swakService;

    public void getBigPlan(String param) {

        SwakContext context = new SwakContext();
        context.setTags(Lists.newArrayList("dc"));
        
        // 调用接口 【采用 SwakContext 方式 】
        String result = payBiz.getPayUrl("dc", context);
        System.out.println("===");
        System.out.println(result);


        swakService.test();


    }
}

标签冲突解决

  • tag1 tag2 tag3

  • 有一个接口开始有 tag1 ,tag2 tag3的两个实现 ,但是有一个业务需要在tag1,tag2中都有

执行方式一共有

  • 命中一个tag就执行,返回结果
  • 命中 输入[tag1, tag2] ,tag1-->有,否 tag2 【优先级配置由调用方配置】
  • 思考: 如何配置接口的调用方式【结合配置平台】

支持rpc调用

场景

  • A 业务是主干业务抽离的,然后需要 远程服务的方式给主干应用提供服务
  • 接口即是主干业务的提供的扩展
  • 主干应用开发人员来说,应该提供单个接口以支持所有业务类型
  • 怎么定义Do
 public class ItemDo{
    
    private String type;
    private Integer status;
    private Map<String, Object> bizMap;
    
 }

能力扩展 思考

  1. 比如我要找一个超能力者 dc中没有 ,我要去maiwen中找怎么做?

规则应该是: dc ---> maiwen [dc --> next]

  1. 如果执行两个 要合并结果呢?[并行执行呢]
  • 所以应该是 要有一套 执行规则
    1. 用注解
    2. 兼容用json配置 执行规则

提供 endpoint 查看注册的所有规则