使用MassTransit进行事务和错误处理的pub / sub

时间:2012-02-26 22:09:45

标签: transactions publish-subscribe masstransit

请帮助我开始

我周末一直在冲我的屁股,对不起我的法语,没有找到我要找的东西。

这是我尝试移至消息队列的过程

  • 每晚都有pdf文件登陆我们的ftp服务器,大约45,000。
  • 对于每个文件,在队列表中的ms sql server中创建记录
  • 服务正在读取队列并处理磁盘上的文件。

这就是我想要pub / sub的事务和错误处理

  • 文件监视器写入事务中的队列而不是数据库。我想这更快。
  • 然后我想订阅pdf-队列,所以我不必在新文件时轮询数据库 到达。

某些问题

  • 如何使用交易发布到队列?
  • 如何从队列中检索消息,然后在处理消息时出现错误则中止。
  • 打开/关闭队列连接的最佳方法是什么?是否有轻量级会话对象?

是的,我知道有一个简单的发布/子示例:-)但我无法将它们粘在一起

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

如何使用交易发布到队列?

如果队列是事务性的,那么在配置总线时,请使用msmq://machine/queue_name?tx=true以确保MassTransit知道它是一个事务性队列。现在这意味着所有涉及的机器都需要能够注册DTC。这可能是也可能不是微不足道的设置。这假定使用MSMQ。我建议使用RabbitMQ,除非您需要注册分布式事务。

如何从队列中检索邮件,然后在处理邮件时出现错误时中止。

如果发现错误,MassTransit支持MSMQ事务队列上的自动重试(5x?)。您还可以捕获错误并使用RetryLater()将其丢回队列。

打开/关闭队列连接的最佳方法是什么?是否有轻量级会话对象?

如果您使用的是MassTransit,MT会为您处理所有连接对象。无需打开/关闭队列连接。

实际上,您可以在文件侦听器服务上执行Bus.Instance.Publish(new FileArrivedMessage(filename));在消费者方面,只需注册Consumes<FileArrivedMessage>.All实施。他们每个人都需要自己的队列,但应该能够轻松地进行通信。

您也可以从MT邮件列表中获得更多帮助。 https://groups.google.com/forum/#!forum/masstransit-discuss