这篇文章主要讲解了“Abp + Grpc 怎么实现用户会话状态传递”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Abp + Grpc 怎么实现用户会话状态传递”吧!
在实际项目当中,我采用的是 Abp 框架,但是 Abp 框架官方并没有针对 Grpc 进行模块封装。基于此我结合 Abp 与 MagicOnion 封装了一个 Abp.Grpc 模块,它包括服务端和调用端两部分的包。通过这两个包,你可以很方便地在 Abp 框架当中集成 Grpc 实现服务内部通讯。
但是在实际使用当中会出现一个问题,当 A 服务调用 B 服务的时候,A 服务当前登录用户为 admin,调用 B 服务的 IAbpSession
的值仍然为空,这个时候当 B 服务内部实现使用了 IAbpSession
时会出现问题。
这是因为通过 Grpc 接口调用时,并没有传递诸如 Token 之类的东西,而在 B 服务内部的 IAbpSession
本身附加的数据是从 HttpContext
里面获取的,所以 B 服务当前是没有用户状态的。
所幸 IAbpSession
提供了一个 Use
方法,通过这个方法我们可以临时地改变 IAbpSession
内部的值,当 。定义如下:
IDisposable Use(int? tenantId, long? userId);
使用方法如下:
这里 Abp.Grpc 库使用的是 MagicOnion 库实现 Grpc 接口的,底层序列化使用的是 MessagePack,速度也不比 Protocol Buffer 差。
服务定义接口时,必须附加一个 GrpcSession
参数,这个参数用于调用方传递其 IAbpSession
值所使用。例如我有一个接口方法如下,用于返回服务方接收到的用户 Id 值。
服务提供方在实现 ITestGrpcService
的时候,需要在代码起始点就开始使用 using
语句包裹代码。
服务调用方则直接在调用 Grpc 接口的时候,传递给接口当前服务的 Session 状态。
当客户端调用 GRPC 接口时,会将自身的 Session 状态通过 GrpcSession 传递到服务端,这样服务端就能够共享客户端的绘画状态。
Abp.Grpc 库地址:https://github.com/GameBelial/Abp.Grpc
服务端:https://github.com/GameBelial/Abp.Grpc.Server.Demo
客户端:https://github.com/GameBelial/Abp.Grpc.Client.Demo
原文地址:https://www.cnblogs.com/myzony/p/9454612.html
感谢各位的阅读,以上就是“Abp + Grpc 怎么实现用户会话状态传递”的内容了,经过本文的学习后,相信大家对Abp + Grpc 怎么实现用户会话状态传递这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。