Rebus MSMQ似乎正在丢失消息

时间:2016-06-28 15:41:27

标签: rebus

我使用msmq跟踪了pub / sub演示,并且在发布者在订阅者之前启动时丢失了消息。 msmq已经创建。

我的发布商代码在一个控制台应用中

 _activator = new BuiltinHandlerActivator();

Configure.With(_activator)
            .Transport(t => t.UseMsmq("PaymentsToTake"))
            .Subscriptions(s => s.StoreInMemory())
            .Start();

/* In the timer code */
MyDateMessage m = new MyDateMessage()
        {
            NowTime = DateTime.Now,
            Counter = _index
        };

_activator.Bus.Publish(m).Wait();
_index++;

我在其他控制台应用中的订阅者代码

_activator = new BuiltinHandlerActivator();

_activator.Register(() => new PrintDateTime());


Configure.With(_activator)
            .Transport(t => t.UseMsmq("PaymentsToTake-Receiver1"))
            .Routing(r => r.TypeBased().Map<MyDateMessage>("PaymentsToTake"))
            .Start();

_activator.Bus.Subscribe<MyDateMessage>().Wait();

结果 当我运行订阅者时,我收到消息发送MyDateMessage - &gt;然后当我运行消费者时,出现的第一条消息是“53时间到了”因此消息0-52丢失了!

1 个答案:

答案 0 :(得分:1)

我怀疑这是因为你正在使用 in-mem订阅存储,这意味着发布者不记得谁在以前运行时订阅了。

对于大多数(如果不是全部)真实场景,您应该为订阅选择某种持久性存储。它可以是像SQL Server这样的数据库,也可以是本地JSON文件。

您只需更改行

即可
.Subscriptions(s => s.StoreInMemory())

等等。

.Subscriptions(s => s.UseJsonFile(@"subscriptions.json"))

你可以尝试看看是否能解决你的问题吗? :)