我们正在使用NServiceBus将有关一个系统中数据更改的消息传播到我们环境中的其他系统。
当我们在我们的一个客户端(接收)系统中获得异常时,我们希望停止处理消息而不从队列中删除失败的消息,以便我们可以调查问题并从队列中的相同位置获取
实现这一目标的最佳方式是什么?
修改 继续我目前的设置
Configure.With()
.DefiningCommandsAs(t => typeof(ICommand).IsAssignableFrom(t))
.DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t))
.DefiningMessagesAs(t => typeof(IMessage).IsAssignableFrom(t))
.Log4Net<NlogAppenderForLog4Net>(a => { })
.NinjectBuilder(Kernel)
.XmlSerializer()
.MsmqTransport()
.DefineEndpointName("consumer.input")
.IsTransactional(true)
.PurgeOnStartup(false)
.MsmqSubscriptionStorage("consumer")
.UnicastBus()
.LoadMessageHandlers()
.ImpersonateSender(false)
.CreateBus().Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
答案 0 :(得分:2)
您可能希望实现IManageMessageFailures接口。通过此界面,您可以访问异常和消息:
public interface IManageMessageFailures
{
void SerializationFailedForMessage(TransportMessage message, Exception e);
void ProcessingAlwaysFailsForMessage(TransportMessage message, Exception e);
}
如果失败,它将调用您在配置中指定的任何内容作为要采取的操作。这是通过DefineCriticalErrorAction(Action onCriticalError)
完成的。默认设置是将工作线程数设置为0,允许您减少该过程。您可能希望在故障管理器中执行此操作。您应该可以使用传输层来添加线程。