跨应用数据交互

远程接口类定义,在需要调用远程应用接口的地方通过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;
}