远程接口类定义,在需要调用远程应用接口的地方通过Springboot注入Rmi接口
/**
* 版权所有(C) 陈祥个人 2022-2025
* Copyright 2022-2025 chenxiang.
* 创建日期 2023年2月16日
*/
package bee.cloud.ri;
import java.io.InputStream;
import java.util.List;
import bee.cloud.core.db.RequestParam;
import bee.cloud.core.db.RmiData;
import bee.cloud.engine.db.core.CBase;
import bee.cloud.engine.util.Result;
/**
* 功能说明:远程服务调用
* 使用方式:通过注入方式费用
* @Autowired
* private Rmi rmi;
* @author 陈祥 2023年2月16日
*/
public interface Rmi
{
/**
* 通过RequestParam实现远程调用
* @param param -需要传的参数,需要有uri值,uri需要包括serverNfame
* @return Result
* @author 陈祥 2023年2月16日
*/
Result call(RequestParam param);
/**
* 通过RequestParam实现远程调用
* @param param -需要传的参数,需要有uri值,uri需要包括serverNfame
* @return Result
* @author 陈祥 2023年2月16日
*/
Result get(RequestParam param);
/**
* 通过RequestParam实现远程调用
* @param param -需要传的参数,需要有uri值,uri需要包括serverNfame
* @return Result
* @author 陈祥 2023年2月16日
*/
Result post(RequestParam param);
/**
* 通过RequestParam实现远程调用
* @param param -需要传的参数,需要有uri值,uri需要包括serverNfame
* @return Result
* @author 陈祥 2023年2月16日
*/
Result put(RequestParam param);
/**
* 通过RequestParam实现远程调用
* @param param -需要传的参数,需要有uri值,uri需要包括serverNfame
* @return Result
* @author 陈祥 2023年2月16日
*/
Result delete(RequestParam param);
/**
* 通过RequestParam实现远程调用
* @param uri -取数据的uri,包括serverName
* @param param -需要传的参数
* @return Result
* @author 陈祥 2023年2月16日
*/
Result call(String uri, RequestParam param);
/**
* 通过RequestParam实现远程调用
* @param uri -取数据的uri,包括serverName
* @param param -需要传的参数
* @return Result
* @author 陈祥 2023年2月16日
*/
Result get(String uri, RequestParam param);
/**
* 通过RequestParam实现远程调用
* @param uri -取数据的uri,包括serverName
* @param param -需要传的参数
* @return Result
* @author 陈祥 2023年2月16日
*/
Result post(String uri, RequestParam param);
/**
* 通过RequestParam实现远程调用
* @param uri -取数据的uri,包括serverName
* @param param -需要传的参数
* @return Result
* @author 陈祥 2023年2月16日
*/
Result put(String uri, RequestParam param);
/**
* 通过RequestParam实现远程调用
* @param uri -取数据的uri,包括serverName
* @param param -需要传的参数
* @return Result
* @author 陈祥 2023年2月16日
*/
Result delete(String uri, RequestParam param);
/**
* 远程调用获取实体bean
* @param <T> -CBase
* @param clazz -对应javabean
* @param uri -取数据的uri,包括serverName
* @param param 需要传的参数
* @return CBase
* @author 陈祥 2023年2月17日
*/
<T extends CBase> T getTable(Class<T> clazz, String uri, RequestParam param);
/**
* 远程调用获取实体bean
* @param <T> -CBase
* @param clazz -对应javabean
* @param uri -取数据的uri,包括serverName
* @param param 需要传的参数
* @return List
* @author 陈祥 2023年2月17日
*/
<T extends CBase> List<T> getTables(Class<T> clazz, String uri, RequestParam param);
/**
* 上传文件
* @param serverName 服务名称
* @param file -远程文件
* @param rmiData -远程数据
* @return Result
*/
Result upload(String serverName, RmiFile file, RmiData rmiData);
public static class RmiFile
{
/** 文件名 */
private String name;
/** 文件流 */
private InputStream inputStream;
/** 封面文件流 */
private InputStream coverInputStream;
/**
* 获取文件名
* @return the name
*/
public String getName()
{
return name;
}
/**
* 设置文件名
* @param name the name to set
*/
public void setName(String name)
{
this.name = name;
}
/**
* 获取文件流
* @return the inputStream
*/
public InputStream getInputStream()
{
return inputStream;
}
/**
* 设置文件流
* @param inputStream the inputStream to set
*/
public void setInputStream(InputStream inputStream)
{
this.inputStream = inputStream;
}
/**
* 获取封面文件流
* @return the coverInputStream
*/
public InputStream getCoverInputStream()
{
return coverInputStream;
}
/**
* 设置封面文件流
* @param coverInputStream the coverInputStream to set
*/
public void setCoverInputStream(InputStream coverInputStream)
{
this.coverInputStream = coverInputStream;
}
}
}
应用实例,比如需要在当前应用中调用account应用中获取用户基本信息的接口(/user/info),具体参数内容参照accout中用户基本信息接口的要求。
以下为TestRmi.java远程调用实例
/**
* 版权所有(C) 陈祥个人 2022-2025
* Copyright 2022-2025 chenxiang.
* 创建日期 2024年3月24日
*/
package bee.service.feign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import bee.cloud.core.db.RequestParam;
import bee.cloud.engine.util.Result;
import bee.cloud.ri.Rmi;
import bee.tool.Tool;
import lombok.Data;
/**
* 功能说明:远程应用数据调用实例
* 注意:远程调用中适用于网关集群模式,单机模式不支持
* @author 陈祥(529822722@qq.com) 2024年3月24日
*
*/
@Service
public class TestRmi
{
@Autowired
private Rmi rmi;
public void test(String userId)
{
// 构造参数数据体
RequestParam param = RequestParam.from("user_id", userId);
// 通过Get方式发送远程请求并返回结果,目前支持请求方式为:Get、Post、Put、Delete
// account为应用名称,/user/info为account应用中的资源路径
Result result = rmi.get("/account/user/info", param);
System.out.print(result.toString());
// 也可以从数据结果中获取对应的bean对象
UserInfo userInfo = result.getBean(UserInfo.class);
Tool.Log.info(Tool.Json.objToJsonString(userInfo));
}
}
@Data
class UserInfo
{
private String userId;
private String userName;
private int sex;
}