MSMQ Transactional Message Delivery如何工作?

Kar*_*tik 8 msmq

只想获得有关如何向远程事务消息队列发送消息的确认.

假设我有两台机器,A和B.

机器A具有用于接收消息的事务队列.Windows服务监视此队列并对数据执行某些操作(将其保留到SQL Server).机器B正在运行需要写入机器A上的队列的应用程序.

几个问题:

  1. 发送邮件时,是否在机器B上创建本地副本,然后才将其传送到机器A?
    一个.如果是这样,默认情况下是这种行为,还是仅在发送"IsRecoverable"属性时才会发生?
    湾 队列是事务性的这一事实是否会对此行为产生影响?

  2. 由于我使用的是事务性队列,一旦事务提交,数据在哪里?一个.它是否在本地,等待msmq服务将消息传递到远程队列?
    湾 或者消息是否位于远程计算机上的队列中?

我在解释文档方面遇到了麻烦.在某些地方,我看到描述了存储和转发行为,但我无法理解这是否是事务队列的默认行为,或者我是否需要明确地执行某些操作才能实现这一点.

tom*_*ern 6

关于事务性MSMQ的主要理解是,在将消息事务传输到远程队列时实际上涉及3个不同的事务.

  1. 发件人将邮件写入本地临时队列.
  2. 发送方计算机上的队列管理器通过线路将消息传输到接收方计算机上的队列管理器.
  3. 接收方服务处理队列消息,然后从队列中删除消息.

所以回答你的问题:

发送邮件时,是否在机器B上创建本地副本,然后才将其传送到机器A?

如果是这样,默认情况下是这种行为,还是仅在发送"IsRecoverable"属性时才会发生?

默认情况下.这就是所谓的存储和转发.

队列是事务性的这一事实是否会对此行为产生影响?

没有,除非发生故障.

由于我使用的是事务性队列,一旦事务提交,数据在哪里?

这取决于你的意思(见上文)

它是否在本地,等待msmq服务将消息传递到远程队列?

仅当远程队列不可用时.

或者消息是否位于远程计算机上的队列中?

如果接收方服务未能成功处理消息(处理程序中存在异常),则消息将保留在远程队列中.