11.6. selective Consumer


概述

图 11.5 “Selective Consumer Pattern” 中显示的选择 消费者 模式描述了将过滤器应用到传入消息的用户,以便只处理满足特定选择条件的消息。

图 11.5. Selective Consumer Pattern

选择使用者模式

您可以使用以下方法之一在 Apache Camel 中实施选择性使用者模式:

JMS 选择器

JMS 选择器是涉及 JMS 标头和 JMS 属性的谓词表达式。如果选择器评估为 true,则允许 JMS 消息访问使用者;如果选择器评估为 false,则 JMS 消息将阻止。例如,要使用来自队列的消息,选择性,仅选择这些国家代码属性的消息等于 美国,您可以使用以下 Java DSL 路由:

from("jms:selective?selector=" + java.net.URLEncoder.encode("CountryCode='US'","UTF-8")).
    to("cxf:bean:replica01");

其中选择器字符串 CountryCode='US' 必须是编码的 URL (使用 UTF-8 字符),以避免解析查询选项时出现问题。本例假定为 JMS 属性( 国家代码 )由发送者设置。有关 JMS 选择器的详情,请参考 “JMS 选择器”一节

注意

如果选择器应用到 JMS 队列,则未选择的消息将保留在队列中,并且可能可供附加到同一队列的其他使用者使用。

ActiveMQ 中的 JMS 选择器

您还可以在 ActiveMQ 端点上定义 JMS 选择器。例如:

from("acivemq:selective?selector=" + java.net.URLEncoder.encode("CountryCode='US'","UTF-8")).
    to("cxf:bean:replica01");

如需了解更多详细信息,请参阅 ActiveMQ: JMS SelectorsActiveMQ Message Properties

消息过滤器

如果无法在消费者端点上设置选择器,您可以将过滤器处理器插入到您的路由中。例如,您可以定义一个选择性使用者,仅使用 Java DSL 来处理具有美国国家/地区代码的消息,如下所示:

from("seda:a").filter(header("CountryCode").isEqualTo("US")).process(myProcessor);

可使用 XML 配置定义相同的路由,如下所示:

<camelContext id="buildCustomProcessorWithFilter" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="seda:a"/>
    <filter>
      <xpath>$CountryCode = 'US'</xpath>
      <process ref="#myProcessor"/>
    </filter>
  </route>
</camelContext>

有关 Apache Camel 过滤器处理器的详情请参考 第 8.2 节 “消息过滤器”

警告

请注意,使用消息过滤器从 JMS 队列 选择消息。使用过滤器处理器时,仅丢弃阻止的消息。因此,如果消息是从队列消耗的(允许每个消息只消耗 once the 第 11.4 节 “竞争消费者”一次),则根本不会处理被阻断的消息。这可能不是您想要的行为。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.