【问题标题】:JMS: updating message version / prevent certain message from being queuedJMS:更新消息版本/防止某些消息排队
【发布时间】:2013-05-24 13:18:53
【问题描述】:

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

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

我的问题是:是否有可能阻止特定类型或内容的消息被客户端排队?

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

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

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

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

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

【问题讨论】:

    标签: c# .net jms activemq


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好的,听起来不错。但是有没有办法“关闭”过时的队列 mysystem.orders.1_0,所以旧的 Web 服务会出现异常或什么?
    • 是的,但前提是您通过 块(您将删除 1_0)静态定义所有目的地,并设置用户授权插件以便 admin="false" (这意味着他们无法动态创建目的地;请参阅activemq.apache.org/security)。然后,您需要做的就是重新启动 ActiveMQ 以获取新的静态目标,并通过 JMX 删除该队列。
    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 2015-12-21
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2013-03-10
    • 2015-02-25
    相关资源
    最近更新 更多