本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

码报:【j2开奖】服务化体用术之用 —— JAX(2)

时间:2017-01-25 20:37来源:报码现场 作者:www.wzatv.cc 点击:
1)我们既然是 In action, 我不解释太多标准细节的东西,读者可以自行通过附件1提供的链接,去查询标准相关的细节, 开奖 ,下面是两张 JAX-RS 的 Lifec

  1)我们既然是 In action, 我不解释太多标准细节的东西,读者可以自行通过附件1提供的链接,去查询标准相关的细节,开奖,下面是两张 JAX-RS 的 Lifecycle(具体请参见附件 spec 链接)的图片,读者可以先尝试理解一下图片 以帮助理解程序。

  Server-side :

  Client-side:

  2)将附录2中的源代码下载下来,用 intellij 或 eclipse 以 gradle 项目形式导入. 该项目的 JAX-RS 标准由 cxf 实现,与 Springboot 进行集成,在将项目导入后找到 类 Application, 右键 debug run,即可将该 springboot 的服务器端启动。

  3)服务端启动后,http 服务即被放在了 :8080, 可访问 :8080/ws 测试 cxf servlet dispatcher 是否启动成功。此时找到 类 ClientMainDemo,这个类既是我们生成的客户端 它是业务逻辑、性能监控、传递一些 session 信息给 stateless 服务的使用 main 方法的测试。我们在 “2” 中的服务启动好之后,直接 debug 执行 ClientMainDemo 中的 main 方法:

  具体代码详解我们下一步再讲(其实我不想讲解代码,代码即是文档,还烦请各位有兴趣的同学下载代码来看,代码并不复杂) 我们可以看到如下的日志:

  case a.

  第一个 request 在服务端可以看到日志:

  在客户端看到日志:

  我们可以看到,服务器发现了一个 request,并且记录了它被 call 了一次(我在代码中加的日志),与此同时 在客户端我们看到该 request 发起和结束的日志, 可以统计到 request 的状态、耗时等信息, 在客户端的track埋点功能 done。

  case b.

  是 DEMO 中的第三个 request, 我们将一个 ThreadLocal 中的变量设置好, 并使用 jaxrs 的 provider 进行拦截并将该值读取出来放进 http request 的 header。

  我们可以在客户端看到日志:

  服务端看到日志:

  4)执行步骤“3”之后,我们发现我们需要的三个功能都已经实现了, 我们再来具体看一看代码是怎么做的(具体的框架搭建请参考源码):

  1、自动生成可与服务器交互的客户端(该客户端需要 publish 成 jar 包到 repo 中,给集成方使用) CXF 框架提供了一个叫做 JAXRSClientFactory 的类, 可以根据 endpoint + 接口 + jaxrs providers 的方式来生成客户端接口, 详细代码参见JaxrsExampleFacade

  2、埋点 track 客户端执行性能(服务端我没做), 读者可以自己做 我自定义了一个类 叫做 UUIDHeaderClientRequestFilter,该类实现了 jaxrs 标准中 client 端的两个 filter 接口, 并且我将其放进了 client 的生命周期,即可用于生成每个 request 的 uuid 并且将其性能 track 起来,代码如下:

  3、传递一些作为上游服务器拥有的 session 类参数给无状态的服务端 与 UUIDHeaderClientRequestFilter 一样, 实现一个叫做 OperatorHeaderClientRequestFilter 的 jaxrs provider (多个 provider 之后请读者注意控制它们的 Priority),该 Filter 会从 ThreadLocal 中读取变量值,放进 requestheader,具体代码如下:

  与此同时在服务器端也实现一个叫做 OperatorFilter 的类, 作为 jaxrs 的 provider 实现 ContainerRequestFilter 和 ContainerResponseFilter, 将 http header 中的值读出来并放到 ThreadLocal 中, 在 request 结束时清空 threadlocal,详细代码如下:

  希望这篇文章在您的服务化之路上有一定思路上的帮助。

  附录:

jax-rs spec下载地址:https://jcp.org/aboutJava/communityprocess/final/jsr339/index.html

本文源码地址:https://github.com/Agileaq/jax-rs-example.git

(责任编辑:本港台直播)

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容