1、JsonRpc概念

JSON-RPC是一种基于JSON的跨语言远程调用协议。有文本传输数据小,便于调试扩展的特点。

2、实现例子

a)项目1-api 编写rpc接口

ProductRpc.java

package com.imooc.api;

import java.util.List;

import com.googlecode.jsonrpc4j.JsonRpcService;

import com.imooc.api.domain.ProductRpcReq;

import com.imooc.entity.Product;

/**

* 产品相关的rpc服务

* @author zemel

*

*/

@JsonRpcService("rpc/products")

public interface ProductRpc {

/**

* 查询多个产品

* @param req

* @return

*/

List query(ProductRpcReq req);

/**

* 查询单个产品

* @param id

* @return

*/

Product findOne(String id);

}

package com.imooc.api.domain;

import java.math.BigDecimal;

import java.util.List;

/**

* 产品相关rpc请求对象

* @author zemel

*

*/

public class ProductRpcReq {

private List idList;

private BigDecimal minRewardRate;

private BigDecimal maxRewardRate;

private List statusList;

public List getIdList() {

return idList;

}

public void setIdList(List idList) {

this.idList = idList;

}

public BigDecimal getMinRewardRate() {

return minRewardRate;

}

public void setMinRewardRate(BigDecimal minRewardRate) {

this.minRewardRate = minRewardRate;

}

public BigDecimal getMaxRewardRate() {

return maxRewardRate;

}

public void setMaxRewardRate(BigDecimal maxRewardRate) {

this.maxRewardRate = maxRewardRate;

}

public List getStatusList() {

return statusList;

}

public void setStatusList(List statusList) {

this.statusList = statusList;

}

@Override

public String toString() {

return "ProductRpcReq [idList=" + idList + ", minRewardRate=" + minRewardRate + ", maxRewardRate="

+ maxRewardRate + ", statusList=" + statusList + "]";

}

}

b)项目2-manager(rpc实现工程)

ProductRpcImpl.java

package com.imooc.rpc;

import java.util.List;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.domain.Page;

import org.springframework.data.domain.PageRequest;

import org.springframework.data.domain.Pageable;

import org.springframework.data.domain.Sort;

import org.springframework.stereotype.Service;

import com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImpl;

import com.imooc.api.ProductRpc;

import com.imooc.api.domain.ProductRpcReq;

import com.imooc.entity.Product;

import com.imooc.service.ProductService;

/**

* rpc服务实现类

* @author zemel

*

*/

@AutoJsonRpcServiceImpl

@Service

public class ProductRpcImpl implements ProductRpc{

private static Logger log = LoggerFactory.getLogger(ProductRpcImpl.class);

@Autowired

private ProductService productService;

@Override

public List query(ProductRpcReq req) {

log.info("查询多个产品,请求:{}", req);

Pageable pageable = new PageRequest(0, 1, Sort.Direction.DESC, "rewardRate");

Page page = productService.query(req.getIdList(), req.getMinRewardRate(),

req.getMaxRewardRate(), req.getStatusList(), pageable);

log.info("查询多个产品,结果:{}", page);

return page.getContent();

}

@Override

public Product findOne(String id) {

log.info("查询产品详情,请求:{}", id);

Product result = productService.findOne(id);

log.info("查询产品详情,结果:{}", result);

return result;

}

}

RpcConfig.java

package com.imooc.config;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImplExporter;

/**

* rpc相关配置

* @author zemel

*

*/

@Configuration

public class RpcConfig {

@Bean

public AutoJsonRpcServiceImplExporter rpcServiceImplExporter(){

return new AutoJsonRpcServiceImplExporter();

}

}

#服务器

server.port=80

server.servlet.contextPath=/manager

# DataSource

spring.datasource.url=jdbc:mysql://localhost/manager?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC

spring.datasource.username=root

spring.datasource.password=

#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#jackson自定义日期格式

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

spring.jackson.time-zone=GMT+8

