【问题标题】:Clear queues on bus start or stop在巴士开始或停止时清除队列
【发布时间】:2014-09-15 18:28:02
【问题描述】:

Rebus 上是否有配置设置来清除总线启动或关闭时的队列?我需要这样做的原因是我为我的集成测试运行了两个 Rebus 实例,如果测试失败,我不希望在后续测试运行中重试失败的消息。

这是发送消息的集成测试客户端的内容。请注意,RebusHost 只是被测系统的包装器:

using Rebus.Configuration;
using Rebus.Transports.Msmq;

namespace MT.Testing.Integration
{
    [TestClass]
    public class IntegrationTestFixture
    {
        private static IMtHost _host;

        [AssemblyInitialize]
        public static void IntegrationTestInitialize(TestContext testContext)
        {
            _host = new RebusHost();

            _host.Start();
        }

        [AssemblyCleanup]
        public static void IntegrationTestCleanup()
        {
            _host.Stop();
        }

        public static IBus GetClientBus(IContainerAdapter containerAdapter)
        {
            return Configure.With(containerAdapter)
                .Transport(t => t.UseMsmq("mt.testing.integration.client.input", "mt.testing.integration.client.error"))
                .MessageOwnership(d => d.Use(new IntegrationMessageOwnership()))
                .Subscriptions(s => s.StoreInMemory())
                .Sagas(s => s.StoreInMemory())
                .CreateBus().Start();
        }
    }

    public class IntegrationMessageOwnership : IDetermineMessageOwnership
    {
        public string GetEndpointFor(Type messageType)
        {
            return "mt.testing.integration.input";
        }
    }
}

【问题讨论】:

    标签: c# integration-testing publish-subscribe rebus


    【解决方案1】:

    Rebus 没有执行此操作的“官方”API,但您可以执行我在大多数 Rebus 的 MSMQ 集成测试中所做的事情:使用 Rebus 的 MsmqUtil 的有用静态方法 - 例如像这样:MsmqUtil.PurgeQueue("mt.testing.integration.input")

    【讨论】:

    • 谢谢。那个类是内部的,所以我不得不将它复制到我的 utils 项目中,当然要有适当的归属。
    • 对,对不起!我忘记了:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2010-12-06
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多