gpt4 book ai didi

c# - NServiceBus 在此 WCF MVC 场景中有用吗?

转载 作者:行者123 更新时间:2023-11-30 14:38:00 26 4
gpt4 key购买 nike

我刚开始研究 nservicebus,无法确定它是否适合我的特定情况,或者是否过度。非常感谢架构指导,我有点挣扎。

我有一个 MVC 网站和 WCF REST 服务,它们都接收消息,例如“发布问题”。这应该会触发许多操作,例如实体的存储、规则引擎的检查,以及可能发送推送消息、更新一些聚合数据。规则引擎的结果也可能导致创建新消息。这些要求将来可能会发生变化。我想以接收端点向碰巧正在收听的任何人(X 人创建了一个新问题)发送消息的方式实现这一点。

我正在考虑将消息存储在数据库表中并让我的模块监控该表。这个思考过程被转移到 msmq,然后使用 nservicebus 转移到 pub sub。但是,我不确定应该如何实现。

我目前正在考虑以下场景。 WCF REST 服务出现了一个问题。 WCF 服务保留问题并发布新的问题消息(因此它需要以某种方式托管 nservicebus?)。我订阅消息的模块会采取行动,例如发出通知或根据定义的规则触发行动。

在这种情况下,使用 nservicebus 的 pub sub 会让我受益吗?这是实际实现它的方式吗?

最佳答案

The WCF service persists the question and publishes a new question message (so it would need to host nservicebus somehow?)

NServiceBus 可以托管在任何托管进程中,包括 IIS。为此(在 WCF 服务内)

  • 在您的 WCF 服务启动时创建一个 IBus 实例。
  • 当您收到对服务的问题请求时,组装您的 NServiceBus 消息
  • 使用 IBus.Publish(MyMessage) 发布消息;

要在 IIS 中创建 IBus 实例,一种常见的方法是在全局 asmx 中使用流畅的配置。典型的配置看起来像

public class Global : System.Web.HttpApplication
{
public static IBus Bus { get; private set; }

void Application_Start(object sender, EventArgs e)
{
Bus = NServiceBus.Configure.WithWeb()
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start();
}

您使用 web.config 定义您的 NServiceBus 端点(队列):

<configSections>
<section name="MsmqTransportConfig"
type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
</configSections>

<MsmqTransportConfig InputQueue="WebFrontEnd"
ErrorQueue="error"
NumberOfWorkerThreads="1"
MaxRetries="5" />

My modules subscribed to the message take action

您的每个下游订阅者都可以托管在作为 Windows 服务运行的 NServiceBus 通用主机内,这可能是最简单的托管选项。每个订阅者都有一个实现 IHandleMessages 的消息处理程序类。

NServiceBus 中发布/订阅的工作方式:

  1. 发布者服务有一个输入队列和一个订阅存储。
  2. 订阅者服务有一个输入队列
  3. 订阅者在启动时会向发布者的输入队列发送订阅消息
  4. 订阅消息包含订阅者感兴趣的消息类型和订阅者队列地址
  5. 发布者在订阅商店中记录订阅。
  6. 发布者收到消息。
  7. 发布者根据订阅列表评估消息类型
  8. 对于找到的每个匹配项,发布者都会将消息发送到队列地址。

您可能应该下载 NServiceBus pub-sub 示例以更好地理解这一点。

关于c# - NServiceBus 在此 WCF MVC 场景中有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8590581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com