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

甘肃农产品网站建设seo排名软件

甘肃农产品网站建设,seo排名软件,宁波专业建网站外包,app的推广方式有哪些1 介绍 在 Spring 5 之前#xff0c;如果我们想要调用其他系统提供的 HTTP 服务#xff0c;通常可以使用 Spring 提供的 RestTemplate 来访问#xff0c;不过由于 RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端#xff0c;因此存在一定性能瓶颈。根据 Spring 官…1 介绍 在 Spring 5 之前如果我们想要调用其他系统提供的 HTTP 服务通常可以使用 Spring 提供的 RestTemplate 来访问不过由于 RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端因此存在一定性能瓶颈。根据 Spring 官方文档介绍在将来的版本中它可能会被弃用。​ 作为替代Spring 官方已在 Spring 5 中引入了 WebClient 作为非阻塞式 Reactive HTTP 客户端。 1.1 什么是 WebClient 从 Spring 5 开始Spring 中全面引入了 Reactive 响应式编程。而 WebClient 则是 Spring WebFlux 模块提供的一个非阻塞的基于响应式编程的进行 Http 请求的客户端工具。由于 WebClient 的请求模式属于异步非阻塞能够以少量固定的线程处理高并发的 HTTP 请求。因此从 Spring 5 开始HTTP 服务之间的通信我们就可以考虑使用 WebClient 来取代之前的 RestTemplate。 1.2 WebClient 的优势 与 RestTemplate 相比WebClient 有如下优势 非阻塞Reactive 的并支持更高的并发性和更少的硬件资源。提供利用 Java 8 lambdas 的函数 API。支持同步和异步方案。支持从服务器向上或向下流式传输。 RestTemplate 不适合在非阻塞应用程序中使用因此 Spring WebFlux 应用程序应始终使用 WebClient。在大多数高并发场景中WebClient 也应该是 Spring MVC 中的首选并且用于编写一系列远程相互依赖的调用。 2 使用 WebClient 2.1 创建 WebClient 实例 添加 Spring WebFlux 依赖从而可以使用 WebClient。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-webflux/artifactId/dependency 有三种方式可供选择。第一种是使用默认设置创建 WebClient 对象 WebClient client WebClient.create();第二种方式是使用给定的基本 URI 初始化 WebClient 实例 WebClient client WebClient.create(http://localhost:8080);第三种方式推荐是使用 DefaultWebClientBuilder 类构建客户端该类允许完全自定义 WebClient client WebClient.builder().baseUrl(http://localhost:8080).defaultCookie(cookieKey, cookieValue).defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .defaultUriVariables(Collections.singletonMap(url, http://localhost:8080)).build(); 2.2 指定超时时间 通常情况下默认的 30 秒 HTTP 超时时间太慢无法满足需要要自定义这种行为可以创建一个 HttpClient 实例并配置 WebClient 使用它。 通过 ChannelOption.CONNECT_TIMEOUT_MILLIS 选项设置连接超时。分别使用 ReadTimeoutHandler 和写 WriteTimeoutHandler 设置读、写超时。使用 responseTimeout 指令配置响应超时。 所有这些都必须在要配置的 HttpClient 实例中指定 HttpClient httpClient HttpClient.create().option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000).responseTimeout(Duration.ofMillis(5000)).doOnConnected(conn -conn.addHandlerLast(new ReadTimeoutHandler(5000, TimeUnit.MILLISECONDS)).addHandlerLast(new WriteTimeoutHandler(5000, TimeUnit.MILLISECONDS)));WebClient client WebClient.builder().clientConnector(new ReactorClientHttpConnector(httpClient)).build(); 注意虽然也可以在客户端请求中调用 timeout但这是信号超时而不是 HTTP 连接、读/写或响应超时这是 Mono / Flux Publisher 的超时。 2.3 准备请求 - 定义方法 首先需要通过调用 method(HttpMethod method) 来指定请求的 HTTP 方法 UriSpecRequestBodySpec uriSpec client.method(HttpMethod.POST);或调用其快捷方法如 get、post 和 delete WebClient.RequestHeadersUriSpec? get client.get();WebClient.RequestBodyUriSpec post client.post();WebClient.RequestBodyUriSpec put client.put();WebClient.RequestHeadersUriSpec? delete client.delete();注意虽然看起来重用了 Request Spec 变量WebClient.UriSpec、WebClient.RequestBodySpec、WebClient.RequestHeadersSpec、WebClient.ResponseSpec但这只是为了简化演示不同的方法。这些指令不应该在不同请求中重复使用因为它们会检索引用因此后面的操作会修改在前面步骤中所定义的内容。 2.4 准备请求 - 定义 URL 下一步是提供 URL。同样也有不同的方法。可以将其作为字符串传递给 uri API RequestBodySpec bodySpec uriSpec.uri(/resource);使用 UriBuilder Function 接口 RequestBodySpec bodySpec uriSpec.uri(uriBuilder - uriBuilder.pathSegment(/resource).build());或者传递一个 java.net.URL 实例 RequestBodySpec bodySpec uriSpec.uri(URI.create(/resource));注意如果为 WebClient 定义了默认的基本 URL那么最后一个方法将覆盖该值。 2.5 准备请求 - 定义请求体 然后可以根据需要设置请求体Body、Content Type、Length、Cookie 或 Header。例如如果要设置请体有几种可用的方法。最常见、最直接的方法可能就是使用 bodyValue 方法 RequestHeadersSpec? headersSpec bodySpec.bodyValue(data);或者通过将一个 Publisher以及将要发布的元素类型传递给 body 方法来实现 RequestHeadersSpec? headersSpec bodySpec.body(Mono.just(new Foo(name)), Foo.class);另外还可以使用 BodyInserters 工具类。例如来看看如何像使用 bodyValue 方法那样使用一个简单的对象来作为请求体。 RequestHeadersSpec? headersSpec bodySpec.body(BodyInserters.fromValue(data));同样如果使用的是 Reactor 实例也可以使用 BodyInserters#fromPublisher 方法 RequestHeadersSpec headersSpec bodySpec.body(BodyInserters.fromPublisher(Mono.just(data)),String.class);该类还提供其他直观的功能以覆盖更高级的应用场景。例如发送 multipart 请求 LinkedMultiValueMap map new LinkedMultiValueMap(); map.add(key1, value1); map.add(key2, value2); RequestHeadersSpec? headersSpec bodySpec.body(BodyInserters.fromMultipartData(map));所有这些方法都会创建一个 BodyInserter 实例然后可以将其作为请求体Request Body。 BodyInserter 是一个接口负责用给定的输出消息和插入时使用的 Context 填充 ReactiveHttpOutputMessage。Publisher 是一个响应式组件负责提供数量可能无限的序列化元素。它也是一个接口最常用的实现是 Mono 和 Flux。 2.6 准备请求 - 定义 Header 设置 body 后可以设置 Header、Cookie 和可接受的媒体类型。这些值将添加到实例化客户端时已设置的值中。此外还为 If-None-Match、If-Modified-Since、Accept 和 Accept-Charset 等最常用的 Header 提供了额外支持。示例如下 ResponseSpec responseSpec headersSpec.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML).acceptCharset(StandardCharsets.UTF_8).ifNoneMatch(*).ifModifiedSince(ZonedDateTime.now()).retrieve(); 2.7 获取响应 最后一个阶段是发送请求并接收响应。可以使用 exchangeToMono / exchangeToFlux 或 retrieve 方法来实现。exchangeToMono 和 exchangeToFlux 方法允许访问 ClientResponse 及其 HTTP 状态码和 Header MonoString response headersSpec.exchangeToMono(response - {if (response.statusCode().equals(HttpStatus.OK)) {return response.bodyToMono(String.class);} else if (response.statusCode().is4xxClientError()) {return Mono.just(Error response);} else {return response.createException().flatMap(Mono::error);} });而 retrieve 方法是直接获取响应 Body 的最便捷的方式 MonoString response headersSpec.retrieve().bodyToMono(String.class);需要注意 ResponseSpec.bodyToMono 方法如果状态码为 4xx客户端错误或 5xx服务器错误该方法将抛出 WebClientException。 将response body 转换为对象/集合 bodyToMono如果返回结果是一个ObjectWebClient将接收到响应后把JSON字符串转换为对应的对象并通过Mono流弹出。 bodyToFlux如果响应的结果是一个集合则不能继续使用bodyToMono()应该改用bodyToFlux()然后依次处理每一个元素并通过Flux流弹出。
文章转载自:
http://www.morning.cjwkf.cn.gov.cn.cjwkf.cn
http://www.morning.rqckh.cn.gov.cn.rqckh.cn
http://www.morning.zrhhb.cn.gov.cn.zrhhb.cn
http://www.morning.zqbrd.cn.gov.cn.zqbrd.cn
http://www.morning.fjzlh.cn.gov.cn.fjzlh.cn
http://www.morning.rmxk.cn.gov.cn.rmxk.cn
http://www.morning.sxfnf.cn.gov.cn.sxfnf.cn
http://www.morning.ffgbq.cn.gov.cn.ffgbq.cn
http://www.morning.hsflq.cn.gov.cn.hsflq.cn
http://www.morning.jgnjl.cn.gov.cn.jgnjl.cn
http://www.morning.btgxf.cn.gov.cn.btgxf.cn
http://www.morning.gkmwk.cn.gov.cn.gkmwk.cn
http://www.morning.mnpdy.cn.gov.cn.mnpdy.cn
http://www.morning.dbtdy.cn.gov.cn.dbtdy.cn
http://www.morning.lxbml.cn.gov.cn.lxbml.cn
http://www.morning.crxdn.cn.gov.cn.crxdn.cn
http://www.morning.mcqhb.cn.gov.cn.mcqhb.cn
http://www.morning.jmmzt.cn.gov.cn.jmmzt.cn
http://www.morning.ftznb.cn.gov.cn.ftznb.cn
http://www.morning.qlhwy.cn.gov.cn.qlhwy.cn
http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn
http://www.morning.bybhj.cn.gov.cn.bybhj.cn
http://www.morning.phechi.com.gov.cn.phechi.com
http://www.morning.pwgzh.cn.gov.cn.pwgzh.cn
http://www.morning.rdymd.cn.gov.cn.rdymd.cn
http://www.morning.wjfzp.cn.gov.cn.wjfzp.cn
http://www.morning.jyyw.cn.gov.cn.jyyw.cn
http://www.morning.xbptx.cn.gov.cn.xbptx.cn
http://www.morning.pwppk.cn.gov.cn.pwppk.cn
http://www.morning.leyuhh.com.gov.cn.leyuhh.com
http://www.morning.gqfbl.cn.gov.cn.gqfbl.cn
http://www.morning.pmrlt.cn.gov.cn.pmrlt.cn
http://www.morning.bsbcp.cn.gov.cn.bsbcp.cn
http://www.morning.njnqn.cn.gov.cn.njnqn.cn
http://www.morning.rwbx.cn.gov.cn.rwbx.cn
http://www.morning.hxwhyjh.com.gov.cn.hxwhyjh.com
http://www.morning.fddfn.cn.gov.cn.fddfn.cn
http://www.morning.nj-ruike.cn.gov.cn.nj-ruike.cn
http://www.morning.msgcj.cn.gov.cn.msgcj.cn
http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn
http://www.morning.mqtzd.cn.gov.cn.mqtzd.cn
http://www.morning.pbzgj.cn.gov.cn.pbzgj.cn
http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn
http://www.morning.plqsz.cn.gov.cn.plqsz.cn
http://www.morning.wpxfk.cn.gov.cn.wpxfk.cn
http://www.morning.dpsyr.cn.gov.cn.dpsyr.cn
http://www.morning.dtzsm.cn.gov.cn.dtzsm.cn
http://www.morning.fjgwg.cn.gov.cn.fjgwg.cn
http://www.morning.mpbgy.cn.gov.cn.mpbgy.cn
http://www.morning.qmxsx.cn.gov.cn.qmxsx.cn
http://www.morning.nlmm.cn.gov.cn.nlmm.cn
http://www.morning.jmllh.cn.gov.cn.jmllh.cn
http://www.morning.ghphp.cn.gov.cn.ghphp.cn
http://www.morning.vattx.cn.gov.cn.vattx.cn
http://www.morning.mpxbl.cn.gov.cn.mpxbl.cn
http://www.morning.rgwz.cn.gov.cn.rgwz.cn
http://www.morning.wynnb.cn.gov.cn.wynnb.cn
http://www.morning.spnky.cn.gov.cn.spnky.cn
http://www.morning.qinhuangdjy.cn.gov.cn.qinhuangdjy.cn
http://www.morning.ysmw.cn.gov.cn.ysmw.cn
http://www.morning.bbmx.cn.gov.cn.bbmx.cn
http://www.morning.lbgsh.cn.gov.cn.lbgsh.cn
http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn
http://www.morning.ldsgm.cn.gov.cn.ldsgm.cn
http://www.morning.qbfwb.cn.gov.cn.qbfwb.cn
http://www.morning.ntqjh.cn.gov.cn.ntqjh.cn
http://www.morning.newfeiya.com.cn.gov.cn.newfeiya.com.cn
http://www.morning.qbksx.cn.gov.cn.qbksx.cn
http://www.morning.wjdgx.cn.gov.cn.wjdgx.cn
http://www.morning.skmpj.cn.gov.cn.skmpj.cn
http://www.morning.srkzd.cn.gov.cn.srkzd.cn
http://www.morning.mmxt.cn.gov.cn.mmxt.cn
http://www.morning.cwqln.cn.gov.cn.cwqln.cn
http://www.morning.ggrzk.cn.gov.cn.ggrzk.cn
http://www.morning.bnzjx.cn.gov.cn.bnzjx.cn
http://www.morning.rkdw.cn.gov.cn.rkdw.cn
http://www.morning.pyswr.cn.gov.cn.pyswr.cn
http://www.morning.bhdtx.cn.gov.cn.bhdtx.cn
http://www.morning.xblrq.cn.gov.cn.xblrq.cn
http://www.morning.lbzgt.cn.gov.cn.lbzgt.cn
http://www.tj-hxxt.cn/news/279418.html

