JsonRpc的基本使用

1.导入maven依赖:

<!-- https://mvnrepository.com/artifact/com.github.briandilley.jsonrpc4j/jsonrpc4j -->
<dependency>
    <groupId>com.github.briandilley.jsonrpc4j</groupId>
    <artifactId>jsonrpc4j</artifactId>
    <version>1.5.3</version>
</dependency>

2.jsonRpc接口开发:
请求参数实体类:

/**
 * jsonRpc基本参数封装
 */
 @Data
public class ProductRpcReq {

    private List<String> idList;
    private BigDecimal minRewardRate;
    private BigDecimal maxRewardRate;
    private List<String> statusList;
    //jsonRPC不能接受复杂参数
    //private  Pageable pageable;
    private Integer pageNum;
    private Integer pageSize;
    private Sort.Direction sort;
    private String orderBy;
    }
@JsonRpcService("jsonRpc/products")   这里注意,不能以 /开头,后面修改源码解决这个问题
public interface IProductRpcService {

    /**
     * 根据请求参数,获取请求内容
     * @param req
     * @return
     */
     List<Product> findProduct(ProductRpcReq req);

    /**
     * 根据id获取产品
     * @param id
     * @return
     */
     Product findProductById(String id);
}

3.jsonRpc服务端代码:

@AutoJsonRpcServiceImpl
@Service("productRpcService")
public class ProductRpcService implements IProductRpcService {

    private static Logger logger = LoggerFactory.getLogger(ProductRpcService.class);
    @Autowired
    private ProductService productService;

    @Override
    public List<Product> findProduct(ProductRpcReq req) {
        logger.info("findProduct rpc请求参数:{}",req);
        Pageable pageable = new PageRequest(req.getPageNum(),req.getPageSize(),req.getSort(),req.getOrderBy());
        Page<Product> products = productService.queryPage(req.getIdList(), req.getMinRewardRate(), req.getMaxRewardRate(), req.getStatusList(), pageable);
        logger.info("findProduct rpc结果:{}",products);
        return products.getContent();
    }

    @Override
    public Product findProductById(String id) {
        logger.info("findProductById rpc请求参数:{}",id);
        Product product = productService.getOneProduct(id);
        logger.info("findProduct rpc结果:{}",product);
        return product;
    }
}
  1. jsonRpc客户端代码:
@Service("sellerProductRpcService") 
public class SellerProductRpcService {

    private static final Logger LOGGER = LoggerFactory.getLogger(SellerProductRpcService.class);
   @Autowired
    private IProductRpcService productRpcService;

    /**
     * 获取所有产品
     * @return
     */
    public List<Product> findAllProduct(){
       ProductRpcReq req = new ProductRpcReq();
        req.setPageNum(0);
        req.setPageSize(1000);
        req.setSort(Sort.Direction.DESC);
        req.setOrderBy("rewardRate");
        req.setStatusList(Arrays.asList(ProductStatus.IN_SELL.name()));
        LOGGER.info("seller findAllProduct 请求参数:{}",req);
        List<Product> products = productRpcService.findProduct(req);
        LOGGER.info("seller findAllProduct 查询结果:{}",products);
        return products;
    }

    /**
     * 根据id获取产品
     * @param id
     * @return
     */
    public Product getProductById(String id){
       LOGGER.info("seller getProductById 请求参数:{}",id);
        Product product = productRpcService.findProductById(id);
        LOGGER.info("seller getProductById 查询结果:{}",product);
        return product;
    }

//    @PostConstruct
//    public void test(){
//        getProductById("001");//测试
//    }
}

公共模块,公共配置类,JSONRpcConfiguration

@Configuration
public class JSONRpcConfiguration {

    /**
     * jsonRpc服务端配置
     * @return
     */
    @Bean
    public AutoJsonRpcServiceImplExporter serviceImplExporter(){
        return  new AutoJsonRpcServiceImplExporter();
    }


    /**
     * 配置jsonRpc客户端
     * @param url
     * @return
     */
    @Bean
    @ConditionalOnProperty(value = {"rpc.client.url","rpc.client.basePackage"})
    public AutoJsonRpcClientProxyCreator rpcClientProxyCreator(@Value("${rpc.client.url}") String url,@Value("${rpc.client.basePackage}") String basePackege){
        AutoJsonRpcClientProxyCreator jsonRpcClientProxyCreator = new AutoJsonRpcClientProxyCreator();
        try {
            jsonRpcClientProxyCreator.setBaseUrl(new URL(url));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        jsonRpcClientProxyCreator.setScanPackage(basePackege);
        return jsonRpcClientProxyCreator;
    }
}

基于springBoot的自动装配,在resources文件下META-INF/spring.factories中,写入如下内容:
在这里插入图片描述

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.chukun.utils.rpcConfig.JSONRpcConfiguration

客户端配置的yml文件:

rpc:
  client:
    url: http://localhost:8081/manager/  这里注意,必须以 /结尾,后面修改源码解决这个问题
    basePackage: com.chukun.api.rpc

运行效果
先运行服务端:
在这里插入图片描述
看到服务端导出服务成功。

运行客户端:
在这里插入图片描述
客户端已经创建了代理。

至此,jsonRpc基本环境搭建完毕。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值