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

用于更改JMS入站通道适配器选择器的Spring集成控制总线消息

薛泰
2023-03-14

我目前正在一个基于Spring集成(3.0.1.RELEASE版)的应用程序上实现一个流,该应用程序需要将消息存储在JMS队列上,以便稍后提取。为此,我一直在尝试使用带有自定义选择器的Spring Integration JMS入站通道适配器,然后通过将JMSDestinationPollingSource的JMS选择器更改为作为头属性包含的某个匹配ID,从队列中提取消息。

其中一个要求是,我无法添加新的服务或JAVA方法,因此我一直在尝试使用控制总线对其进行排序,但在发送消息以将messageSelector设置为其他内容时,仍会收到相同的错误。

入站通道适配器定义:

<int-jms:inbound-channel-adapter id="inboundAdapter"
                                 channel="inboundChannel"
                                 destinationName="bufferQueue"
                                 connection-factory="connectionFactory"
                                 selector="matchingID = 'NO VALUE'">
    <int:poller fixed-delay="1000"/>
</int-jms:inbound-channel-adapter>

信息:

@'inboundAdapter.source'.setMessageSelector("matchingID = 'VALUE'")

错误:

EvaluationException: The method 'public void org.springframework.integration.jms.JmsDestinationPollingSource.setMessageSelector(java.lang.String)' is not supported by this command processor. If usign the Control Bus, consider adding @ManagedOperation or @ManagedAttribute.

这,AFAIK,意味着JmsDestinationPollingSource类不可管理Control Bus,因为它没有传递ControlBusmetodFilter。

这种方法是不可行的,还是我遗漏了什么?有没有办法只使用SI XML配置文件动态设置选择器?

共有1个答案

米承嗣
2023-03-14

首先,使用Java工具很奇怪,不允许在Java上编写代码。。。

但这是你的选择,或者像你说的那样。

换雇主!;-)

正确的:控制总线只允许@ManagedAction@Managed属性方法。因为JmsDestinationPollingSource.setMessageSelector。我们可以这样做。但是如果我们可以用不同的方法来达到它,它有那么多意义吗?

<int:outbound-channel-adapter id="changeSelectorChannel" 
    ref"inboundAdapter.source method="setMessageSelector"/>

其中,新的选择器表达式应作为此通道的消息的有效负载

 类似资料:
  • 问题内容: 入站和出站通道适配器之间的根本区别是什么? 任何示例都将非常有帮助。 我已经查看过Spring文档,这种“方向性”的区别对我来说还不清楚。我支持配置了outbound-channel-adapter的应用程序,但是我发现使用 出站 标签可以直观地了解行为计数器。该适配器获取一个外部文件,然后 将其 引入应用程序中, 在 该应用程序中我们解析文件并保留数据。 这类似于这个问题,但是我想更

  • 使用Spring Integration Kafka,使用出站通道适配器,我尝试向名为“test”的主题发送消息 通过命令行终端,我启动了动物园管理员、kafka并创建了名为“test”的主题 Spring XML配置 JUnit测试代码 测试用例成功,在调试时,我发现channel.send()返回true 我使用下面的命令通过命令行检查了主题,但是我在测试主题中看不到任何消息。 bin/kaf

  • 如何通过注释而不是常规配置文件配置入站通道适配器?我可以为会话工厂定义bean,如下所示: 如何配置通过注释下给出的入站通道适配器? 我正在寻找的是在应用程序启动时连接所有bean,然后公开一些方法来开始轮询服务器,处理它们,然后从本地删除它们,类似于 其中getPollableChannel()为我提供了用于轮询的bean。

  • 我试图将从Quickfix读取消息(读取修复消息)配置到spring集成中。我知道我可以使用入站通道适配器从外部源(如QuickFix)读取数据。您能提供如何编写事件驱动入站通道适配器的示例吗?我有以下配置不起作用

  • 问题内容: Spring Integration FTP中的入站通道适配器和出站通道适配器之间有什么区别?我应该使用哪一个?何时使用? 我从文档中了解到,出站可以发送任何类型的文件(例如byte [],String,java.io.File),但入站仅限于文件类型。那仅仅是区别还是其他? 问题答案: 我建议您首先阅读理论 。 任何Inbound适配器都旨在从外部系统获取数据。Outbound-放置