# JPA

spring.jpa.show-sql=true

spring.jpa.hibernate.ddl-auto=update

# 配置swagger

swagger.groupName=manager

swagger.basePackage=com.imooc.controller

c)rpc客户端-saller

ProductRpcService.java

package com.imooc.seller.service;

import java.util.ArrayList;

import java.util.List;

import javax.annotation.PostConstruct;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.domain.Page;

import org.springframework.data.domain.PageRequest;

import org.springframework.data.domain.Pageable;

import org.springframework.data.domain.Sort;

import org.springframework.stereotype.Service;

import com.imooc.api.ProductRpc;

import com.imooc.api.domain.ProductRpcReq;

import com.imooc.entity.Product;

import com.imooc.entity.enums.ProductStatus;

/**

* 产品服务

* @author zemel

*

*/

@Service

public class ProductRpcService {

private static Logger log = LoggerFactory.getLogger(ProductRpcService.class);

@Autowired

private ProductRpc productRpc;

/**

* 查询全部产品

* @return

*/

public List findAll(){

ProductRpcReq req = new ProductRpcReq();

List status = new ArrayList<>();

//status.add(ProductStatus.IN_SELL.getCode());

//req.setStatusList(status);

log.info("rpc查询全部产品,请求:{}", req);

List result = productRpc.query(req);

log.info("rpc查询全部产品,结果:{}", result);

return result;

}

@PostConstruct

public void testFindAll(){

findAll();

}

}

RpcConfig.java

package com.imooc.seller.config;

import java.net.MalformedURLException;

import java.net.URL;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import com.googlecode.jsonrpc4j.spring.AutoJsonRpcClientProxyCreator;

import com.imooc.api.ProductRpc;

/**

* rpc 相关配置

* @author zemel

*

*/

@Configuration

@ComponentScan(basePackageClasses={ProductRpc.class})

public class RpcConfig {

private static Logger log = LoggerFactory.getLogger(RpcConfig.class);

@Bean

public AutoJsonRpcClientProxyCreator rpcClientProxyCreator(@Value("${rpc.manager.url}") String url){

AutoJsonRpcClientProxyCreator creator = new AutoJsonRpcClientProxyCreator();

try {

creator.setBaseUrl(new URL(url));

} catch (MalformedURLException e) {

log.error("创建rpc服务地址错误", e);

e.printStackTrace();

}

creator.setScanPackage(ProductRpc.class.getPackage().getName());//扫描rpc所在包

return creator;

}

}

application.properties

server.servlet.contextPath=/seller

server.port=8082

rpc.manager.url=http://localhost:80/manager/

# DataSource

spring.datasource.url=jdbc:mysql://localhost/manager?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC

spring.datasource.username=root

spring.datasource.password=

#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

