Nservicebus 4.0从网站发送IEvent

时间:2013-09-26 14:12:50

标签: nservicebus4

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

a)网络输入

b)发布者的命令

c)发布商执行类似保存数据的操作

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

然而,我们正在做的是 a)网络输入

b)网络应用程序保存数据

c)网络应用程序通知发布者

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

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

我的困境的答案是为邮件使用IMessage(这可以让发行商好),然后在我们的发布商和订阅者中说

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

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