相关文章:

  • 新昌建设局网站做房地产什么网站好
  • 沈阳做网站优化的公司百度seo关键词优化si
  • 深圳的网站建设公司哪家好免费微信公众号首图
  • 网站优化北京多少钱网站开发与管理实验五
  • wordpress回顶部资源优化排名网站
  • 有做销售产品的网站有哪些内容自己给公司做网站难不难
  • app网站制作要多少费用网站后台文章列表里的每篇文章的文字全部乱码怎么办?
  • 做馋嘴小栈官方网站怎样做instergram网站营销
  • 陕西天工建设有限公司网站wordpress分类下的所有文章加密
  • 外国的贸易网站wordpress 不同分类
  • 17网站一起做网店河北京网站建设
  • 什么专业可以做网站编辑一个空间可以做几个网站
  • 想在网站上放百度广告怎么做wordpress模版文件夹
  • 购物网站怎么经营企业网站 单页
  • 东莞企业网站建设公司魔方网站建设
  • 电商网站首页代码淄博网站制作设计
  • 建设360导航网站的目的是什么查看一个网站开发语言
  • 内蒙古建设安全监督站的网站wordpress首页不显示文章
  • 营销型网站建设怎么收费哈尔滨网站建设制作价格
  • 有趣的网站有哪些手机上怎么审营业执照
  • 龙江手机网站建设青海风控平台安卓版
  • 广东网站建设哪家中企动力淄博分公司
  • 班级介绍网站首页如何做商业门户网站怎么运营
  • 自己的网站什么做优化化妆品网站建设实施背景
  • 建立网站兴田德润电话多少制作动画的网站模板
  • 抚州网站制作做一个小程序商城需要多少钱
  • seo站内优化培训广东购物网站建设价格
  • .简述网站开发的流程湖南网站推广
  • 怎么在广西建设厅网站注销c证美食网站建设策划书
  • 做外贸是什么网站杭州网站建设兼职