springboot集成grpc
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的更多相关文章
- Spring Boot 集成 GRPC
代码地址如下:http://www.demodashi.com/demo/14110.html 一.背景 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring ...
- SpringBoot集成Zipkin实现分布式全链路监控
目录 Zipkin 简介 Springboot 集成 Zipkin 安装启动 zipkin 版本说明 项目结构 工程端口分配 引入 Maven 依赖 配置文件.收集器的设置 编写 Controller ...
- 【springBoot】springBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- SpringBoot集成security
本文就SpringBoot集成Security的使用步骤做出解释说明.
- springboot集成Actuator
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
- SpringBoot集成Shiro并用MongoDB做Session存储
之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...
- SpringBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
随机推荐
- Ubuntu16.04开启root用户,并远程登录
Ubuntu安装完成默认是普通权限的用户,root用户需要手动开启,并且还不含opne-ssh模块 1.给root用户设置密码 # sudo passwd root 会提示输入unix的新密码,这就 ...
- [CodeForces522B] Photo to Remember
某一天,n个朋友在一起聚会,他们已经很久没见了,于是他们决定拍照留念. 简单的说,拍照的时候,每个人有一个高度和宽度,第i个的高度和宽度分别是hi和wi.这些人排成一条直线,照片的最小的面积必须包含所 ...
- css 引入方式
css介绍 现在的互联网前端分三层: HTML:超文本标记语言.从语义的角度描述页面结构. CSS:层叠样式表.从审美的角度负责页面样式. JS:JavaScript .从交互的角度描述页面行为 CS ...
- 题解报告:hdu 1848 Fibonacci again and again(尼姆博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 Problem Description 任何一个大学生对菲波那契数列(Fibonacci num ...
- vue中的config配置
在webpack.base.conf文件中配置别名以及扩展名 resolve: { extensions: ['.js', '.vue', '.json', '.styl'], alias: { 'v ...
- Android Unresolved Dependencies
在Android Studio的开发中,在软件中集成了ButterKnife插件,另外需要集成ButterKnife的jar包.因为本地没有现成的,所以在module的build.gradle文件中添 ...
- 从XMLHttpRequest中获取请求的URL
在编写Ajax通用错误处理程序时,经常需要记录发生错误的XMLHttpRequest的请求URL.但查询文档,并未找到从XMLHttpRequest中获取请求URL的方法. 在javascript - ...
- 复习java第五天(枚举、Annotation(注释) 概述)
一.枚举 传统的方式: •在某些情况下,一个类的对象是有限而且固定的.例如季节类,只能有 4 个对象 •手动实现枚举类: —private 修饰构造器. —属性使用 private final 修饰. ...
- Qt无法用UTF-8编辑问题
原因: Windows默认编码格式是GBK. 而QT-各默认版本的编码格式是UTF-8. 解决方法": Windows环境下,Qt Creator,菜单->工具->选项-> ...
- (转)基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化
http://www.cnblogs.com/wuhuacong/p/4775282.html 在各种Web开发过程中,对话框和提示框的处理是很常见的一种界面处理技术,用得好,可以给用户很好的页面体验 ...