微服务的feign使用

本文探讨了Feign在SpringCloud微服务架构中的作用,包括其作为HTTP客户端的功能、负载均衡及熔断机制。通过具体案例,详细分析了使用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());

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

提供的引用内容中未提及微服务Feign进行内存填充的原理及方法相关信息。 Feign是一个声明式的HTTP客户端,它的主要作用是简化HTTP API的调用。一般来说,Feign会根据定义的接口和注解来生成代理对象,当调用接口方法时,Feign会将其转换为HTTP请求并发送到目标服务。 从原理上看,Feign基于Java的动态代理机制。当定义一个Feign客户端接口时,Feign会在运行时为这个接口生成一个代理类。这个代理类会处理接口方法的调用,并将其转化为HTTP请求。在请求过程中,Feign会根据接口方法上的注解(如`@GetMapping`、`@PostMapping`等)来确定请求的URL、请求方法、请求参数等信息。 在使用方法上,通常需要以下步骤: 1. 添加依赖:在项目的`pom.xml`中添加Feign的依赖。 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 2. 启用Feign:在主应用类上添加`@EnableFeignClients`注解。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableFeignClients public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 3. 定义Feign客户端接口:创建一个接口,并使用`@FeignClient`注解指定服务名。 ```java import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient(value = "your-service-name") public interface YourFeignClient { @GetMapping("/your-api-path") String yourApiMethod(); } ``` 4. 使用Feign客户端:在需要调用远程服务的地方注入Feign客户端接口。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class YourController { @Autowired private YourFeignClient yourFeignClient; @GetMapping("/test-feign") public String testFeign() { return yourFeignClient.yourApiMethod(); } } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值