当前位置: 首页 > 知识库问答 >
问题:

Apache Camel JMS/AMQP组件仅在需要时创建目标队列

丁翊歌
2023-03-14

我目前正在开发一个使用Camel和Spring Boot的集成应用程序。集成应用程序中有一个骆驼路由,它从源Artemis代理接收消息,该消息被转换并发送到另一个Artemis代理。骆驼路线如下所示:

from(source Queue)。进程(转换处理器)。到(目标队列)

当骆驼路由开始时,它会重新创建from和to中提到的队列名称,并且之前的消息会丢失。我们不希望发生这种情况。

我发现的一种方法是在Artemis ActiveMQ代理中。xml,禁用队列和主题自动创建,并使用Artemis API创建队列。

我的问题是,我们可以配置camelJMS/AMQP组件仅在队列不存在并且如果存在则使用现有队列时创建队列吗?

共有2个答案

郑富
2023-03-14

我不知道Artemis,但代理删除带有消息的队列听起来很奇怪。至少它的“兄弟”ActiveMQ在默认情况下具有您期望的行为:如果队列不存在,则会自动创建队列,但如果它们已经存在,则只会保留。

您确定队列是在路由开始时重新创建的吗?这些队列是持久的吗?可能是消费者只是耗尽了队列吗?我还发现了一个名为auto-delete-quures的Artemis队列属性,如果队列被消费者耗尽,它会删除队列。

自动删除队列当自动创建的JMS队列同时具有0个消费者和0条消息时,代理是否应自动删除这些队列。

汪辰阳
2023-03-14

默认情况下,Camel将使用DynamicDestinationResolver。您可以创建自己的自定义DestinationResolver,并将其插入endpoint(或组件)

.to("jms:queue:myQueue?destinationResolver=MyCustomDestinationResolver");

您还可以使用JndiDestinationResolver,默认情况下,它不会回退到创建动态目标。

 类似资料:
  • 我需要强制< code>[Setup]部分中的指令< code > CreateUninstallRegKey 仅在需要时为卸载创建注册表项。 例如,如果我设置了一个条件来创建卸载注册表项,则只有当条件为True时才能创建该项。否则,不得创建卸载注册表项。 如何在Inno设置中执行此操作? 更新问题 我写的代码是: 使用此代码,卸载注册表项始终在创建。(我写的代码应该是有问题。 如果 ISDone

  • 当我单击Maven Build时,我需要在m2e窗口中指定的目标是什么?

  • 我正在尝试构建一个避免不必要的批量的docker映像,并且遇到了一个我认为应该很常见的问题,但是到目前为止我还没有找到一个直截了当的解决方案。(我正在Ubuntu18.04系统上构建docker,从ubuntu层的

  • 我有一个pip的包文件(dependencies.conf),其中包括我的应用程序需要的一系列包: 在构建过程中,我使用以下方式下载所有软件包: 然后在部署过程中,我想安装这些文件,只有当安装的版本不同于我需要的,并且顺序正确(依赖关系) 我目前正在使用以下工具: 但是这是错误的,因为它没有验证版本(如果需要,我是为了降级包),并且它没有处理正确的依赖顺序。 有没有简单的方法可以做到这一点?(我基

  • 我正在开发一个被其他项目使用的库。该库通过JDBC提供数据库访问,我想在同一个库中也添加对R2DBC的支持。使用项目应该能够根据配置属性在JDBC和R2DBC之间切换。 我面临的问题是(2.5.4)提供的R2DBC自动配置覆盖了JDBC配置,并且使用的项目只能使用R2DBC。 此外,在构建项目时,有些任务,如留档或代码生成、测试等,取决于正在加载的Spring上下文,但不需要数据库访问。这些任务失

  • 问题内容: 从DB2表中,我有一个Blob,我正在将其转换为字节数组,以便可以使用它。我需要采取字节数组并创建它。 这就是我所拥有的: 但是它创建的是不正确的,它上面有一束黑线。 实际上,通过使用基本上相同的过程编写Web应用程序,我能够创建正确的代码。Web应用程序和有关代码的主要区别在于以下这一行: 所以我知道字节数组是一个并且可以完成,但是我的代码不会创建clean 。 关于如何使它起作用的