weixin_42498612 2012-03-18 16:33
浏览 202
已采纳

请教大家一个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,否则5
    
  4.  发送错误提示信息
    
  5.  创建电子流,并发送邮件
    

现在我在考虑,

1.把这些处理全放在MDBean的onMessage方法中呢,

2.还是把它们分为

1)在MDB中只处理1和2。

2)3至5由另外一个定时调度程序来做。调度程序每隔几分钟,扫描TABLE2, 从中取出未处理的集成数据,在做3至5的动作。

对于2就没那么实时,不过两三分钟还是符合要求,但定时调度每次可能就会处理多条数据,不像在接收到信息时处理那样直接,一次处理一条数据。之所以想采用第二种方式,是觉得把这些操作放再一起不大好,想把接收数据,和与接收后相关处理分开。

  • 写回答

1条回答 默认 最新

  • Aronlulu 2012-03-18 17:34
    关注

    这主要看接受数据到处理数据到底耗不耗时。如果放在一起比较耗时间的话可以采用异步多线程处理。
    B专门接受,另开单独线程专门处理。存放的数据结构可以用一个阻塞队列,如ArrayBlockingQueue。

    如果接受到处理并不耗时,那就没必要这样处理了,来一条处理一条比较好,启用定时器定时扫描不太好,如果同一时间的并发消息量过大,很多消息都等定时器到时间来处理的话会引起拥堵。如果处理过程中又有接口调用这时候压力就更大了,用户体验这时候就不好了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)