×

Loading...
Ad by
Ad by

是MICROSOFT MQ吗? 你的REQUIREMENT是不是关键业务?如果不是,

典型的简单POINT-TO-POINT模式,写一个CLIENT根据你的要求往QUEUE里写MESSAGE(TEXT,XML OR OBJECT), 缺省情况下应是PERSISTENT MESSAGE.
另写一个LISTERNER,从QUEUE里拿MESSAGE,转换成SQL命令,检查DATABASE,如ACTIVE, 把SQL发到SQL DATABASE去运行.在DATABASE INACTIVE或SQL运行出错,MESSAGE会放回QUEUE里,等待下一次的运行.

如是关键业务,要考虑TRANSACTION,而且最好是TWO PHASE COMMIT PROTOCOL.
1) MESSQGE PROVIDER是不是XA-COMPLIANT的.
2) 需要TRANSACTION SERVER (TX & XA).,有FAILURE RECOVERY功能.
3) XA-COMPLIANT DATABASE DRIVER
4) SQL DATABASE是否能FAILURE RECOVERY.
5) 如不能支持DISTRIBUTED TRANSACTION,可以分别用MESSAGE PROVIDER和
SQLSERVER的LOCAL TRANSACTION.另外,需要写COMPENSACTION TRANSACTION.
Report

Replies, comments and Discussions:

  • 工作学习 / 专业技术讨论 / 请教:哪位有Message Queue的编程经验啊?我只有个大概的概念。现在要做的是:
    程序不停地向SQL Server写数据,需要一种机制可以Queue住所有没完成的命令,当SQL Server出了问题,恢复正常以后还能把原来要写的数据写入.看了几个SDK下的例子还是摸不着头脑.哪位可指教一下,谢谢.
    • I am familiar with WMQ only but the concept should be similar. You can check the 'persistent' attribute of the Queue and consume message in some transaction context.
      • 谢谢。我这种情况,我的程序是sending application,SQL Server是receiving apllication 对吗?
    • .NET?
      Send message: object -> serialize to Q (binary or xml).
      Read message: deserialize from the Q (binary or xml) -> object.
      • 还没用上.net, 还是C++. 谢谢
    • 是MICROSOFT MQ吗? 你的REQUIREMENT是不是关键业务?如果不是,
      典型的简单POINT-TO-POINT模式,写一个CLIENT根据你的要求往QUEUE里写MESSAGE(TEXT,XML OR OBJECT), 缺省情况下应是PERSISTENT MESSAGE.
      另写一个LISTERNER,从QUEUE里拿MESSAGE,转换成SQL命令,检查DATABASE,如ACTIVE, 把SQL发到SQL DATABASE去运行.在DATABASE INACTIVE或SQL运行出错,MESSAGE会放回QUEUE里,等待下一次的运行.

      如是关键业务,要考虑TRANSACTION,而且最好是TWO PHASE COMMIT PROTOCOL.
      1) MESSQGE PROVIDER是不是XA-COMPLIANT的.
      2) 需要TRANSACTION SERVER (TX & XA).,有FAILURE RECOVERY功能.
      3) XA-COMPLIANT DATABASE DRIVER
      4) SQL DATABASE是否能FAILURE RECOVERY.
      5) 如不能支持DISTRIBUTED TRANSACTION,可以分别用MESSAGE PROVIDER和
      SQLSERVER的LOCAL TRANSACTION.另外,需要写COMPENSACTION TRANSACTION.
      • 谢谢。关键业务是指银行之类的业务吧?我这个算不上。这个Sender和Listener必须是不同的应用程序还是不同的线程就可以?我开始还以为不用写Listener的程序,SQL Server就是Listener呢?