【问题标题】:Incoming/outgoing message queues on client/server客户端/服务器上的传入/传出消息队列
【发布时间】:2015-07-15 16:02:15
【问题描述】:

我的系统有一台服务器和两种类型的许多客户端。第一种类型的客户端向服务器发送事件。第二种类型从服务器接收有关这些事件的通知。我目前正在测试 RabbitMQ 和 NServiceBus 以构建具有以下要求的消息队列:

  1. 第一种类型的客户端应该有事件的传入队列(在其上物理运行),以防止服务器断开连接时数据丢失。
  2. 服务器应该有用于通知的传出队列(物理上在其上运行),以防止第二类客户端断开连接时数据丢失。

[客户端类型 1 + 队列] -> [服务器 + 队列] -> [客户端类型 2]

这可以通过指定组件之一(或两者)来实现吗?如果是怎么办?

【问题讨论】:

    标签: queue rabbitmq nservicebus


    【解决方案1】:

    我对rabbit不是很熟悉,所以我会用nservicebus(NSB)来回答这个问题。

    我的系统有一台服务器和许多两种类型的客户端

    好的,首先,NSB 没有客户端和服务器的等价概念。在 NSB 中,所有参与的应用程序都称为端点或服务。一些端点是发布者,一些是订阅者,一些是发送者,一些是接收者。有些是上述的任意组合。

    第一种类型的客户端向服务器发送事件。

    按照惯例,NSB 中有两种类型的消息,命令和事件。发送命令,发布事件。所以在这种情况下,类型 1 的客户端会向服务器发送命令。在这种情况下,类型 1 客户端将是发送方端点。因此,服务器是接收方端点。

    第二种类型从服务器接收有关这些事件的通知

    所以在这种情况下,服务器是发布者端点,类型 2 客户端是订阅者端点。服务器将发布一个所有订阅者都会收到的事件。

    第一种类型的客户端应该有事件的传入队列(在其上物理运行),以防止服务器断开连接时数据丢失

    我假设您的意思是类型 1 客户端需要接收它需要从某个地方发送到服务器的数据。

    嗯,在 NSB 中,每个端点都有一个队列,称为输入队列。这是端点接收消息的方式。

    在 NSB 中,队列传输是抽象的,但开箱即用的是 MSMQ(NSB 也支持 Rabbit 作为队列传输)。

    这提供了store-and-forward 消息传递模式,可保证可靠性。这意味着如果服务器不可用,排队传输将等到它再次可用后再传输消息。

    因此,您可以将消息发送到类型 1 客户端输入队列,然后将其转换为命令并发送到服务器。

    服务器应该有用于通知的传出队列(物理上 在其上运行)以防止在第二类客户端上丢失数据 断开连接。

    类似地,当服务器发布事件时(接收到来自类型 1 客户端的命令),排队传输将保证将事件传递给所有订阅类型 2 客户端。

    注意点:这不是基于具有“传出队列”的服务器,而是排队传输将消息传递到所有订阅端点的输入队列。

    因此,在您的方法中使用 NServiceBus 可以满足您的所有场景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-24
      • 2011-05-08
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多