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

制作公司网站价格网站建设网站形象

制作公司网站价格,网站建设网站形象,西安企业管理咨询有限公司,百度搜索量最大的关键词背景 【MQ】一套为海量消息和高并发热点消息#xff0c;提供高可用精准延时服务的解决方案 我现在有一个需求#xff0c;就是监听 RabbitMQ 一个延时交换机的消息数#xff0c;而 RabbitTemplate 是不存在对应的方法来获取的。 而我们在 RabbitMQ 的控制台却可以发现延时交…背景 【MQ】一套为海量消息和高并发热点消息提供高可用精准延时服务的解决方案 我现在有一个需求就是监听 RabbitMQ 一个延时交换机的消息数而 RabbitTemplate 是不存在对应的方法来获取的。 而我们在 RabbitMQ 的控制台却可以发现延时交换机的消息数所以其开放的 http-api 里存在我们需要的数据通过抓包可得 而我们查看这个包构造请求抓包分析的技巧这里不做介绍 当然你完全可以去看 RabbitMQ 的 http-api 开放文档但是我觉得有点多还不如直接抓包 URL http://rabbithost:15672/api/exchanges/{virtualHost}/{exchange}?msg_rates_age60msg_rates_incr5 Method GET Header Authorization: Basic EncryptUtil.encodeBase64(String.format(%s:%s, rabbitMQConfig.getUsername(), rabbitMQConfig.getPassword())); 很快我们就能写一个 OpenFeign 客户端 FeignClient(name rabbitmq-service, url ${okr.mq.http-api}) public interface RabbitMQHttpFeignClient {GetMapping(/exchanges/{virtualHost}/{exchange}?msg_rates_age60msg_rates_incr5)DelayExchangeVO getMessagesDelayed(RequestHeader(HttpHeaders.AUTHORIZATION) String authorization,PathVariable(virtualHost) String virtualHost,PathVariable(exchange) String exchange);} 但是你会发现virtualHost 是带 / 的但是最终的 url 并没有转义导致路由出错报了 404 400 是参数未通过验证、401 未通过身份认证、403 无权限 先说结论 配置一个 Contract 协议约定并设置 decodeSlash 为 false Component public class OpenFeignConfig {Beanpublic Contract notdecodeSlashContract(){// 无自定义处理器、默认的 ConversionService、取消 %2F - / 的解码return new SpringMvcContract(Collections.emptyList(), new DefaultConversionService(), Boolean.FALSE);}}decodeSlash直译就是“斜杠解码” encode: / → %2F decode: %2F → / 而我们就是阻止 %2F → / 那我们为什么要阻止呢 问题分析 首先我们可能会想它是如何转义的是传入的时候转义还是最终一起转义 如果是最终一起转义那 / 必然不能被转义否则那些路由都会失效所以如果是最终转义无法满足我们的需求 这里写了个简单的方法方便理解 public static P String buildUrl(String baseUrl, MapString, ListString queryParams, MapString, P pathParams) {queryParams Optional.ofNullable(queryParams).orElseGet(Map::of);pathParams Optional.ofNullable(pathParams).orElseGet(Map::of);return UriComponentsBuilder.fromHttpUrl(baseUrl).queryParams(new LinkedMultiValueMap(queryParams)).buildAndExpand(pathParams).encode() // 开启译码模式.toUriString(); }如果在传入的时候转义才能实现我们的效果 public static P String buildUrl(String baseUrl, MapString, ListString queryParams, MapString, P pathParams) {queryParams Optional.ofNullable(queryParams).orElseGet(Map::of);pathParams Optional.ofNullable(pathParams).orElseGet(Map::of);return UriComponentsBuilder.fromHttpUrl(baseUrl).encode() // 开启译码模式这里之后路径参数/ 也会被转义为 %2F.queryParams(new LinkedMultiValueMap(queryParams)).buildAndExpand(pathParams).toUriString(); }那 OpenFeign 是哪种呢如果我们没看源码我们可能没法判断但我们可以知道OpenFeign 在解析路径参数的时候用的是 PathVariableParameterProcessor 参考文章文章 通过自定义注解 自定义处理器的方式处理请求我们通过 data.indexToExpander().put(context.getParameterIndex(), o - URLEncoder.encode(String.valueOf(o), Charset.defaultCharset()); 我们给 {name} 对应的 index 提供了一个解析器但是貌似没啥用如果进行双重编码导致 % 也也被转义了但如果只是一重编码最终 / 还是以 / 的形式出现 这一度让我觉得是玄学 但我对比了 PathVariableParameterProcessor 类的实现发现其并没有专门对字符串进行编码所以我猜测底层是定然编码了的所以我进行了调试一步步找到了关键代码 你会发现如果传入 / 会被转义成 %2F 也就是说传入时确实已经编码了你甚至可以实现传入 %2F 但并设置其已编码所以不会再次编码等等无论如何各种方式让字符串为 %2F 但是这里有一个属性 encodeSlash如果为 false则将最终结果的 %2F 给重新解码成 / 说实话我完全不知道为啥要这样太放剑了如果是路径参数也是个 uri也有这样的编程方式但是我觉得很不规范 这也是我不熟悉 SpringMvcContract 导致的啦不知道还有这么一个参数 decodeSlash new SpringMvcContract(Collections.emptyList(), new DefaultConversionService(), false) decodeSlash 设置为 false 后encodeSlash 就为 true%2F 就不会重新解码成 / 了最终也就能达到我们的预期的效果了
http://www.dnsts.com.cn/news/235876.html

相关文章:

  • 做创意网站网站平台建设策划
  • 网站免费优化工具网络架构模拟器
  • 网站设计做图工具wordpress 手机网站支付宝
  • 如何给国外网站做seo唐山网站建设七彩科技
  • 学校网站建设主要成绩网站开发开题报告引言
  • 长沙网站推广公司智慧门店管理服务平台
  • 东莞商城网站建设哪家便宜佛山网站制作哪个好薇
  • 网站定制方案小程序哪家好
  • 网站建设的需求怎么写中小型企业 公司网站建设
  • 乐清有那些网站福安市住房和城乡建设网站
  • 个人电影网站建设crm订单管理系统
  • 品牌网网站建设公司哪些网站做任务可以赚钱的
  • 深圳市建设局科技处网站爱站网反链分析
  • php网站开发wamp网站admin后台界面模板
  • 邦策网站建设外贸公司的网站怎么做
  • 云南城市建设培训中心网站湛江市品牌网站建设怎么样
  • 怎么做货物收发的网站学网站建设语言
  • 山西建设网站如网站性质为公司 请以企业备案
  • 深圳建站公司设计深业集团商城小程序多少钱
  • 旅游投资公司网站建设成都91获客营销中心
  • 用凡科做的手机网站版如何建立网站平台的步骤
  • 甘肃省省经合局网站建设的通知开发区建设业联合会网站
  • 网站布局软件如何在wordpress首页显示文章列表
  • 贵阳有哪家做网站建设好点的定制网络开发软件
  • 三统文化传播网站西安制作公司网页多少钱
  • 米特号类似网站用公司的信息做网站违法吗
  • 佛山网站建设计医疗类网站前置审批
  • 襄阳网站seo建设银行国际互联网网站是什么
  • 百度网站审核期时间做教育app的网站有哪些内容
  • 自己网站wordpress主题怎么房地产开发公司有哪些部门