当前位置: 首页 > news >正文

推广网站有哪些wordpress 顶部图像

推广网站有哪些,wordpress 顶部图像,球迷类的网站如何做,洛阳网站建站文章目录 原文链接RpcContext 上下文对象Dubbo 过滤器#xff08;Filter#xff09;对象基于Dubbo的traceId追踪传递实现 原文链接 RpcContext 上下文对象 在实现 Dubbo 调用之间的链路跟踪之前#xff0c;先简单了解 RpcContext 上下文对象和 Filter 过滤器对象#xff… 文章目录 原文链接RpcContext 上下文对象Dubbo 过滤器Filter对象基于Dubbo的traceId追踪传递实现 原文链接 RpcContext 上下文对象 在实现 Dubbo 调用之间的链路跟踪之前先简单了解 RpcContext 上下文对象和 Filter 过滤器对象Dubbo 分布式链路追踪是基于这两个对象实现。 概要 RpcContext 是 Dubbo 框架提供的一个类它的设计目标是提供一个 dubbo 调用的上下文对象用于在远程过程调用RPC期间传递、共享请求和响应的相关信息。它可以用于存储、访问与当前 RPC 调用相关的数据如调用方的 IP 地址、附加参数、上下文变量等。它提供了一些静态方法和属性可以方便地获取和设置与当前线程相关的 RPC 上下文。 public class RpcContext {private static final InternalThreadLocalRpcContext LOCAL new InternalThreadLocalRpcContext() {protected RpcContext initialValue() {return new RpcContext();}};private static final InternalThreadLocalRpcContext SERVER_LOCAL new InternalThreadLocalRpcContext() {protected RpcContext initialValue() {return new RpcContext();}};private final MapString, String attachments new HashMap();private final MapString, Object values new HashMap();// ...... }原理 RpcContext 是基于 ThreadLocal 实现的做到了线程隔离。RpcContext是与线程绑定的每个线程都有自己的一个 RpcContext 实例并使用 ThreadLocal 变量来存储避免并发访问问题。当客户端发起一个 RPC 请求时Dubbo 框架会创建一个新的线程来处理该请求并且会将 RpcContext 与该线程进行绑定这样看对于每次 RPC 请求RpcContext 也是唯一的。但对于同一个线程内的多个 RPC 请求它们共享同一个 RpcContext 实例。 RpcContext 实例会在请求处理期间一直存在并在请求处理完成后需要清理当前线程上的 RpcContext 实例中的数据以确保下次使用该线程处理新的请求时RpcContext 是一个干净的状态。 对于服务消费方Dubbo 框架在请求发送、响应后没有清除 RpcContext 实例中的数据 对于服务提供方Dubbo 框架在收到请求并处理后会去清除 RpcContext 实例中的数据这个在 ContextFilter 服务提供方过滤器中可以看到。 使用场景 可以在 dubbo 的拦截器、过滤器或服务提供者/消费者的代码中使用 RpcContext 来获取和设置上下文信息以满足特定的业务需求如日志跟踪、传递身份验证信息等。 下面是一些常用的 RpcContext 方法和属性 RpcContext.getContext(): 获取当前线程的 RpcContext 实例。RpcContext.isConsumerSide(): 判断当前线程是否处于消费者端。RpcContext.isProviderSide(): 判断当前线程是否处于提供者端。RpcContext.getRemoteAddress(): 获取远程调用的地址。RpcContext.getLocalAddress(): 获取本地调用的地址。RpcContext.setAttachment(String key, String value): 设置附加参数。RpcContext.getAttachment(String key): 获取指定键的附件信息。RpcContext.getAttachments(): 获取所有的附件信息。 Dubbo 过滤器Filter对象 Dubbo Filter 介绍 dubbo 的 Filter 是 dubbo 框架提供的一个功能扩展点用于对服务提供者和消费者之间的请求和响应进行拦截过滤处理比如认证和授权、日志跟踪、传递一些公共信息等。 如 dubbo 原生 Filter 实现类如ConsumerContextFilter 和 ContextFilter ConsumerContextFilter 是一个服务消费方的过滤器用于在服务消费者发起 RPC 调用之前或之后对上下文信息进行处理和传递用于收集和发送调用方的上下文信息到服务提供者端。 ConsumerContextFilter 源码通过这个过滤器可以看到在 RPC 调用之前会获取 RpcContext 对象并设置相关参数Dubbo 框架会借助 RpcContext 对象将相关数据透传到服务提供方。 Activate(group {consumer},order -10000 ) public class ConsumerContextFilter implements Filter {public ConsumerContextFilter() {}public Result invoke(Invoker? invoker, Invocation invocation) throws RpcException {RpcContext.getContext().setInvoker(invoker).setInvocation(invocation).setLocalAddress(NetUtils.getLocalHost(), 0).setRemoteAddress(invoker.getUrl().getHost(), invoker.getUrl().getPort()).setRemoteApplicationName(invoker.getUrl().getParameter(remote.application)).setAttachment(remote.application, invoker.getUrl().getParameter(application));if (invocation instanceof RpcInvocation) {((RpcInvocation)invocation).setInvoker(invoker);}return invoker.invoke(invocation);} }Activate 注解是 Dubbo 框架提供的一个扩展点激活注解用于指定在特定条件下激活扩展点。 在上述过滤器中Activate(group Constants.CONSUMER, order -10000) 是对一个扩展点的激活配置。具体解释如下 group {consumer}: 在指定的分组激活如 consumer表示该扩展点在消费者端被激活。order -10000: 指定激活的顺序为 -10000。在 Dubbo 框架中扩展点的激活顺序可以通过 order 值来进行控制值越小表示优先级越高。 ContextFilter 是一个服务提供方的过滤器用于在服务提供者收到 RPC 调用请求之前或之后对上下文信息进行处理和传递如清除 RpcContext 实例中的数据以确保下次使用该线程处理新的请求时RpcContext 是一个干净的状态。 ContextFilter 源码在处理请求后去清除 RpcContext 中相关数据。 Activate(group {provider},order -10000 ) public class ContextFilter implements Filter, Filter.Listener {private static final String TAG_KEY dubbo.tag;public ContextFilter() {}public Result invoke(Invoker? invoker, Invocation invocation) throws RpcException {// ......Result var6;try {// 禁止清除RpcContext的功能。这意味着在调用invoker.invoke(invocation)之后RpcContext中的上下文信息不能被清除。RpcContext.getContext().clearAfterEachInvoke(false);var6 invoker.invoke(invocation);} finally {// 开启允许清除RpcContext的功能。RpcContext.getContext().clearAfterEachInvoke(true);// 显式清除RpcContext中的上下文信息。RpcContext.removeContext();RpcContext.removeServerContext();}return var6;}// ...... }自定义 Dubbo Filter 实现 org.apache.dubbo.rpc.Filter接口 import org.apache.dubbo.rpc.*;public class CustomFilter implements Filter {Overridepublic Result invoke(Invoker? invoker, Invocation invocation) throws RpcException {// 自定义过滤逻辑return invoker.invoke(invocation);} }创建 Dubbo 的 SPI 扩展文件META-INF/dubbo/org.apache.dubbo.rpc.Filter中将自定义过滤器的实现类指定为对应的扩展点 customFiltercom.example.CustomFilter使过滤器生效 方式一在自定义过滤器上使用注解 Activate(group {consumer})方式二在配置文件这里使用application.properties中配置 dubbo.consumer.filtercustomFilter通过以上步骤在服务消费方指定了一个自定义过滤器该过滤器将在服务消费者发起远程调用前后执行自定义的逻辑。 基于Dubbo的traceId追踪传递实现 要实现在 Dubbo 接口之间传递 TraceID可以使用 Dubbo 的拦截器Filter机制来实现。下面是一个示例代码演示了如何在 Dubbo 接口调用中传递 TraceID 进行追踪其中具体 Filter 实现过程前面已讲述这里只展示实现类代码。需要 demo 示例代码请关注【Qin的学习营地】回复【基于Dubbo的traceId追踪传递】。 这里使用 spring boot 整合 dubbo详细搭建过程请参考Dubbo 快速入门使用教程 这里通过打印日志来可视化结果使用了 Slf4J 的 MDC通过设置 MDC.put(key, value)并在日志配置文件中配置 key日志打印时会将配置 key 的地方转换为 value 打印出来。 创建 Dubbo 的服务提供方拦截器类从 RpcContext 中获取 traceid 参数并设置到 MDC 中请求处理完后清除 MDC 中的 traceid 参数 Slf4j Activate(group {provider}) public class TraceIdProviderFilter implements Filter {Overridepublic Result invoke(Invoker? invoker, Invocation invocation) throws RpcException {String traceId RpcContext.getContext().getAttachment(traceId);if (traceId ! null) {MDC.put(traceId, traceId);}try {return invoker.invoke(invocation);} finally {MDC.remove(traceId);}} }创建 Dubbo 的服务消费方拦截器类向 RpcContext 中写入 traceid 参数 Slf4j Activate(group {consumer}) public class TraceIdConsumerFilter implements Filter {Overridepublic Result invoke(Invoker? invoker, Invocation invocation) throws RpcException {String traceId MDC.get(traceId);if (traceId null) {traceId UUID.randomUUID().toString().replace(-, );}RpcContext.getContext().setAttachment(traceId, traceId);MDC.put(traceId, traceId);log.info(consumer —— provider);return invoker.invoke(invocation);} }服务消费方调用逻辑 Slf4j Component public class ProducerService {Reference(retries -1, version1.0.0, timeout 15000)private HelloService helloService;public String consumerSayHello(String name){String traceId UUID.randomUUID().toString().replace(-, );MDC.put(traceId, traceId);String hello helloService.sayHello(name);log.info(consumer receive response : hello);return hello;} }运行后看日志打印结果可以看到服务提供方的 traceId 和服务消费方的 traceId 两者一致服务消费方的 traceId 透传到服务提供方。 消费方 提供方 ​ 分布式链路追踪基于Dubbo的traceId追踪传递 本文首先介绍 Dubbo 的 RpcContext 上下文和 Filter 过滤器然后再介绍基于Dubbo的traceId追踪传递的实现。
http://www.hkea.cn/news/14324378/

