gRPC 简介

gRPC 是一个现代开源的高性能 RPC 框架,可以在任何环境下运行。它可以有效地将数据中心内和跨数据中心的服务与可插拔支持进行负载均衡、跟踪、健康检查和认证。它也适用于分布式计算,将不同设备、移动应用程序和浏览器连接到后端服务。

主要使用场景:

  • 在微服务架构中有效地连接多个服务(链路跟踪)
  • 将移动设备、浏览器客户端连接到后端服务
  • 生成高效的客户端库

可以从图中看出他是可以跨语言使用的,基于HTTP/2协议传输

分两个端:服务提供方和调用方

依赖:

<dependency>
<groupId>com.anoyi</groupId>
<artifactId>spring-boot-starter-grpc</artifactId>
<version>1.1.2.RELEASE</version>
</dependency>

共用接口:

@GrpcService(server = "user")
public interface UserService { void insert(UserEntity userEntity); void deleteById(Long id); void update(UserEntity userEntity); UserEntity findById(Long id); List<UserEntity> findAll();

server参数必须填:对应了服务调用方配置文件中的spring.grpc.remote-servers.server值

1、服务提供方

application.yml配置文件:

spring:
grpc:
enable: true
port: 6565

服务提供方实现接口提供服务:(接口实现类的命名的前缀必须与接口名相同)

@Service
public class UserServiceImpl implements UserService { /**
* 模拟数据库存储用户信息
*/
private Map<Long, UserEntity> userMap = new ConcurrentHashMap<>(); @Override
public void insert(UserEntity userEntity) {
if (userEntity == null){
log.warn("insert user fail, userEntity is null!");
return ;
}
userMap.putIfAbsent(userEntity.getId(), userEntity);
} // 其他省略 }

2、服务调用方

application.yml配置文件:

spring:
grpc:
remote-servers:
- server: user #这个就是上面注解里配置的接口
host: 127.0.0.1
port: 6565
- server: pay
host: 192.168.0.3
port: 6565

主类中添加grpc的服务自动扫描(需要添加扫描位置,由于使用了共用的接口工程,spring boot 无法直接扫描当前工程外部的信息,所以需要手动指定 @GrpcService 的包扫描路径,如果 @GrpcService 定义在当前工程内部,则无需配置 @GrpcService):

@SpringBootApplication
@GrpcServiceScan(basePackages = {"com.anoyi.grpc.facade"})
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} }

在服务调用方的任何component中使用@Autowaire注入即可

@RestController
@RequestMapping("/user")
public class UserController { @Autowired
private UserService userService; @PostMapping("/add")
public UserEntity insertUser(@RequestBody UserEntity userEntity){
userService.insert(userEntity);
return userEntity;
} // 省略其他 }

5、基于容器的微服务架构下的应用

spring-boot-starter-grpc 无服务注册中心,在 kubernetes 集群或 docker swarm 集群下轻松使用,只需更改 client 端的配置中的 host 即可,基于容器平台的 DNS 服务,host 配置为 server 端的服务名,就能正常调用。

springboot集成grpc的更多相关文章

  1. Spring Boot 集成 GRPC

    代码地址如下:http://www.demodashi.com/demo/14110.html 一.背景 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring ...

  2. SpringBoot集成Zipkin实现分布式全链路监控

    目录 Zipkin 简介 Springboot 集成 Zipkin 安装启动 zipkin 版本说明 项目结构 工程端口分配 引入 Maven 依赖 配置文件.收集器的设置 编写 Controller ...

  3. 【springBoot】springBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  4. SpringBoot集成security

    本文就SpringBoot集成Security的使用步骤做出解释说明.

  5. springboot集成Actuator

    Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...

  6. SpringBoot集成Shiro并用MongoDB做Session存储

    之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...

  7. SpringBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  8. springboot集成mybatis(二)

    上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...

  9. springboot集成mybatis(一)

    MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...

随机推荐

  1. yii widget使用的3个用法

    yii视图中使用的widget方式总结:常用的有3种方式:一.显示详细信息: $this->widget('zii.widgets.CDetailView', array( 'data' =&g ...

  2. [Apple开发者帐户帮助]一、开始(3)账户信息

    您帐户中显示的部分取决于您是否拥有免费帐户或是否已注册付费程序(Apple Developer Program或Apple Developer Enterprise Program).此外,您可以在这 ...

  3. CVTE面经

    神一般的面试经历.也算面了不少公司,没见过这种面试. 一面:三个同学对应一个面试官,同一个问题依次作答. 1.为什么投递这个岗位? 答:blablabla... 2.最难忘的成功项目? 答:blabl ...

  4. 5.23Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分

    作者:https://www.cnblogs.com/lyjin/p/6389349.html PO:持久对象(persistent object):---po就是在Object/Relation M ...

  5. 一周代码秀之[11.18~11.24 linq2xml面向对象]

    1.xml <Sections> <Item key ="1" value ="孕哺期" canBeSelected="false& ...

  6. Java中last_insert_id的使用

    last_insert_id的作用是:在当前表中的主键是自增时,插入一条新记录的同时使用last_insert_id可以获取当前的新记录的主键id. 下面是一个例子: import java.sql. ...

  7. SAP computer之input and MAR

    Input and MAR Below the program counter is the input and MAR block. It includes the address and data ...

  8. OpenCV: 图像连通域检测的递归算法

    序言:清除链接边缘,可以使用数组进行递归运算; 连通域检测的递归算法是定义级别的检测算法,且是无优化和无语义失误的. 同样可用于寻找连通域 void ClearEdge(CvMat* MM,CvPoi ...

  9. BZOJ 1146: [CTSC2008]网络管理Network 带修改主席树_树套树_DFS序

    Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路 ...

  10. eas之缓存清理

    apusic缓存清理,安装web框架补丁后,先清空apusic缓存,然后再重启服务apusic-domains-server1-deploy-easweb-tmpfiles