I/O error on POST request for “/share-arch-XXXX/XXX“:

代码:

    @Autowired
	RestTemplate restTemplate;

    @Override
	public void routingInspection(String taskID) {
		//循环请求status接口,当状态为完成时请求url接口
		String statusUrl = TASK_EXEC_STATUS_URL + "?taskid=" + taskID;
		String resultUrl = TASK_EXEC_RESULT_URL + "?taskid=" + taskID;
		RoutingInspectionVO routingInspectionVO = new RoutingInspectionVO();

		Timer timer = new Timer();
		timer.scheduleAtFixedRate(new TimerTask() {
			int execCount = 0;//记录执行次数,超过5次停止
			@Override
			@Transactional
			public void run() {
				//定时任务执行次数超过5次则停止任务
				if(execCount >= 5){
					timer.cancel();
					return;
				}
				execCount += 1;

				ResponseEntity<String> forEntity = null;
				JSONObject body = null;

				try {
					logger.info("巡检查询状态地址:"+ statusUrl);

					forEntity = restTemplate.getForEntity(statusUrl, String.class);//请求自动化执行状态
					body = JSONObject.parseObject(forEntity.getBody());
					logger.info("巡检查询状态返回报文:"+body);

					if (forEntity.getStatusCode().value() == 200){
						assert body != null;
						JSONObject var = body.getJSONObject("result");
						String status = var.getString("status");
						if("COMPLETE".equals(status)){
							String caseCount = var.getString("caseCount");
							String passrate = var.getString("passrate");
							routingInspectionVO.setPassrate(passrate);
							routingInspectionVO.setCaseCount(caseCount);
							routingInspectionVO.setStatus(status);

							logger.info("巡检查询url地址:"+ resultUrl);
							ResponseEntity<String> reportEntity = null;
							JSONObject resultBody = null;
							try {
								reportEntity = restTemplate.getForEntity(resultUrl, String.class);//请求自动化执行结果
								resultBody = JSONObject.parseObject(reportEntity.getBody());
								logger.info("巡检查询URL返回报文:"+resultBody);

								if (reportEntity.getStatusCode().value() == 200) {
									JSONObject result = resultBody.getJSONObject("result");
									Object share_url = result.get("share_url");
									StringBuilder url = new StringBuilder();
									if (share_url instanceof String) {
										url.append(result.getString("share_url"));
									} else if (share_url instanceof JSONArray) {
										JSONArray array = JSONArray.parseArray(share_url.toString());
										for (Object o : array) {
											url.append(o.toString()).append(",");
										}
									}
									routingInspectionVO.setShare_url(url.toString());
								}
								//发送事件总线消息:
								String data = JSON.toJSONString(routingInspectionVO, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteDateUseDateFormat);
								EventBus build = EventBus.builder()
										.specversion("1.0")
										.type("routing-inspection")
										.source("IQAM")
										.subject("MS")
										.id(UUID.randomUUID().toString())
										.time(ZonedDateTime.now(ZoneOffset.UTC).toString())
										.datacontenttype(MediaType.APPLICATION_JSON_VALUE)
										.data(data)
										.build();
								String params = JSON.toJSONString(build, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteDateUseDateFormat);
								logger.info("巡检发布时间总线参数列表:{}", params);
//								try {
									logger.info("发送巡检的事件总线的地址是:{}",routing_inspection_EB);
									ResponseEntity<Object> objectResponseEntity = restTemplate.postForEntity(routing_inspection_EB, params, Object.class);
									logger.info("冒烟失败发布事件总线消息返回结果:{}", JSONObject.toJSONString(objectResponseEntity));
//								} catch (RestClientException e) {
//									throw new RuntimeException(e);
//								}
								logger.info("------巡检任务查询执行完毕---------任务中止!");
								timer.cancel();
							} catch (RestClientException e) {
								logger.error("巡检查询异常:{}",e.getMessage());
								timer.cancel();
							}
						}
					}
				} catch (RestClientException e) {
					logger.error("巡检查询异常:{}",e.getMessage());
					timer.cancel();
				}
			}
		},0,30*1000);//每30秒行一次
	}

代码是要在接口被触发后,循环调用查询MS接口的状态,完成以后发送MS的结果至事件总线上:

在使用restTemplate请求的时候报错:

I/O error on POST request for "/share-arch-eventbridge.prd.XXX.local/XXX/22/XXX": null; nested exception is org.apache.http.client.ClientProtocolException

复制出来使用postman请求了这个地址是可以的,直接在页面上请求这个地址也是可以的

找了很久,后来对比了其他发送这个地址地址的地方,发现其他地方在前面添加了http://

我这个直接是域名开始的地址,刚开始隔壁的同事说域名确实可以不加http://

事实证明还是需要加的哈,周一找到了周三,问豆包豆包说是timer的问题,说是再timer里面无法使用restTemplate,改了好几种方式,但其实不是,记录一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值