关于接口并发问题,webservice,等http请求

Posted 廿二又

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于接口并发问题,webservice,等http请求相关的知识,希望对你有一定的参考价值。

暂且不谈高并发 只谈并发  .

不想丢请求再去考虑高并发 MQ或redis的事(这里不考虑)

正题.记录自我需求处理并的情况.

公司的一个框架(一种商业框架很庞大)无法使用整合市面上那些较新的技术框架,只能使用基础的java工具

这里的接口是一个模块 是webservice的

外部系统调用这个接口 重复写入 数据出现重复单据.故对此问题进行解决.

分析:

1.外部系统短时多次提交重复数据 

2.接口系统业务复杂 处理数据用时过长,导致数据积压 .数据脏读.

/**
 * 产成品入库单
 * @author Administrator
 *
 */
public class GetIcFinprodin 
	
	
	private static final Integer JP = 127;//同步对象标识

	public String getExecute(String operation,String orderform)
		String resultstr=null; 
		if (operation.equals("Insert"))
			//插入
			resultstr = insert(operation, orderform);
			
		
		
		return resultstr;
	
	
	/**
	 * 插入 
	 * @param operation
	 * @param orderform
	 * @return
	 */
	public String insert(String operation,String orderform)
		


		Boolean flag = true;//默认通过
		
		
		synchronized(JP) 
			
			//通过mes单据号查询单据是否存在 不存在就可以插入否则返回已插入提示
			if(StringUtils.isNotBlank(vdef1) )
				try 
					BaseDAO bd = new BaseDAO();
					String vbillcodeExist = (String)bd.executeQuery("select vbillcode from ic_finprodin_h where vdef1 = '"+vdef1+"'", new ColumnProcessor());
					if(StringUtils.isNotBlank(vbillcodeExist))
						flag = false;//已存在不允许重复插入
					
				 catch (DAOException e) 
					e.printStackTrace();
				
			
			
		
		
			if(flag)
                //业务===========....耗时代码段   S
				GetXChangeService gtxchangeservice=new GetXChangeService();
				
				Object ovbillcode = "";
				
				JSONObject backinfojson=gtxchangeservice.getXChangeservice(xml_sb.toString());
				if(backinfojson.getString("$successful").equals("Y"))
					String pk=backinfojson.getJSONObject("sendresult").getString("content");
					BaseDAO bd = new BaseDAO();
					try 
						//获取插入的订单单号  
						ovbillcode = bd.executeQuery("select vbillcode from ic_finprodin_h where cgeneralhid ='"+pk+"'", new ColumnProcessor());
						
						backinfojson.put("$vbillcode", ovbillcode);
					 catch (Exception e) 
						e.printStackTrace();
					
				//业务.-===========...耗时代码段    E	
					
				else if(backinfojson.getString("$successful").equals("N")) 
					backinfojson.put("$vbillcode",ovbillcode);
					
				
				
				return backinfojson.toJSONString();
			else
				JSONObject backinfojson = new JSONObject();
				backinfojson.put("$successful", "Y");
				backinfojson.put("sendresult", vdef1+" MES单据已存在,单据已插入成功!");
				return backinfojson.toJSONString();
				
		
	
	
   

JP 标识使用  基本类型 或String 类型(注意不能new  这里是java基础的东西,可了解一下 )  作为同一对象   保证线程同步 有兴趣的可以把 127 改成128 试试效果 估计你能找到答案

同步之后性能会下降,做个取舍吧.

以上是关于关于接口并发问题,webservice,等http请求的主要内容,如果未能解决你的问题,请参考以下文章

关于接口并发问题,webservice,等http请求

关于webservice的那个问题是怎么解决的?连接超时

关于,java-webservice接口,根据服务端,自动生成客户端调用时,响应时间慢

关于接口测试,我们需要知道的

webservice接口收不到数据,提示传输成功

关于 wsdl2Java 自动生成客户端调取webservice接口