nservicebus - 具有 NServiceBus 或 MassTransit 的服务总线的故障转移方案

标签 nservicebus failover masstransit

我需要像 Microsoft 的 http://login.live.com 一样构建身份服务器.

为了处理故障转移,我将有多个 Web 服务器节点。计划是通过向数据库服务器发送消息来完成所有数据库写入操作。数据库将被镜像或复制。这个想法是数据库订阅写操作,但其他节点也订阅。这样其他节点不需要从数据库读取并且可以更新它们的缓存。

我刚刚开始学习服务总线架构,我不清楚的是如何处理服务总线的故障转移场景。

问题:

  • 如果数据库服务器不可用,发布的消息会发生什么?
  • 它们会被存储在什么地方?
  • 我是否需要额外的机器或集群来处理服务总线的故障转移?
  • 我读到 SQL Server 可以用作消息存储,但我可以使用持久的 MSMQ 吗?我正在排队消息以便能够将它们写入数据库,那么为什么我首先将它们存储到数据库中只是为了获取它们并再次写入它们?或者,我弄错了,DB 仅用于订阅列表而不用于消息?
  • 最佳答案

    在实现这种架构时,您应该考虑应用 CQRS 的原则 - 不应通过总线完成查询(此用户/密码组合是否有效);命令(更改密码、忘记密码)通过总线发送,而不是作为事件发布。虽然在内部您可能会使用事件来保持命令和查询端同步,但这不涉及客户端。

    可以使用简单的 ado.net 对数据库的复制读取从站进行查询 - 这在 CQRS 中称为持久 View 模型。如果你愿意,你也可以在它前面放一些简单的 WCF。

    使用 MSMQ 时,所有消息都通过存储转发传递。这意味着它们在传递到服务器之前首先存储在客户端上,因此如果服务器关闭,消息会在客户端上等待。对于容错,您希望您的消息是可恢复的(写入磁盘) - 这是 NServiceBus 中的默认值,但不是标准 MSMQ 的默认值(不知道 MassTransit)。为此,您不需要数据库。

    在 NServiceBus 中,总线未安装在单独的机器上,因此您无需独立于系统的其余部分处理其可用性。只有当您考虑将我们的命令处理扩展到更多节点时,您才可能考虑使用 NServiceBus 中基于消息的负载均衡器(称为分发服务器),为了高可用性,应将其安装在集群或容错硬件上。

    关于nservicebus - 具有 NServiceBus 或 MassTransit 的服务总线的故障转移方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661970/

    相关文章:

    java - Spring Boot 处理中的 Oracle DB 故障转移

    Redis.conf for slave with sentinel

    c# - 配置 MassTransit 以反序列化多态属性

    c# - 如何指定要与 MassTransit 一起使用的 Azure 服务总线主题

    c# - 具有接口(interface)属性的 MassTransit 发送命令

    .net - ASP.NET MVC 应用程序自行重启

    c# - NServiceBus IUniformSession 不适用于 Azure WebJobs SDK

    design-patterns - IoC、容器和 NServiceBus 混淆

    testing - 我如何在测试场景中连接 NServiceBus 的 SqlSaga?

    python - Twisted:ReconnectingClientFactory 连接到不同的服务器