Joker123456789
V2EX  ›  Java

Martin-Cloud 发布 3.0.25

  •  
  •   Joker123456789 · Sep 26, 2020 · 1515 views
    This topic created in 2091 days ago, the information mentioned may be changed or developed.

    作为 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/

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1069 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 18:03 · PVG 02:03 · LAX 11:03 · JFK 14:03
    ♥ Do have faith in what you're doing.