gRPC入门学习之旅(十)

grpc · 浏览次数 : 0

小编点评

## gRPC入门学习之旅 ### gRPC入门学习之旅(一) 在本部分,我们将了解gRPC的基本概念和原理。 1. **gRPC简介**:gRPC是一种高性能、通用的远程过程调用(RPC)框架,它基于HTTP/2协议,并提供了底层的网络通信功能。 2. **gRPC与其他RPC框架的对比**:与传统的RPC框架(如Apache Thrift、Java RPC等)相比,gRPC具有更高的性能和更低的开发成本。 3. **gRPC的应用场景**:gRPC适用于分布式系统、微服务架构、移动应用等领域,可以轻松地与其他语言和框架集成。 ### gRPC入门学习之旅(二) 在本部分,我们将探讨gRPC的工作原理和实现。 1. **gRPC的基本组成**:gRPC主要由客户端和服务端组成,客户端负责发起请求,服务端负责处理请求并返回响应。 2. **IDL定义与代码生成**:gRPC使用IDL(接口描述语言)来定义服务接口和消息结构,然后通过代码生成器生成对应的语言客户端和服务端代码。 3. **gRPC的通信流程**:gRPC通信流程包括请求的打包、发送、接收、解包等步骤,整个过程中涉及到了底层的网络通信库。 ### gRPC入门学习之旅(三) 在本部分,我们将学习如何使用gRPC进行应用程序开发。 1. **创建gRPC项目**:使用gRPC的工具或模板创建一个新的gRPC项目,包括服务定义、消息结构定义等。 2. **服务端代码生成**:根据IDL生成服务端代码,包括服务端接口、服务端实现等。 3. **客户端代码生成**:根据IDL生成客户端代码,包括客户端接口、客户端实现等。 4. **实现服务端逻辑**:在服务端实现中,我们可以通过 gRPC 提供的 API 来处理请求,并返回响应。 5. **调用客户端代码**:在客户端代码中,我们可以调用服务端提供的接口来发起请求,并处理响应。 ### gRPC入门学习之旅(四) 在本部分,我们将学习如何将gRPC应用于实际项目中。 1. **设计gRPC服务**:在设计gRPC服务时,我们需要考虑服务的边界、消息的结构以及通信的序列化方式等问题。 2. **实现服务间的通信**:在分布式系统中,我们可能需要多个gRPC服务协同工作,这时我们需要考虑如何实现服务间的通信。 3. **集成其他技术**:gRPC可以与其他技术(如数据库、缓存等)集成,以提高系统的整体性能和可扩展性。 ### 3.12、依赖注入方式调用gRPC 在本部分,我们将学习如何使用依赖注入的方式来调用gRPC服务。 1. **什么是依赖注入**:依赖注入是一种编程技术,它可以将对象的依赖关系从代码中解耦出来,便于代码的维护和测试。 2. **创建UserIoc类**:我们需要在Visual Studio 2022的解决方案中创建一个UserIoc类,并实现依赖注入的功能。 3. **实现gRPC客户端**:在MainWindows.xaml文件中添加一个按钮控件,并使用按钮的Click事件来触发gRPC客户端的调用。 4. **调用gRPC服务**:在btnIocTestUserInfo_Click事件中,我们使用依赖注入的方式调用了UserIoc服务中的GetUserInfo方法,并将结果输出到文本框中。 通过本教程的学习,相信大家对gRPC的基本概念、工作原理和使用方法有了更深入的了解。

正文

3.12、依赖注入方式调用gRPC

1. 在Visual Studio 2022的解决方案资源管理器中,使用鼠标右键单击“Command”文件夹,在弹出菜单中选择“添加--> 类”,在弹出的“添加新项”对话框中,选择添加 “UserIoc.cs”类,这是一个我们要实现的依赖注入的类,然后选择“添加”。

2. 在Visual Studio 2022的解决方案资源管理器中,使用鼠标双击打开“UserIoc.cs”文件,并添加如下具体代码。

using Demo.GrpcService.Protos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace Demo.Grpc.Client
{
    internal class UserIoc
    {

        /// <summary>
        /// 定义gRPC客户端服务对象
        /// </summary>

        private readonly UserInfo.UserInfoClient _userClient;

        public UserIoc(UserInfo.UserInfoClient userClient)

        {

            _userClient = userClient;
        }

        public string GetUserInfo()
        {
            var userInfo = _userClient.GetUserInfo(new UserInfoRequest()
            {

                UserName="IocTest",
                Password = "GRPC 依赖注入调用方式- IOC"

            });

            return JsonSerializer.Serialize(userInfo);

        }
}

}

 

 

3. 在MainWindows.xmal文件中添加一个Buttion控件,并使用鼠标双击这个按钮,在MainWindows.xmal.cs文件中添加一个btnIocTestUserInfo_Click事件,具体代码如下:

<Button x:Name="btnIocTestUserInfo" Grid.Column="2" Grid.Row="0" Content="Ioc用户信息" Click="btnIocTestUserInfo_Click"></Button>

