基于jfinal徒手撸个微服务

最近基于jfinal徒手撸个微服务框架的代码,用于实践和学习,生产环境勿用.目前还在开发中,这里提供下代码和思路供大家参考https://github.com/springCat/dragonli

基本思路:

1 对jfinal没有侵入型,保持jfinal的原汁原味,减少学习成本

2 代码极简易懂,没有黑魔法和复杂的过度设计

3 注册中心依赖consul

4 通信方式为http+json

5 没有其他强依赖

6 从单体切换到微服务的代价尽量少

(1)produce端,利用jsr303做参数校验,用法和jfinal官方保持一致

@Data
public class BlogPara implements JsonBeanValidate<BlogPara> {

   private String code;

   @Range(min=1,message="4001")
   private int id;

   @Length(min = 1,max = 10,message="4002")
   private String title;

   @NotBlank(message="4003")
   private String content;

   @Override
   public Class<BlogPara> reqType() {
       return BlogPara.class;
   }
}
public class BlogController extends JsonController {
   @Before(BlogPara.class)
   public void json() {
       BlogPara jsonBean = getJsonBean(BlogPara.class);
       jsonBean.setCode("200");
       renderJson(jsonBean);
   }
}

(2)consumer消费者端,扫描rpc注解的类,基于动态代理生成接口的实现类,把对本地方法的调用转化为远程的http调用,利用jfinal的inject注入

  //调用方式
@Inject
private BlogService blogService;

  public void test(){
      BlogPara blogPara = new BlogPara();
      blogPara.setId(1);
      blogPara.setContent("content");
      blogPara.setTitle("title");
      BlogPara resp = blogService.json(blogPara);
      renderJson(resp);
  }
@Rpc("jfinalDemo")
public interface BlogService {
    BlogPara json(BlogPara blogPara);
}

(3)负载均衡策略为基于用户身份id的一致性hash

(4)熔断和限流准备基于resilience4j,目前未实现.

(5)健康检查和配置中心都基于consul

(6)api gateway待实现( 利用nginx第三方插件,从consul拉取注册的服务或者自己实现)

(7)至于其他的后续可以慢慢堆上去,也比较简单

基本各个部件可以自定义和魔改

评论区

JFinal

2020-04-15 17:25

代码看着很简洁,回头看看代码,先点个赞

山东小木

2020-04-15 17:30

666啊 邀请加入我的团队

奋斗的青年

2020-04-15 17:39

大佬厉害

大火yzs

2020-04-15 17:53

Jfianl越来越棒了 :)

明州刀客

2020-04-15 18:17

@大火yzs 能不能把jfinal拼对

laolang

2020-04-16 08:40

加入Jfinal的大佬越老越多了!

思春的野猫

2020-04-16 09:11

@JFinal 感谢波总留言支持

快乐的蹦豆子

2020-04-16 17:22

先关注再说

Jieven

2020-04-19 15:57

收藏, 养肥再看, 希望能坚持更新1年以上

dafeizi

2020-09-07 13:40

@Jieven 猪肥了。。。

热门分享

扫码入社