V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  Java

Martin-Cloud 发布 3.0.25

  •  
  •   Joker123456789 · 2020-09-26 23:04:35 +08:00 · 1090 次点击
    这是一个创建于 1525 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为 Martian 框架的一个 分布式组件,由于其面向的场景是 需要分布式开发的大型项目,所以在 Martian 还未被大众接纳之前,显得非常的渺小,因为没有大型项目敢用这个东西。

    也因为上面的原因,所以一直更新缓慢,很少提及,但是 这一次我重新拾起这个组件,进行了一轮改造和重构,使其稳定性和 架构的合理性 提高了不少。

    但是依然存在不少缺陷,需要进一步完善。

    简单介绍

    1. Martian-Cloud 以 zookeeper 为注册中心。
    2. 服务间的通信采用 Rest 风格,通信协议为 http
    3. 暂时只支持 轮询和随机两种 负载均衡算法,后面在慢慢完善
    4. 请求的传参没啥特别的,就是正常的表单提交,JSON 提交,FORM_DATA 等方式
    5. 数据响应采用序列化方式进行数据传递

    这次的更新点如下

    1. 对代码进行了大量重构,在项目结构和代码设计上做了优化
    2. 把一开始的序列化传参 改成了常规的传参,这样就可以支持从网关转发过来的请求了
    3. 调用方可以自行设置 ContentType

    如何搭建一个 Martin-cloud 项目

    在 Martian 项目中添加如下 jar 包

    <dependency>
        <groupId>com.github.yuyenews</groupId>
        <artifactId>mars-cloud-starter</artifactId>
        <version>最新版,具体看《组件介绍》</version>
    </dependency>
    

    配置类换一个父类,实现 getCloudConfig 方法

    将 Martian 项目的的配置类换一个父类(继承 MarsCloudConfig )

    public class DemoConfig extends MarsCloudConfig {
    
        // 在开发 Martian 项目时,实现的那些方法保留即可,因为都需要用
    
    
    
        /**
         * 在上面的基础之上再实现这个方法,用于配置 cloud
         */
        @Override
        public CloudConfig getCloudConfig() {
            CloudConfig cloudConfig = new CloudConfig();
            // 服务名称,同一个服务的负载均衡集群的 name 必须一致,不同集群之间必须唯一
            cloudConfig.setName("");
            // 尽量长一点,防止接口过多来不及发布
            cloudConfig.setSessionTimeout(10000L);
            // 请求 Mars-Cloud 接口超时时间
            cloudConfig.setTimeOut(10000L);
            // 是否作为网关
            cloudConfig.setGateWay(false);
            // zookeeper 地址,多个地址用英文逗号分割
            cloudConfig.setRegister("");
            // 负载均衡策略(暂时只支持轮询,随机两种)
            cloudConfig.setStrategy(Strategy.POLLING);
    
            // 本服务所在服务器的的 IP,如果不配置会自动获取内网 IP,配置了就以配置的为主
            cloudConfig.setIp("");
            return cloudConfig;
        }
    }
    

    引入组件

    在启动类上面加上 @MarsImport 注解,并配置 packageName

    @MarsImport(packageName = "com.mars.cloud.components")
    public class Start {
    
        public static void main(String[] args) {
            StartMars.start(Start.class, new DemoConfig());
        }
    }
    

    完成以上三步,一个 Martian 项目就变成了 Martian-cloud 项目了

    Feign 调用

    建一个普通的 java 接口( interface )

    在类上面加上 MarsFeign 注解,具体看下面示例:

    /* 
    这个注解的 serverName 跟你要调用的那个服务的 name 一致(配置类里 cloud 配置的 name ) 
    beanName 不写的话,默认为类名首字母小写
    */
    @MarsFeign(serverName="mars-demo",beanName="demoFeign")
    public interface DemoFeign {
        /* 
            这里面的所有方法,跟你要调用的那个 API 中的方法名一致 
            方法的参数,跟你要调用的那个 API 一样
        */
        返回类型 insert(DemoEntity entity);
    
        /*
            可以用 @MarsContentType 注解 来指定本次请求的 ContentType
        */
        @MarsContentType(ContentType = ContentType.JSON)
        返回类型 selectList(DemoEntity entity);
    }
    

    在你的 MarsBean 里注入这个对象

    @MarsBean("testService")
    public class TestService {
    
        @MarsWrite("demoFeign")
        private DemoFeign demoFeign;
    }
    

    然后直接调用里面的方法即可

    注意事项

    @MarsContentType 注解 一共有三个选项:

    1. FORM, 普通的表单提交(可以跟 POST,GET 等任意请求方式一起使用)
    2. FORM_DATA, 流的方式提交,除了 GET 以外,其他的请求方式均可使用,一般用于传输文件
    3. JSON,以 JSON 字符串的形式提交,除了 GET 以外,其他的请求方式均可使用

    如果不配的话,默认是以表单的形式提交

    官方网站

    http://mars-framework.com/

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2635 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:07 · PVG 19:07 · LAX 03:07 · JFK 06:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.