具有NServiceBus或MassTransit的服务总线的故障切换场景

具有NServiceBus或MassTransit的服务总线的故障切换场景,nservicebus,failover,masstransit,Nservicebus,Failover,Masstransit,我需要像微软一样构建Identity server 要处理故障转移,我将有多个web服务器节点。计划是通过向数据库服务器发送消息来完成所有数据库写入操作。数据库将被镜像或复制。其思想是,数据库订阅写操作,但其他节点也订阅。这样其他节点就不需要从数据库中读取数据,并且可以更新它们的缓存 我刚刚开始学习服务总线体系结构,我不清楚的是如何处理服务总线的故障切换场景 问题: 如果数据库服务器不可用,发布的消息会发生什么情况 它们会储存在什么地方 我是否需要额外的机器或群集来处理服务总线的故障切换 我听说

我需要像微软一样构建Identity server

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

我刚刚开始学习服务总线体系结构,我不清楚的是如何处理服务总线的故障切换场景

问题:

  • 如果数据库服务器不可用,发布的消息会发生什么情况
  • 它们会储存在什么地方
  • 我是否需要额外的机器或群集来处理服务总线的故障切换
  • 我听说SQL Server可以用作消息存储,但我可以使用持久的MSMQ吗?我正在对消息进行排队,以便能够将它们写入数据库,那么为什么我要先将它们存储到数据库中,然后再将它们写入?或者,我弄错了,DB只用于订阅列表而不用于消息
  • 这将取决于它的设置方式,但在MassTransit中,您可以让订阅保持活动状态,以便消息仍将传递到DB的队列。当DB再次激活时,您可以读取队列中的消息

  • 在MassTransit中,连接到服务总线的每个服务本身都有一个活动队列。消息将存储在那里

  • 我认为这是一个“视情况而定”。。。MassTransit支持MSMQ以外的其他MQs,但实际上是围绕MSMQ构建的。对于MSMQ的故障切换等方面,我们没有经验丰富的支持。但是,如果订阅服务(即总线)出现故障,一切都将继续正常运行-服务已经知道要与谁通话。只有当消费者发生变化(订阅或取消订阅)时,这才成为问题。对我来说,这是一个几乎从未发生过的事件

  • 对于MassTransit,我们使用DB存储订阅状态,但所有消息都存储在MSMQ中


  • 如果您想在其中一个回复中了解更多详细信息,或者对MT有其他问题,请加入我们的邮件列表:

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

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

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

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