cxf 生成soap_如何在cxf中获取soap报文,工作中

本文介绍了如何在CXF中生成并发送SOAP报文。通过单独的线程池和连接池实现并发下发,SOAP报文读取线程将文件映射到内存并批量放入下发队列。每个线程等待信号量,获取数据后构建任务发送到网元,同时处理响应,保存失败的报文并记录成功日志。连接池管理会话连接,采用状态模式和锁机制确保并发安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

匿名用户

1级

2016-07-12 回答

1. 单独建立线程池,线程池中的所有工作线程从线程池任务队列中读取任务,启动SOAP报文下发工作。

2. 建立连接池,线程池中线程从连接池获取一个连接将SOAP报文下发到网元上。

3. 其他线程:SOAP报文读取线程,将生成的SOAP报文文件映射到内存文件,每次读取1w条数据到SOAP报文下发队列,SOAP下发队列数据结构进行

封装,添加信号量,每次数据push_back一条信号量递增

SOAP报文下发线程,独立的线程从SOAP报文下发队列中取数据,等待下发队列的信号,如果有信号则从队列中取数据,构建下发任务

将下发任务压入线程池工作任务队列,同时信号量递减1

SOAP报文保存线程,SOAP报文下发后会收到网元的响应报文,解析模块分析响应报文,获取SOAP发送报文的执行结果,并将执行失败

的SOAP报文进行保存,对执行成功的报文写入日志。

4. 连接池:连接池工厂,连接池,连接器实体

连接池工厂建立连接池名称和连接池实例的映射,管理所有连接池。

连接池管理所有会话连接(IOSession),建立空闲会话队列和使用会话队列,如果空闲队列为空,同时又有新的连接请求,则建立一条新的连接。

连接数不能超过最大连接数,如果已经达到最大连接数,则进入等待状态,当空闲队列空状态取消

AttachHttpHeader() // 附加Http报头

DetachHttpHeader() // 获取Http响应报头

PraseHttpHeader(); // 解析Http响应报头

队列采用状态模式,空闲状态

队列包含一个事件,类型转换操作符到事件句柄,当空闲队列为空时,事件变为无信号状态,当变为非空时变为有信号状态。每次出现这种状况都要写日志信息。

加锁时要用自动锁,将锁包装在一个局部变量中,防止死锁的发生。

CMultiLock包装多个同步对象

CSingleLock包装单个同步对象

CSingleLock singleLock(&m_CritSection); // 包装一个临界区

singleLock.Lock(); // 尝试给共享资源加锁

if (singleLock.IsLocked()) // 判断共享资源是否被锁住

{

// 开始使用共享资源

// 使用结束,释放共享资源使用权

singleLock.Unlock();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值