带你读《Apache Dubbo微服务开发从入门到精通》——五、 上下文隐式传参(上)

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 带你读《Apache Dubbo微服务开发从入门到精通》——五、 上下文隐式传参(上)

五、 上下文隐式传参

 

1. 特性说明

 

可以通过RpcContext上的setAttachment和getAttachment在服务消费方和提供方之间进行参数的隐式传递。

 

背景

 

上下文信息是RPC框架很重要的一个功能,使用RpcContext可以为单次调用指定不同配置。如分布式链路追踪场景,其实现原理就是在全链路的上下文中维护一个 traceId,Consumer和Provider通过传递traceId来连接一次RPC调用,分别上报日志后可以在追踪系统中串联并展示完整的调用流程。这样可以更方便地发现异常,定位问题。

 

Dubbo中的RpcContext是一个ThreadLocal的临时状态记录器,当接收到RPC请求,或发起RPC请求时,RpcContext的状态都会变化。比如:A调B,B调C,则B机器上,在B调C之前,RpcContext记录的是A和B的信息,在B调C之后,RpcContext记录的是B和C的信息。

 

 

在Dubbo 3中RpcContext被拆分为四大模块(ServerContext、ClientAttachment、ServerAttachment和ServiceContext)。

 

它们分别承担了不同的指责:

 

ServiceContext:在Dubbo内部使用,用于传递调用链路上的参数信息,如invoker对象等

 

ClientAttachment:在Client端使用,往ClientAttachment中写入的参数将被传递到Server端

 

ServerAttachment:在Server端使用,从ServerAttachment中读取的参数是从Client中传递过来的

 

ServerContext:在Client端和Server端使用,用于从Server端回传Client端使用,Server端写入到ServerContext的参数在调用结束后可以在Client端的ServerContext获取到

 

image.png

 

如上图所示,消费端发起调用的时候可以直接通过Method Invoke向远程的服务发起调用,同时消费端往RpcClientAttachment写入的数据会连同Invoke的参数信息写入到Invocation中。

 

消费端的Invocation经过序列化后通过网络传输发送给服务端,服务端解析Invocation生成Method Invoke的参数和RpcServerAttachment,然后发起真实调用。

 

在服务端处理结束之后,Method Response结果会连同RpcServiceContext一起生成Result对象。

 

服务端的Result结果对象经过序列化后通过网络传输发送回消费端,消费端解析Result生成Method Response结果和RpcServiceContext,返回真实调用结果和上下文给消费端。

 

注:pathgroupversiondubbotokentimeout几个key是保留字段,请使用其它值。

 

2. 使用场景

 

内部系统通过Dubbo调用时traceId如何透传到服务提供方。



《Apache Dubbo微服务开发从入门到精通》——高级功能——五、 上下文隐式传参(下):https://developer.aliyun.com/article/1224998

 


相关文章
|
17天前
|
敏捷开发 存储 运维
深入理解后端开发中的微服务架构
在现代软件开发领域,微服务架构已经成为一种重要的设计模式。它通过将复杂的应用程序分解为一套小的、独立的服务来促进敏捷开发和快速迭代。本文旨在探索微服务架构的核心概念、优势与挑战,并结合具体案例分析其在实际应用中的表现。我们将从服务划分策略、通信机制,到数据一致性保障等方面,逐一剖析微服务架构的实施细节。此外,文章还将讨论微服务架构与传统单体架构的区别,以及如何平滑地从传统架构迁移至微服务架构。
|
22天前
|
Kubernetes 持续交付 Docker
现代后端开发中的微服务架构与容器化技术
本文探讨了现代后端开发中微服务架构与容器化技术的重要性和应用。微服务架构通过服务的拆分和独立部署提升了系统的灵活性和可维护性,而容器化技术则为微服务的快速部署和管理提供了解决方案。文章深入分析了微服务架构的优势、挑战以及如何利用容器化技术来支持微服务架构的实现。最后,通过实际案例展示了微服务与容器化技术在提升应用开发效率和系统稳定性方面的应用实践。【7月更文挑战第5天】
|
21天前
|
SQL 数据库 微服务
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
|
22天前
|
数据管理 物联网 开发者
现代化后端开发中的微服务架构设计与实现
在当今快速发展的软件开发领域,微服务架构已成为构建高效、可扩展和灵活的后端系统的重要方式。本文将探讨微服务架构的设计原则、实现方法以及应用场景,帮助开发者理解如何在项目中成功应用微服务。【7月更文挑战第4天】
31 2
|
2天前
|
Kubernetes 监控 开发者
探索后端开发中的微服务架构实践
在现代软件开发领域,微服务架构作为一种灵活、可扩展的后端解决方案,正逐渐取代传统的单体式架构。本文将深入探讨微服务的设计理念、实施策略及其在企业级应用中的具体应用案例,旨在为读者提供一套系统的微服务实践指南。通过对比分析微服务与单体架构的性能差异,结合具体数据和案例研究,本文揭示了微服务在提高系统可维护性、可扩展性和敏捷性方面的优势。最后,文章讨论了微服务实施过程中可能遇到的挑战及解决策略,为后端开发者提供了宝贵的参考和启示。
|
3天前
|
Kubernetes 搜索推荐 开发者
探索后端开发的未来之路:微服务架构与容器化技术
随着云计算技术的不断成熟和普及,后端开发领域正经历着前所未有的变革。本文将深入探讨微服务架构和容器化技术如何重塑后端开发的面貌,提升系统的可扩展性、灵活性和可靠性。通过分析现代后端系统面临的挑战,我们将展示微服务和容器化如何提供解决方案,并预测这些技术如何塑造后端开发的未来发展。
20 3
|
3天前
|
消息中间件 监控 Kubernetes
后端开发中的微服务架构实践与挑战
在数字化时代的浪潮下,后端开发不断演化,微服务架构应运而生,成为解决复杂系统设计问题的一种新范式。本文将深入探讨微服务架构的核心概念、实施策略以及面临的主要技术挑战,同时结合具体案例分析其在实际开发中的应用效果和价值体现,旨在为后端开发人员提供一套系统的微服务实践指南和思考框架。
|
10天前
|
Kubernetes API 开发者
探索现代后端开发中的微服务架构
【7月更文挑战第17天】本文深入探讨了微服务架构在现代后端开发中的应用,分析了其设计原则、优势以及面临的挑战。通过具体实例,展示了如何有效实施微服务架构,并讨论了相关技术栈的选择。文章旨在为后端开发者提供微服务实施的指导和最佳实践。
|
6天前
|
敏捷开发 消息中间件 监控
探索后端开发中的微服务架构
本文深入探讨了微服务架构在后端系统设计中的关键作用,分析了其优势、挑战与实施策略。通过比较传统单体应用与微服务的异同,文章阐述了微服务如何促进敏捷开发和持续交付,同时指出了在采用微服务时可能遇到的技术债务和管理复杂性问题。结合具体案例,本文为读者提供了关于如何有效实施微服务的实用建议。 【7月更文挑战第21天】
|
9天前
|
消息中间件 运维 API
探索后端开发中的微服务架构实践
本文将深入探讨微服务架构在后端开发中的应用,包括其设计原则、优势与挑战。通过对具体案例的分析,我们将了解如何在实际项目中有效实施微服务,以及如何克服实施过程中的常见问题。文章旨在为后端开发人员提供一套微服务架构的实践指南,帮助他们构建更加灵活、可扩展的系统。
22 1

推荐镜像

更多