4.在MainWindows.xmal.cs文件的btnIocTestUserInfo_Click事件中,添加依赖注入的代码。具体代码如下:

        private void btnIocTestUserInfo_Click(object sender, RoutedEventArgs e)
        {
            #region 使用IOC注入的方式调用gRPC
            IServiceCollection services = new ServiceCollection();

 
            //注册UserIoc服务
            services.AddTransient<UserIoc>();

            #region gRPC Client注册

            //调用http时启用该设置
            //AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
            //添加gRPC客户端服务
            services.AddGrpcClient<UserInfo.UserInfoClient>(options =>
            {
                //设置gRPC的https服务调用地址
                options.Address = new Uri("https://localhost:7149");

            }).ConfigureChannel(grpcOptions =>
            {
            });
            #endregion
            //构建容器
            IServiceProvider serviceProvider = services.BuildServiceProvider();
            //解析UserIoc服务

            var grpcRequestTest = serviceProvider.GetService<UserIoc>();
            //调用UserIoc服务中的GetUserInfo方法

           txtMsg.Text= grpcRequestTest.GetUserInfo();
            #endregion
        }

5.新开一个Visual Studio 2022,打开Demo.GrpcService解决方案,并在Visual Studio 2022的解决方案资源管理器中,将Demo.GrpcService项目设为启动项目。按F5,启动。如图。

 

6.在第一个Visual Studio 2022中,我们按F5,将Grpc.Demo.Client运行起来。然后点击“Ioc用户信息”按钮,实现Ioc调用grpc的方法 。如图

 

与gRPC入门学习之旅(十)相似的内容:

gRPC入门学习之旅(十)

gRPC是一个高性能、通用的开源远程过程调用(RPC)框架,基于底层HTTP/2协议标准和协议层Protobuf序列化协议开发, gRPC 客户端和服务端可以在多种环境中运行和交互。你可以用Java创建一个 gRPC 服务端,用 Go、Python、C# 来创建客户端。本系统文章详细描述了如何创建一...

gRPC入门学习之旅(九)

gRPC是一个高性能、通用的开源远程过程调用(RPC)框架,基于底层HTTP/2协议标准和协议层Protobuf序列化协议开发, gRPC 客户端和服务端可以在多种环境中运行和交互。你可以用Java创建一个 gRPC 服务端,用 Go、Python、C# 来创建客户端。本系统文章详细描述了如何创建一...

gRPC入门学习之旅(八)

gRPC是一个高性能、通用的开源远程过程调用(RPC)框架,基于底层HTTP/2协议标准和协议层Protobuf序列化协议开发, gRPC 客户端和服务端可以在多种环境中运行和交互。你可以用Java创建一个 gRPC 服务端,用 Go、Python、C# 来创建客户端。本系统文章详细描述了如何创建一...

Asp-Net-Core学习笔记:gRPC快速入门

## 前言 此前,我在做跨语言调用时,用的是 Facebook 的 Thrift,挺轻量的,还不错。 >Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。它通过一个代码

gRPC入门

1. gRPC简介 gRPC是一种高性能、开源和通用的远程过程调用(RPC)框架,由Google开源并维护。它使用Protocol Buffers(protobuf)作为接口定义语言(IDL),提供跨平台、跨语言的RPC调用支持。gRPC具有以下几个特点: 高性能:使用HTTP/2协议,支持多路复用

[转帖]gRPC Load Balancing

https://www.cnblogs.com/charlieroro/p/14312362.html 翻译自:https://grpc.io/blog/grpc-load-balancing/ 这是gRPC负载均衡的第一篇,后续会给出基于golang XDS服务发现的例子,了解golang XDS

GRPC与 ProtoBuf 的理解与总结

转载请注明出处: 1.GRPC 官网:https://www.grpc.io/ gRPC 官方文档中文版:http://doc.oschina.net/grpc RPC 框架的目标就是让远程服务调用更加简单、透明,其负责屏蔽底层的传输方式(TCP/UDP)、序列化方式(XML/Json)和通信细节。

文盘Rust -- tonic-Rust grpc初体验

gRPC 是开发中常用的开源高性能远程过程调用(RPC)框架,tonic 是基于 HTTP/2 的 gRPC 实现,专注于高性能、互操作性和灵活性。该库的创建是为了对 async/await 提供一流的支持,并充当用 Rust 编写的生产系统的核心构建块。今天我们聊聊通过使用tonic 调用grpc的的具体过程。

gRPC vs. HTTP:网络通信协议的对比

## 概述 gRPC 和 HTTP 是两种常见的网络通信协议,用于在客户端和服务器之间进行通信。它们具有不同的特点和适用场景,下面对它们进行详细比较。 ## HTTP(Hypertext Transfer Protocol) ### 特点: 1. **简单易用**:HTTP 使用简单的请求方法和状态

gRPC如何保障数据安全传输

## 什么是 gRPC? gRPC 是由 Google 开发的高性能、开源的 RPC(Remote Procedure Call)框架,用于在客户端和服务器之间进行通信。它基于 Protocol Buffers(protobuf)进行消息序列化和反序列化,支持多种通信协议,如 HTTP/2、TCP