springboot整合rpc远程调用_SpringBoot—-JsonRpc跨语言远程调用协议 - Java天堂相关推荐

  1. 【linux系统编程】远程登录工具ssh | 跨主机远程拷贝scp

    远程登录工具ssh && 跨主机远程拷贝scp 正文开始@Assassin 目录: 远程登录工具ssh && 跨主机远程拷贝scp 1. ssh简介: 2. ssh基本 ...

  2. Atitit.跨语言异常转换机制 java c# php到js的异常转换

    Atitit.跨语言异常转换机制 java c# php到js的异常转换 1. bizEx   直接抓取,然后js catchEX1 2. Chkec runtimeEx1 3. Other异常..J ...

  3. SpringBoot整合RPC框架---Thrift

    文章目录 什么是Thrift 架构 支持的通讯协议 支持的传输协议 支持的服务模型 Thrift的优点 SpringBoot整合Thrift 为什么会出现RPC框架 常见的RPC框架集成套路 开撸 官 ...

  4. python函数文档说明调用方式_Python 跨.py文件调用自定义函数说明

    0 前言 os.chdir() :用于改变当前python工作的目录到指定的路径 sys.path:是python搜索模块的一个路径集,为list,自定义的包可以把存放路径加进去,之后直接调用包名就行 ...

  5. springboot整合rpc远程调用_SpringCloud—RPC远程调用

    Eureka介绍 Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装,它实现了服务治理的功能,Spring Cloud Eureka提供服务端与客户端,服务端即是E ...

  6. java socket 远程调用_SpringBoot使用Netty实现远程调用的示例

    前言 众所周知我们在进行网络连接的时候,建立套接字连接是一个非常消耗性能的事情,特别是在分布式的情况下,用线程池去保持多个客户端连接,是一种非常消耗线程的行为.那么我们该通过什么技术去解决上述的问题呢 ...

  7. JWT,springboot整合JWT完成token的验证,token的使用,java架构师技术栈

    /** @author dugt1998@163.com @date 2020/11/8 12:40 */ public class JWTUtils { //签名 自己项目中的签名 private ...

  8. springboot整合spring Cache(redis)

    前言 前面有介绍过spring整合redis和redis的一些注意点,在实际开发中,spring cache方便简化的缓存操作的大部分内容.通过注解的方式实现缓存. 阅读前推荐先阅读:redis缓存介 ...

  9. 跨语言RPC框架Thrift详解

    一. 概念 Apache的Thrift软件框架,是用来进行可伸缩的.跨语言的服务开发,它通过一个代码生成引擎来构建高效.无缝的服务,这些服务能够实现跨语言调度,目前支持的语言有: C++, Java, ...

  10. redis命令,SpringBoot整合Redis6,主从复制,哨兵模式,集群,springCache初高级应用。

    目录 1. Docker安装Redis 2. Redis的基础 2.1 redis的key命令 2.2 reids的数据结构(6.0新增的数据结构) 1. String(字符串)类型 2. List( ...

最新文章

  1. UVA11624 Fire!(bfs)
  2. 序列化的 serialVersionUID 到底有什么用?
  3. 【AI-1000问】训练为什么要分测试集和验证集?
  4. C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
  5. 微信“拍一拍”,竟然可以使用Python实现,你get到了吗?
  6. Android 系统性能优化(28)---Android 性能优化工具集合
  7. java log4j 异步_Log4j2异步日志之异步格式化
  8. r生成html文件,从R中的许多html文件创建一个语料库
  9. Deepin-文件目录介绍
  10. 用python逆序输出字符串中的所有元素_Python中逆序输出字符串的六种方法
  11. 多开分身苹果版_【教程】苹果手机居然可以微信分身?全套教程,进来领取
  12. 苹果x和xsmax有什么区别_苹果手机OLED屏幕与LCD屏幕有什么区别
  13. pdf转换器免费版下载
  14. Ubuntu 16.04/18.04/20.04/deepin v20安装insight的方法
  15. c语言的中打印出鸟图形,教你画出一只萌萌哒小鸟【PS教程】
  16. Android SD卡及U盘插拔状态监听和内容读取
  17. Spring Security入门到实践(一)HTTP Basic在Spring Security中的应用原理浅析
  18. ZTree的全选 反选 全不选 取消 清空
  19. 教你用Qt手写优酷客户端界面
  20. 飞算全自动软件工程平台:让天下没有难做的软件工程

热门文章

  1. webpack配置报错WARNING in DefinePlugin Conflicting values for ‘process.env.NODE_ENV‘
  2. uniapp实例笔记
  3. android studio 工程rebuild没反应,Andriod Studio Clear Project或Rebuild Project出错
  4. oracle表增加序列字段,Oracle创建表和创建序列和修改,增加sql字段
  5. 计算机0表示负数,计算机原码反码补码_0
  6. MySQL(20)-----数据库设计的常规步骤
  7. Git(8):在GitHub上,如何使fork到的项目与原仓库的更新保持同步?
  8. [例程]string.trim().length()的用法
  9. C Programming Style 总结
  10. Eclipse maven构建springmvc项目