相关文章:

  • 网站建站及维护南宁工作室注册
  • 做直播网站需要哪些技术移动端减肥网站模板
  • 电商网站创办过程小白怎么学室内设计
  • 江门网站制作网站建设招聘网站需要哪些资质
  • 80s无水印视频素材网站下载浙江省两学一做网站
  • 中国购物网站排名做网站赚钱流量
  • 北京网站开发最专业的公司直播营销策略有哪些
  • 建个微商城网站多少钱网站主机服务器
  • 个人网站的域名网站后台管理水印怎么做
  • 深圳市建网站公司网页浏览器怎么设置
  • 列表网做优化网站怎么样千万pv网站开发成本
  • 石家庄无极网站建设快递公司网站怎么做
  • 深圳网站开发制作ui图标素材网站
  • 平面设计公司名字大全成都网站优化
  • 网站软件大全免费下修改目录wordpress
  • 铜仁建设集团招聘信息网站手把手教你入侵网站修改数据
  • 网站建设难吗外贸网站优化排名
  • 网站建设保定有没有做网站的高手
  • 谷歌搜索引擎免费入口镜像深圳网站建设网站优化服务
  • 台州网站建设企业企业网站页面
  • 网站兼容ie代码国建设网站
  • 网站建设企业模板wordpress分权限浏览
  • 四川省建设科技协会网站首页凡科做网站在百度能看见吗
  • 深圳市门户网站建设企业官方网站建设的公司
  • 教育培训学校网站建设方案php手机网站如何制作
  • 茂名网站建设哪家好上海app开发推荐中伟科
  • 正规网站建设方案详细品牌高端网站
  • 网站做新闻外链有作用吗然后做网站
  • flash网站as网站面包屑导航怎么做的
  • 北京网站建设是什么微信小程序发布流程