【问题标题】:Nservicebus 4.0 Send IEvent from websiteNservicebus 4.0 从网站发送 IEvent
【发布时间】:2013-09-26 14:12:49
【问题描述】:

我正在从 2.6 升级到 4.0。在 2.6 中,我让我的网站将消息发送到 Publisher 服务。 Publisher 服务然后将消息发布给一个或多个订阅者。

但是,在 4.0 中,必须发送 IMessage 并发布 IEvent。我无法发送 IEvent。据我所知,这给我留下了两个选择。要么创建两条完全相同的消息,一条实现 IMessage(用于向发布者发送命令),另一条实现 IEvent(用于向订阅者发布),或者发布不可自动发现的 IMessage,并确保所有订阅者明确指定他们想要的消息。

显然,第二种方法是唯一可行的方法(如果可能的话),但我希望还有另一种方法。有吗?

【问题讨论】:

    标签: nservicebus4


    【解决方案1】:

    好的,所以问题是我们还没有像预期的那样做事。我相信被禁止的顺序是

    a) 网页输入

    b) 发布者的命令

    c) 发布者执行保存数据之类的操作

    d) 出版商发布了一些新的甚至“嘿,我刚刚保存了!”

    但是我们正在做的是 a) 网页输入

    b) 网络应用保存数据

    c) 网络应用通知发布者

    d) 发布者提醒所有订阅者

    在我们的例子中,命令和事件是完全相同的消息。出于HERE 中提到的几个原因,不应该从 Web 应用程序发布事件。所以我们只是将消息传递给服务并让服务发布它。

    我的困境的答案是使用 IMessage 作为消息(这可以很好地传递给发布者),然后在我们的发布者和订阅者中说

    .DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("blahblahblah.Messages.Publishing"));
    

    现在订阅者会自动订阅我的 IMessage,这当然是在上面的命名空间中。

    【讨论】:

      【解决方案2】:

      (我假设 Web 服务器和您的后端服务(发布者)在同一个域中)

      您可能有两条消息,一条来自我们网站上的操作(例如 CreateAccount)的命令必须是 IMessage(顺便说一下,您可以使用 unobtrusive mode),以及第二条消息(IEvent ) 类似于 AccountCreated,它将在 CreatAccount 处理程序完成工作后发布。

      如果您想直接从您的网站发布事件,您可以在您的网络服务器上托管一个端点并从那里发布一个 IEvent...

      Andreas Öhlund 有一篇关于该主题的简短博客:http://andreasohlund.net/2011/12/08/introducing-ievent-and-icommand/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 2011-07-24
        • 2020-06-13
        • 2012-03-15
        • 1970-01-01
        相关资源
        最近更新 更多