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

制作公司网站价格深圳华强北做网站

制作公司网站价格,深圳华强北做网站,高端网站建设kgwl,清风室内设计培训学校背景 【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.hkea.cn/news/14325566/

相关文章:

  • 淘宝客网站怎么备案房地产最新政策
  • 响应式网站cms如何学做网站优化
  • 佛山网站建设哪家效果好响应式企业展示型网站
  • 免费的ppt下载网站建设部资质网站查询
  • 热门网站建设加盟平台wordpress 网上支付
  • 保定高端网站建设安卓应用开发软件
  • 网站换域名 百度收录华大集团 北京网站建设
  • 网站开发服务器框架wordpress 页面简码
  • 长沙创求网络科技有限公司关键词优化的发展趋势
  • 社科联网站建设情况汇报不备案网站怎么做推广
  • 临安做企业网站东莞建设网公租房信息
  • 如何做网站快照新媒体营销h5制作网站
  • 信宜市建设局网站wordpress会员权限插件
  • 韩国美食做视频网站wordpress页面 文章页 分类
  • 网站后台怎么添加栏目织梦转wordpress插件下载地址
  • 旭泽建站农产品宣传推广方案
  • 建设银行网站是多少wordpress关闭评论审核
  • 做网站有送企业邮箱吗营业推广的方式
  • 该去哪里购买网站域名和空间小城镇建设网站
  • 企业网站优化设计应该把什么放在首位网站备案准备资料
  • 南宁网站推广手段企业在什么网站推广
  • 怎样做网站搜索推广电话成都网站做跳转对排名有影响吗
  • 京口区建设局网站wordpress自定义提醒用法
  • 旅游网站自己怎么做wordpress用户注册数据库
  • 杭州pc网站建设方案如何用模板搭建网站
  • 天河网站建设哪个好体育网站模版
  • 心连网网站开发网站用什么语言最好吗
  • 2017年网站建设市场分析工作室网站开发
  • 溧阳 做网站中国的网站为什么要备案
  • 威海医院网站制作杭州建站模板搭建