作为 Martian 框架的一个 分布式组件,由于其面向的场景是 需要分布式开发的大型项目,所以在 Martian 还未被大众接纳之前,显得非常的渺小,因为没有大型项目敢用这个东西。
也因为上面的原因,所以一直更新缓慢,很少提及,但是 这一次我重新拾起这个组件,进行了一轮改造和重构,使其稳定性和 架构的合理性 提高了不少。
但是依然存在不少缺陷,需要进一步完善。
<dependency>
<groupId>com.github.yuyenews</groupId>
<artifactId>mars-cloud-starter</artifactId>
<version>最新版,具体看《组件介绍》</version>
</dependency>
将 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 项目了
在类上面加上 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("testService")
public class TestService {
@MarsWrite("demoFeign")
private DemoFeign demoFeign;
}
然后直接调用里面的方法即可
@MarsContentType 注解 一共有三个选项:
如果不配的话,默认是以表单的形式提交