微服务的feign使用

在微服务spring cloud中为什么使用feign?
1,可以直接用浏览器访问,是一个伪http客户端。
2,可以实现负载均衡,一个挂掉了,另一个可以继续用
3,熔断功能,比如发现A服务挂掉,就会立马返回失败信息
不用设置超时,不用配置。不会造成并发等待。

当我在做物流订单释放资源时,使用了feign,当订单删除时,应该释放本平台订单号。

/**
	 * 删除物流订单
	 * @param env
	 * @param id
	 * @throws Exception
	 */
	@Override
	public void delete(ClientEnvironment env, String order_id) throws Exception {
		// 系统当前时间
		Date day = new Date();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		UFDateTime ufDateTime = new UFDateTime(df.format(day));
		// 获取当前用户
		String name = env.getCurrUser().getEnterprise_name();
		OrderLogisticsVO vo = (OrderLogisticsVO) dao.findByPrimaryKey(OrderLogisticsVO.class, order_id);
		vo.setModified_time(ufDateTime);
		vo.setModifier(name);
		this.beforeDelete(env, OrderLogisticsVO.class);
		dao.deleteByPK(OrderLogisticsVO.class, order_id);
		// 判断货源是否本平台订单
		if(vo.getIs_platform_order() != 2) {
			return;
		}
		iOrdercenterService.releaseOrder(vo.getIs_order_type(), vo.getOrder_code());
	}

但是每次我删除订单以后,订单号并没有清空为null。然后我就去看了我的sql’语句

/**
	 * 物流释放订单
	 * 
	 * @param is_order_type 订单类型 1: 挂牌 2:竞价
	 * @param order_code    订单编码
	 */
	@Override
	public void releaseOrder(Integer is_order_type, String order_code) throws Exception {
		dao.getParams().add(order_code);
		// 判断是挂牌还是竞价
		if (is_order_type == 1) {
			dao.executeUpdate(" update li_order_center set source_id = null where order_code = ? ");
		}
		if (is_order_type == 2) {
			dao.executeUpdate(" update li_order_price set source_id = null where order_code = ? ");
		}
	}

检查一遍觉得updat语句没有问题。接下来就去检查了查询语句,

String sql = "select * from li_order_center where order_state = 3 and dr = 0 and (source_id is null or source_id ='' ) and ((sales_unit_id=? and sales_corp_code like ?)or(bug_customer_id =? and buyer_corp_code like ?))";

接下来去看日志

**update li_order_center set source_id = null where order_code ='WLD20190808008' ");**
执行耗时:1毫秒
2019-08-12 11:31:58.511 INFO  [http-nio-8087-exec-3] [et.common.dao.impl.SuperDAOImpl] [(execute:367)] - 符合条件的记录数为:0

看见日志后发现sql没执行,我就以为是事务回滚了。找了半天的rollback。
后来去数据库运行了sql,才发现order_code是物流订单编码, 应该是挂牌或竞价的编码
最后把order_code改成存储订单编码的字段make_order_num。就释放成功了!

iOrdercenterService.releaseOrder(vo.getIs_order_type(), vo.getMake_order_num());

一定要根据日志排查问题,不要乱猜测。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值