接上一部分.
一, 需求:
每隔5分钟从photo表中把状态为I的图片用base64加密发送到ODM系统,同时把图片状态更改为P.
每隔2小时,把状态为P的图片进行重发.
每隔5分钟从ODM系统获取图片处理的状态,如何成功更新状态为A,失败更新为E,相应记录异常原因.
二, 架构:
我们的消息传递是通过JMS实现的,连接设置如下:
图片是通过base64处理的,使用dom4j生成相应的消息格式
备注: 经过base64处理后文件会加大33.3%
三, 准备工作:
1), wlclient-12.1.3.jar(通过weblogic生成)
2), 发送message的格式样例
3), 所需的URL及相应的queue
4),确认是否有访问权限(telnet address port)
四, 实现步骤:
1), 数据库端实现. 查询图片与更新图片状态的2个功能
2), java端根据传入的参数生成message, 发送到已配置好的jms服务器
3), 把相应的java工程代码打包成SendPhoto_0.0.1.jar
4), 编写shell脚本.
i: 获取数据库链接
ii: 获取图片相关信息
iii: 调用SendPhoto_0.0.1.jar发送图片
参数: job_id, creation_time, path_photo, ........
5), java端连接JMS获取信息,打印图片相应的信息(job_id,doc_id, status, err_code)
6), 把相应的java工程代码打包成PhotoStatus_0.0.1.jar
7), 编写shell脚本.
i: 获取数据库链接
ii: 调用PhotoStatus_0.0.1.jar获取图片处理结果信息
iii: 根据打印信息调用相应的存储过程更新图片状态
8), 编写crontab 每5分钟执行一次脚本
备注: 代码存于网盘/darren/projects/odm
五, 问题汇总:
1), JMS的queue中未收到message.
可能原因:地址及queue是否正确; message格式是否正确,节点要一致; JMS监听是否开启.
2),message中没有base64的图片信息
可能原因: 图片确实不存在; 图片名称中有空格或特殊字符导致参数紊乱,无法找到图片.
3), message中job_id过长,导致ODM组处理异常以致无任何返回值.
4), message短时间内大批量重复发送,导致JMS崩溃.
描述: JMS中设置了对message的achive的时间为1h, 短时间大批量的重复文件,超出JMS处理范围引发瘫痪. 解决方案是对于没有回应的message,延长重复时间至2h(之前为5m),当JMS achive完成后再重发就不会有类似问题.
5). 手动shell脚本可以执行,但是用了crontab无法执行.
原因: shell脚本中调用jar包没有写全路径,导致无法找到jar包
6), 工程中对于有处理异常的消息没有及时突出,导致卡顿,无法进行下一个消息的发送
解决方案:无论何种异常,要及时记录异常信息及相应退出
7), message的生成跟发送放在同一个工程里,这会导致重用性低.
六, 部分代码
发送图片:
// step1: read args and generate message object
GXDMessage message = parseArgs(args);
log.info("start pusher: "+message.getFileName());
// step2: read configure property file and prepare to connect to odm
final QueueUtilsConfiguration config = MQPusher
.loadProperties(ApplicationConstant.CONFIG_PATH);
// step3: connect to odm server and send message
MQPusher.sendPicture(config, message);
cod of method : sendPicture
/**
* send picture to scintilla message queue
*
* @param config : the configure of server
* @param message: gxd message
*/
public static void sendPicture(QueueUtilsConfiguration config,
GXDMessage message) {
JMSHelper jmsHelper = null;
try {
//step 1: initialize class JMSHelper
jmsHelper = new JMSHelper(config.getInitialContextFactory(),
config.getProviderUrl(), config.getJndiConnFactory(),
config.getMqHostUser(), config.getMqHostPw(),
config.getJndiQueue());
} catch (Exception ne) {
log.error("send message failed. Details:" + e.getMessage());
System.exit(1);
}
try {
//step2: covert object to odm message.
String msg = XMLBuilder.BuildXMLDoc(message).asXML();
//step3: send message
jmsHelper.send(msg.getBytes());
//step 4: close queue, session and connect.
jmsHelper.close();
} catch (JMSException e) {
log.error("sending message failed. Details:" + e.getMessage());
System.exit(1);
} catch (NamingException e) {
log.error("close session and conection failed. Details:"
+ e.getMessage());
System.exit(1);
}
}
code of watcher :
// load properties
final QueueUtilsConfiguration config = MQWatcher
.loadProperties(ApplicationConstant.CONFIG_PATH);
// receive message
MQWatcher.receive(config);
相关推荐
供应链价格上涨对于ODM厂商而言是一个利好因素,因为品牌厂商寻求与ODM厂商合作以分担风险。 闻泰作为全球最大的手机ODM厂商,其出货量远远领先于其他厂商。闻泰公司的业务布局包括三个研发中心和一个生产基地,...
#### ODM的基本组件:对象与对象类 ODM的核心由对象类和对象构成。对象类可以被视为具有特定属性和行为的一组对象的集合,而对象则是这些类的具体实例。例如,一个对象类可能代表系统中的某种设备类型,而该类下的...
#### 二、ODM的作用与特点 1. **数据管理:**ODM提供了一种灵活的数据管理机制,允许用户以对象的形式存储和检索信息。 2. **简化配置:**对于复杂的系统配置任务,ODM能够帮助简化流程,提高效率。 3. **安全性高...
MongoDB的ODM(Object-Document Mapping)是用于将数据模型与MongoDB文档数据库之间的映射技术,使得开发者可以用面向对象的方式来操作数据库,而无需直接处理底层的BSON文档。在PHP中,ODM框架可以帮助我们更高效、...
第二部分:ODM业务模式与经济学u曲线 经济学u曲线是指产品的生命周期中,需求和价格之间的关系曲线。ODM业务模式可以帮助企业更好地理解和预测产品的需求和价格,提高产品的生产和销售效率。 第三部分:ODM海外...
odm-v2.2.250.rar
ODM8.6与WAS的集成主要涉及在WAS上配置和管理ODM的各个组件,如决策中心(DC)、决策服务(DS)和运行时环境(RTE)。这些组件需要在WAS上创建并配置相应的应用程序服务器,以便能够正确处理ODM的工作流程和业务规则。 2...
在IBM的产品线中,ODM 与其他工具和解决方案有很好的整合性,比如与其他IBM的业务流程管理工具、企业服务总线(Enterprise Service Bus,ESB)和云服务等。这为IBM ODM 用户提供了灵活性,可以根据企业现有的IT基础...
在这个"Laravel开发-odm"项目中,我们专注于将MongoDB的ODM功能与Laravel框架集成,以便更好地实现数据存储和检索。 Laravel框架本身主要设计用于SQL关系型数据库,但随着NoSQL数据库的普及,特别是MongoDB这样的...
ONVIF,ONVIF Device Manager,odm
录像机ODM整机工具NVRBoxTestTool是一款专为录像机原始设备制造商(ODM)设计的测试软件,主要用于确保NVR(Network Video Recorder,网络视频录像机)产品的功能完整性、性能稳定性和兼容性。在开发和生产过程中,...
在实际应用中,AIX 管理员通常会利用 ODM 来管理硬件设备、文件系统、网络配置等,通过编写脚本或使用工具(如 `odmget`、`odmmod` 和 `odmdelete` 命令)来交互式地操作 ODM 数据库。了解和熟练掌握 ODM 管理对于...
二、经销范围 经销范围条款规定了乙方对甲方的独家销售权利。这意味着在协议规定的授权范围内,乙方所制造的产品只授权给甲方独家经销。此外,甲方拥有决定是否使用自有商标进行销售的权利,以及指定代理商或分销商...
而"Laravel开发-laravel-odm"这个主题聚焦于Laravel与MongoDB的集成,MongoDB是一种非关系型数据库(NoSQL),以其灵活性、高性能和可扩展性在大数据时代脱颖而出。 Laravel 4引入了门面(Facade)和服务容器等概念...
4. 日志记录:Onvif Device Manager记录与设备交互的日志,这对于排查故障和优化设备性能非常有帮助。 5. 实时预览:用户可以直接在软件中查看设备的实时视频流,方便监控和调试。 提到的服务器模拟器...
电子制造服务(EMS)与原始设计制造商(ODM)是电子制造业中的重要组成部分。这两种模式在供应链管理、产品设计与制造、以及市场策略等方面扮演着关键角色,它们为各种电子产品的生产提供了灵活而高效的支持。 首先...
4. **产品一致性**:规定ODM产品在批量生产过程中应保持与认证样品的一致性,防止出现质量问题。 5. **监督与检查**:CNCA可能对ODM企业的生产现场进行定期或不定期的监督和检查,以验证其是否持续满足认证要求。 ...
3. **任务调度与管理**:ODM具有任务管理功能,可以暂停、恢复、删除下载任务,并能按优先级进行排序。用户还可以设置下载限速、定时下载等,以适应不同的使用场景。 4. **断点续传**:如果下载过程中因网络问题...
1. **手机出货量与ODM市场动态** 全球智能手机出货量呈现稳定态势,预计在14亿部左右。尽管整体市场增长缓慢,但ODM机型的出货量却呈现出上升趋势。随着5G时代的到来,ODM行业将迎来新的变化。2019年5G手机出货量约...