Martin-Cloud 发布 3.0.25

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

25 岁脱发严重

lovecy:都说程序员秃头,但实际上我周围的同事头发一个比一个茂盛。 但是! 我从小就头发比较薄,上班了过后,情况越来越严重,额头上已经掉了一圈了,为了掩盖一下,我留长头发盖住,但是已经肉眼可见的稀薄了。。。 再往后不会发展成秃头吧。。好怕程序员==秃头这个标签到我身上落实了 v 友大佬们有什么妙招吗,救救孩子 今天起床又捋下七八根[啊这][啊这][啊这]…

谷歌云(Google Cloud)免费政策改变了?只有三个月了吗?

jememouse:https://cloud.google.com/free/docs/gcp-free-tier?hl=zh-cn 有没有朋友最近新建过,是否只有三个月了?Tink:是的 gqbre:握草。。 白嫖的日子一去不复返 trepwq:是…

自建邮件服务器的话,一定要使用 25 端口吗

monkeyWie:我目前的需求是这样的: 我想自建一个邮件服务器,然后配置一个用于接收邮件的邮箱,例如: [email protected] ,在预研的时候了解到 SMTP 是这样的,不知道理解的对不对,发送人 [email protected] -> 收件人 [email protected]: 配置 DNS MX 记…

请教如何避开云服务商对 SMTP 25 端口的屏蔽

nonduality:首先声明,自架邮件服务器不是为了发垃圾邮件。 在用 Postfix 架设邮件发送服务器当中,经过测试,我发现 SMTP 25 端口被云服务商(不是境内的)屏蔽了。我尝试过改为 587 端口及启用 TLS,但测试发现 Postfix 仍然用 25 号端口去连接远程邮件服务器。 后来,我想到用 Socks 代理服务器做代理,但怎么配置 Ip…

Spring Cloud 微服务架构,体量中等,最近老出现 http 连接拒绝,如何排查问题?

Variazioni:目前大概十几个微服务部署在一台 Linux ( suse 、centos 都有)机器上 其他的还有 nginx 、mysql 、rabbitmq 、elasticsearch 、influxdb 等服务 to b 的业务,从 web 访问的并发量并不大,但是服务间 http 调用比较多,每分钟都有定时任务运行,还有每分钟采集设备数据到 …