热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于java:从零开始学gRPC二

gRPC的大抵性能点置信大家肯定曾经有些理解。然而,在日常开发中咱们很少会应用原生的gRPC,更多的是心愿gRPC能集成到现有利用的开发环境中。这篇文章会围绕

前言

gRPC的大抵性能点置信大家肯定曾经有些理解。然而,在日常开发中咱们很少会应用原生的gRPC,更多的是心愿gRPC能集成到现有利用的开发环境中。这篇文章会围绕如何以简略的形式将gRPC集成到SpringBoot开展解说。

疾速搭建

环境筹备

  • 操作系统:Windowns
  • JDK版本:1.8
  • 编辑工具:IntelliJ IDEA Community Edition 2021.1.2 x64

框架选型

目前开源切比拟热门的grpc和SpringBoot整合框架有两种可选计划。别离是LogNet 和 yidongnan 。(这两者略微有些区别,在最初我会有个比照) 这里我应用后者作为demo演示。

创立我的项目

本人创立一个maven我的项目就好,没有别的要求(All in one,临时不须要分模块)。想要偷懒的同学也能够借鉴之前的我的项目 ,然而我倡议本人入手尝试搭建比拟好。

MAVEN依赖

留神:我只列出了要害依赖。而且注册核心选用的是zookeeper,要留神zookeeper的版本,能够参考 这里 。



  
    net.devh
    grpc-spring-boot-starter
    2.13.1.RELEASE
  
  
    org.springframework.boot
    spring-boot-starter-web
    2.6.8
  

  
  
    org.springframework.cloud
    spring-cloud-starter-zookeeper-discovery
    3.1.2
  

配置


server:
  port: 8081

spring:
  application:
    name: demo-grpc
  cloud:
    zookeeper:
      connect-string: localhost:2181

grpc:
  client:
    greeterService1:
      address: discovery:/demo-grpc
      negotiationType: PLAINTEXT
  server:
    port: 9091

这个中央的 negotiationType要留神点(不设置的话须要对客户端传输进行加密)

SLB测试

  • 本地启动zookeeper
  • 本地启动两次(记得改端口,tomcat和grpc的都要改),测试代码如下。

  • 测试后果展现


    我前端都是通过一个地址拜访的,申请通过gRPC的负载配置被散发到不同的端口去了,由此可见SLB失效了。

LogNet 与 yidongnan

共性:

  1. 扩大了原生gRPC的服务注册、服务发现性能。
  2. 和SpringCloud深度整合,有很好的扩大能力。

差别:

  1. 服务发现:yidongnan间接将服务发现和gRPC自身的SLB整合,LogNet须要本人做SLB,或者手动整合gRPC的软负载能力 (官网demo上没提到如何做SLB,这里我暂且认为是这样子,晓得的敌人记得分割我更正)
  2. LogNet 多了对事务和全局异样的解决能力。(通常不倡议在RPC的过程中应用事务,所以我感觉这个性能有点鸡肋)
  3. LogNet 还整合了spring-cloud-stream、spring-boot-validation。

总结

这里咱们很容易就发现这两个框架次要做的是服务的主动注册和发现以及gRPC本身能力和spring cloud能力的整合(鉴权、服务可观测、链路追踪),服务治理能力弱的问题并没有失去解决(即没有提供一些适合的限流、降级、流量调度策略,也没有提供一个适合的控制台或者API去对服务进行治理。能够参考Dubbo Admin,通过它能够对Dubbo服务进行治理)。

阐明:我这里没有演示sleuth、actuator、security这些的集成,有趣味的能够去看看 文档 。

踩坑笔记

1.Client端默认设置的是密文,必须要设置TLS证书。当然也能够应用文本传输,然而生产环境不倡议。客户端平安配置传送门

文本传输配置:grpc.client.[serviceName].negotiatiOnType=PLAINTEXT

  1. 若不集成SpringCloud-Discovery则不能应用注册核心做服务发现,只能固定配置,例如:
    grpc.client.[serviceName].address: static://localhost:9090,localhost:
    //9091。具体配置能够参考上面文档
 /**
     * Sets the target address uri for the channel. The target uri must be in the format:
     * {@code schema:[//[authority]][/path]}. If nothing is configured then the name of the client will be used along
     * with the default scheme. We recommend explicitly configuring the scheme used for the address resolutions such as
     * {@code dns:/}.
     *
     * 

* Examples *

* *
    *
  • {@code static://localhost:9090} (refers to exactly one IPv4 or IPv6 address, dependent on the jre * configuration, it does not check whether there is actually someone listening on that network interface)
  • *
  • {@code static://10.0.0.10}
  • *
  • {@code static://10.0.0.10,10.11.12.11}
  • *
  • {@code static://10.0.0.10:9090,10.0.0.11:80,10.0.0.12:1234,[::1]:8080}
  • *
  • {@code dns:/localhost (might refer to the IPv4 or the IPv6 address or both, dependent on the system * configuration, it does not check whether there is actually someone listening on that network interface)}
  • *
  • {@code dns:/example.com}
  • *
  • {@code dns:/example.com:9090}
  • *
  • {@code dns:///example.com:9090}
  • *
  • {@code discovery:/foo-service}
  • *
  • {@code discovery:///foo-service}
  • *
  • {@code unix:} (Additional dependencies may be required)
  • *
  • {@code unix://} (Additional dependencies may be required)
  • *
* * @param address The string representation of an uri to use as target address or null to use a fallback. * * @see gRPC Name Resolution * @see NameResolverProvider */

推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了lintcode(12)题目的要求和解题思路,以及给出了相应的代码实现。题目要求在给定的字符串source中找到包括所有目标字符串字母的最短子串,并且时间复杂度为O(n)。解题思路是使用滑动窗口的方法,通过维护一个unordered_map来记录目标字符串中每个字符的出现次数,并使用双指针来寻找最小子串。代码实现部分给出了具体的实现代码。 ... [详细]
author-avatar
梦晗明镜百_576
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有