1

我正在尝试使用 .NET 客户端创建基于 ActiveMQ 的基于消息的应用程序。

  • 客户端 1:Web 服务(生产者)
  • 客户端 2:Windows 服务(消费者)

我的问题是:是否可以防止某种类型或内容的消息被客户端排队?

我想这样做的原因是版本更新。

我想会有一段时间,我需要扩展或更改消息类型。我的计划是按以下顺序进行更新:

  1. 防止旧版本的消息排队。
  2. 等到消费者处理完旧版本的所有消息。
  3. 更新生产者和消费者软件。

我希望 Web 服务在更新过程中仍然可用,以便向呼叫报告。但它不应该能够对新消息进行排队。

当然,如果有更好的方法完全解决这个问题,请告诉我。

4

1 回答 1

3

作为一般规则,每个队列只有一种类型的有效负载是个好主意。一个简单的方法是为两个不同的消息版本使用两个不同的队列。就像是:

mysystem.orders.1_0
mysystem.orders.1_1

版本应该是队列名称的最后一部分,因为它可以很容易地使用通配符,它​​用于 ActiveMQ 中的许多配置选项。

将不同的版本拆分到不同的队列中可以解决必须同时升级生产者和消费者的问题,并且还可以让您了解是否所有 1_0 消息都已被消费。

于 2013-05-29T10:48:35.337 回答