6.4. guaranteed Delivery


概述

保证交付 意味着,一旦消息被放入消息频道,消息传递系统会保证该消息将到达其目的地,即使应用程序的部分应该失败。通常,消息传递系统实施保证交付模式,如 图 6.4 “保证交付模式” 所示,方法是在尝试将其传送到目标前将信息写入持久性存储。

图 6.4. 保证交付模式

确保交付模式

支持保证交付的组件

以下 Apache Camel 组件支持保证交付模式:

JMS

在 JMS 中,deliveryPersistent 查询选项指示是否启用了持久的消息存储。通常,不需要设置这个选项,因为默认行为是启用持久性交付。要配置保证交付的所有详细信息,需要在 JMS 提供程序上设置配置选项。根据您使用的 JMS 提供程序,这些详细信息会有所不同。例如: MQ 系列、TibCo、BEA、SEA、Senic 等,它们都提供各种服务质量来支持保证交付。

如需了解更多详细信息,请参阅 Apache Camel 组件参考指南 > 中的 Jms

ActiveMQ

在 ActiveMQ 中,消息持久性默认为启用。从版本 5 开始,ActiveMQ 使用 AMQ 消息存储作为默认的持久性机制。您可以使用几种不同的方法在 ActiveMQ 中增强消息持久性。

最简单的选项(与 图 6.4 “保证交付模式”不同)是在中央代理中启用持久性,然后使用可靠的协议连接到该代理。将消息发送到中央代理后,保证向消费者发送发送。例如,在 Apache Camel 配置文件 META-INF/spring/camel-context.xml 中,您可以将 ActiveMQ 组件配置为使用 OpenWire/TCP 协议连接到中央代理,如下所示:

<beans ... >
  ...
  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="tcp://somehost:61616"/>
  </bean>
  ...
</beans>

如果您希望在发送到远程端点(与 图 6.4 “保证交付模式”相似)之前,在发送到远程端点(与 相似)之前,通过实例化 Apache Camel 应用程序中的嵌入式代理来实现这个架构。实现此操作的简单方法是使用 ActiveMQ Peer-to-Peer 协议,它隐式创建嵌入式代理来与其他对等端点通信。例如,在 camel-context.xml 配置文件中,您可以将 ActiveMQ 组件配置为连接到组 GroupA 中的所有对等点,如下所示:

<beans ... >
  ...
  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="peer://GroupA/broker1"/>
  </bean>
  ...
</beans>

其中 broker1 是嵌入式代理的代理名称(组中的其他对等点应该使用不同的代理名称)。Peer-to-Peer 协议的一个限制是它依赖于 IP 多播在组中找到其他对等点。这使得在广域网络(在某些没有启用 IP 多播的区域网络)中使用不可能。

在 ActiveMQ 组件中创建嵌入式代理的一种更灵活的方式是利用 ActiveMQ 的 VM 协议,它连接到嵌入式代理实例。如果所需名称的代理尚不存在,则虚拟机协议会自动创建。您可以使用此机制创建带有自定义配置的嵌入式代理。例如:

<beans ... >
  ...
  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="vm://broker1?brokerConfig=xbean:activemq.xml"/>
  </bean>
  ...
</beans>

其中 activemq.xml 是一个 ActiveMQ 文件,用于配置嵌入式代理实例。在 ActiveMQ 配置文件中,您可以选择启用以下持久性机制之一:

如需了解更多详细信息,请参阅 Apache Camel 组件参考指南 中的 ActiveMQ

ActiveMQ Journal

ActiveMQ Journal 组件针对特殊用例进行了优化,其中有多个并发生成者将消息写入队列,但只有一个活跃的消费者。消息存储在滚动日志文件中,并且聚合并发写入以提高效率。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.