使用 Spring Integration DSL 读取 Tibco EMS 主题
Posted
技术标签:
【中文标题】使用 Spring Integration DSL 读取 Tibco EMS 主题【英文标题】:Use Spring Integration DSL to read from Tibco EMS topic 【发布时间】:2019-04-12 05:23:17 【问题描述】:我一直在尝试将 spring integration dsl 配置为从 Tibco EMS 主题中读取,对收到的消息进行一些处理,然后将其推送到 ActiveMQ 队列。我能够使用 XML 配置成功设置它,但想改用 spring 集成 dsl。我无法弄清楚,也无法在网上找到任何帮助。
我将消息推送到 ActiveMQ 的配置是这样的 -
@Bean
public IntegrationFlow toActiveMQFlow(
MessageChannel channel,
ActiveMQQueue queue,
CachingConnectionFactory cachingConnectionFactory)
return IntegrationFlows.from(channel)
.transform(Object::toString)
.handle(Jms.outboundAdapter(cachingConnectionFactory).destination(queue))
.get();
我认为从 Tibco EMS 主题读取的配置应该是这样的 -
@Bean
public IntegrationFlow fromTibcoTopicFlow(
MessageChannel channel,
ConnectionFactory tibcoEmsConnectionFactory,
Topic tibcoTopic
)
return IntegrationFlows
.from(SomeInboundAdapter(tibcoEmsConnectionFactory).destination(tibcoTopic))
.transform(Object::toString)
.channel(channel)
.get();
由于我在后一种配置上没有找到太多帮助,所以我唯一的选择是使用 XML 配置吗?
请纠正/编辑/指出我犯的任何错误,仍在学习 Spring Integration DSL。
感谢您的帮助!
【问题讨论】:
tibcoEmsConnectionFactory
不也是关于 JMS 的吗? Jms.messageDrivenChannelAdapter()
不适合你吗?
顺便说一句,你的 XML 是什么?
我尝试使用 Jms.inboudAdapter 和 Jms.messageDrivenChannelAdapter,但不断收到此编译错误 - Cannot resolve method 'from(org.springframework.integration.dsl.jms.JmsMessageDrivenChannelAdapterSpec.JmsMessageDrivenChannelAdapterListenerContainerSpec<org.springframework.integration.dsl.jms.JmsDefaultListenerContainerSpec,org.springframework.jms.listener.DefaultMessageListenerContainer>)'
我正在使用 spring-integration-core 5.0.7.RELEASE 和 spring-integration-java- dsl 1.2.2.RELEASE
从 Spring Integration 5.0
版本开始,您不应该将那个额外的工件用于 Java DSL。它现在包含在核心项目中。见github.com/spring-projects/spring-integration-java-dsl/wiki/…:This project has been absorbed by Spring Integration Core starting with version 5.0.
【参考方案1】:
您需要使用Jms.messageDrivenChannelAdapter(ConnectionFactory connectionFactory)
。
不要使用spring-integration-java-dsl
。从版本5.0
:https://docs.spring.io/spring-integration/docs/5.0.9.RELEASE/reference/html/whats-new.html#_java_dsl开始合并到核心项目中
我们已经解决了类路径上旧 Java DSL jar 的问题:https://jira.spring.io/browse/INT-4551
【讨论】:
感谢 @ArtemBilan,在删除spring-integration-java-dsl
工件后,我能够配置为至少连接到 Tibco EMS。我用TibjmsConnectionFactory
和TibjmsTopic
创建了一个DefaultMessageListenerContainer
,并将它传递给Jms.messageDrivenChannelAdapter
。但是现在应用程序启动后,我在日志中不断收到此错误消息 - o.s.j.l.DefaultMessageListenerContainer : Setup of JMS message listener invoker failed for destination 'Topic[tibcoTopic]' - trying to recover. Cause: Not permitted
。
Cause: Not permitted
我猜是 Tibco 特有的东西,并且已经超出了 Spring 集成的范围。
与我的 Tibco 管理员核实后发现他们不允许我们创建持久订阅者,因此出现“不允许”错误。我现在必须使用 JNDI 来完成这项工作。感谢@ArtemBilan 的投入。以上是关于使用 Spring Integration DSL 读取 Tibco EMS 主题的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Integration DSL 读取 Tibco EMS 主题
Spring Integration DSL:PublishSubscribeChannel 订单
Spring Integration DSL JMS 入站/出站网关
如何将请求标头添加到 outboundGateway spring integration dsl
Spring Integration Java DSL:如何使用 channelMapping 方法路由到标题中名称的通道?