请教大家一个jms集成处理问题

问题描述

需求:有系统 A, B. 用户在A中做某一业务操作时往B实时集成信息,以在B中创建审批电子流。要求:不能对同样的业务信息,创建多个电子流。若检查到已存在电子流,不能再创建电子流也必须邮件通知用户。若创建电子流成功时,必须邮件通知用户。当前方案:采用XML+JMS + 消息驱动Bean做集成。 A把业务单据信息用XML格式发送到MQ服务器, B从服务器接收后做如下处理。设计如下,首先设计表: TABLE1 主要有一个clob字段来存放XML内容, 该表的意图是,存放原始的集成内容TABLE2 XML中包含的个字段。该表的设计意图是,提供页面或直接用SQL就可查看集成的信息,并且当不满足创建电子流条件时,可标识存放一下提示信息。TABLE3 在为电子流对应为正式的业务表,基本字段和TABLE2的字段一样。处理的流程:1. 把完整XML存到表TABLE1中。2. 解析XML文件成对应的数据,并存放到表TABLE2中3. 根据某一标识检查电子流(基本是在TABLE3表中查看是否存在相同标识的记录)是已创建电子流,如是则4,否则54. 发送错误提示信息5. 创建电子流,并发送邮件现在我在考虑,1.把这些处理全放在MDBean的onMessage方法中呢,2.还是把它们分为1)在MDB中只处理1和2。2)3至5由另外一个定时调度程序来做。调度程序每隔几分钟,扫描TABLE2, 从中取出未处理的集成数据,在做3至5的动作。对于2就没那么实时,不过两三分钟还是符合要求,但定时调度每次可能就会处理多条数据,不像在接收到信息时处理那样直接,一次处理一条数据。之所以想采用第二种方式,是觉得把这些操作放再一起不大好,想把接收数据,和与接收后相关处理分开。

解决方案

这主要看接受数据到处理数据到底耗不耗时。如果放在一起比较耗时间的话可以采用异步多线程处理。B专门接受,另开单独线程专门处理。存放的数据结构可以用一个阻塞队列,如ArrayBlockingQueue。如果接受到处理并不耗时,那就没必要这样处理了,来一条处理一条比较好,启用定时器定时扫描不太好,如果同一时间的并发消息量过大,很多消息都等定时器到时间来处理的话会引起拥堵。如果处理过程中又有接口调用这时候压力就更大了,用户体验这时候就不好了。

时间: 2024-12-04 23:17:08

请教大家一个jms集成处理问题的相关文章

c++-请教:一个完整的C++程序如何提供一个接口给其他软件使用

问题描述 请教:一个完整的C++程序如何提供一个接口给其他软件使用 如题.我用C++做了一个软件,现在想提供一个dll给另一个软件使用.要如何做?是直接在这个C++程序上做接口,还是另外建一个工程来生成dll? 请教大神们啦~谢谢 解决方案 要看另一个软件是需要如何和你的程序交互. 用到你程序的一部分,那么开放dll 只是传递数据的话,提供数据传递的标准,让它自己实现 希望整体嵌入你的程序,那么你实现一个OLE Server,让它用OLE Container嵌入你的程序. 如果那个程序不在本地,

请教nutch和solr集成问题

问题描述 请教nutch和solr集成问题 最近在学习搜索引擎,按照nutch官网上的教程下载了nutch2.2.1和solr4.6.1 通过执行bin/crawl 能够在hbase数据库中看到爬虫下载的网页,但是solr 里面没有数据且没有异常,为什么呢? 请高手帮忙 注:采用nutch1.7可以成功进行索引 解决方案 可以问你个问题么,我用的nutch2.2.1 solr4.8 hadoop1.1.2 hbase0.94 ,为什么nutException in thread "main&qu

请教大家一个在虚析构函数存在时,C++虚函数表的问题

问题描述 请教大家一个在虚析构函数存在时,C++虚函数表的问题 下面是在下的代码: #include <iostream> using namespace std; class Point { private: int X; int Y; public: Point() {} Point(int x, int y) : X(x), Y(y) {} const int getX() { return X; } const int getY() { return Y; } virtual ~Poi

请教大家一个问题 ,一个可用的azure账号,用vs的服务资源管理器登陆

问题描述 请教大家一个问题 ,一个可用的azure账号,用vs的服务资源管理器登陆 请教大家一个问题 ,一个可用的azure账号,用vs的服务资源管理器登陆,提示 找不到具有该点子邮件地址的账户 解决方案 你是没有subscription吧,中文叫订阅貌似. 解决方案二: Hi, 因为中国版Azure不是使用Microsoft Account(Live ID)来验证访问权限,如果是想通过VS去管理中国版的Azure的话,我建议你尝试这篇文章中的操作:http://www.cnblogs.com/

请教大家一个问题 如何查看azure vm是否已绑定DIP 谁知道啊,急急急

问题描述 请教大家一个问题 如何查看azure vm是否已绑定DIP 谁知道啊,急急急 请教大家一个问题 如何查看azure vm是否已绑定DIP 谁知道啊,急急急 解决方案 参考这篇文章 为 Azure虚拟机配置静态内部 IP 地址 (DIP) http://www.mamicode.com/info-detail-410735.html 解决方案二: Hi, 如果你是困惑是否已经为虚拟机执行了绑定DIP操作,你可以参考"PB人生"的回复去azure门户网站记录下虚拟机的内部IP,然

mfc求助-请教大家一个《深入浅出mfc》里关于CRuntimeClass的问题

问题描述 请教大家一个<深入浅出mfc>里关于CRuntimeClass的问题 enter code here #0001 #include ""my.h"" #0002#0003 extern CMyWinApp theApp;#0004#0005 static char szCObject[] = ""CObject"";#0006 struct CRuntimeClass CObject::classCObj

请教大家一个问题,如何将主机上的IP绑定到不同的网站上面,谢谢

问题描述 请教大家一个问题,如何将主机上的IP绑定到不同的网站上面,谢谢 解决方案 解决方案二:登录到域名的控制台,把要绑定的IP添加到相应的域名解析记录里就好了

sdk-本人新手,请教老鸟一个Android studio的support问题。问题可能问得也不对~请轻喷。

问题描述 本人新手,请教老鸟一个Android studio的support问题.问题可能问得也不对~请轻喷. Android studio更新了6.0的SDK后,先选择6.0建了个项目,然后删掉了.之后选择4.3作为minimum SDK后,新建的项目中出现了v7 support的语句,WHY?是版本间的问题吗?此类问题该如何解决? 解决方案 4.3需要用只有6.0才有的新特性不得不加入v7 support的支持包 解决方案二: 这个设置minSdk为11同样也会出现,貌似是默认的!著作权归作

c++-请教MFC一个ERASEBKGROUND函数的问题

问题描述 请教MFC一个ERASEBKGROUND函数的问题 BOOL C用完删3Dlg::OnEraseBkgnd(CDC* pDC) { CBrush* oldbru = pDC->SelectObject(&bru); pDC->Rectangle(rect); pDC->SelectObject(oldbru); return CDialogEx::OnEraseBkgnd(pDC); } rect和bru都在INITDIALOG里面定义了,请问下这样写调试运行之后为什么