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

Spring DSL:向JMS队列发送错误消息。得到一个错误'One-way'MessageHandler',并且不适合配置'Output Channel''

易扬
2023-03-14
is a one-way 'MessageHandler' and it isn't appropriate to configure 'outputChannel'. This is the end of the integration flow.
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;

@Bean
public Queue errorQueue() {
    return new ActiveMQQueue(fatalQueue);
}
@Bean
public DirectChannel errorChannel() {
    return new DirectChannel();
}
@Bean
public IntegrationFlow handleErrors() {
    return IntegrationFlows
            .from(errorChannel())
            .handle(x -> System.out.println("error handling invoked.x="+x))
            .handle(Jms.outboundAdapter(jmsMessagingTemplate.getConnectionFactory()).destination(fatalQueue))
            .get();
}

stacktrace说:

Caused by: org.springframework.beans.factory.BeanCreationException: The 'currentComponent' (MessageReceiver$$Lambda$1/1495414981@76c52298) is a one-way 'MessageHandler' and it isn't appropriate to configure 'outputChannel'. This is the end of the integration flow.
  at org.springframework.integration.dsl.IntegrationFlowDefinition.registerOutputChannelIfCan(IntegrationFlowDefinition.java:2630) ~[spring-integration-java-dsl-1.1.0.RELEASE.jar:na]
  at org.springframework.integration.dsl.IntegrationFlowDefinition.register(IntegrationFlowDefinition.java:2554) ~[spring-integration-java-dsl-1.1.0.RELEASE.jar:na]
  at org.springframework.integration.dsl.IntegrationFlowDefinition.handle(IntegrationFlowDefinition.java:1136) ~[spring-integration-java-dsl-1.1.0.RELEASE.jar:na]
  at org.springframework.integration.dsl.IntegrationFlowDefinition.handle(IntegrationFlowDefinition.java:1116) ~[spring-integration-java-dsl-1.1.0.RELEASE.jar:na]
  at org.springframework.integration.dsl.IntegrationFlowDefinition.handle(IntegrationFlowDefinition.java:863) ~[spring-integration-java-dsl-1.1.0.RELEASE.jar:na]

共有1个答案

龚征
2023-03-14

你的问题在这里:

.handle(x -> System.out.println("error handling invoked.x="+x))

StackTrace确切地谈到了这一点。

这并不令人惊讶。您的Lambda如下所示:

.handle(new MessageHandler() {

        public void handleMessage(Message<?> message) throws MessagingException {
               System.out.println("error handling invoked.x="+x);
        }
})
.handle((p, h) -> {
        System.out.println("error handling invoked.x=" + new MutableMessage(p, h));
        return p;
 })
 类似资料:
  • 我设置了一个EJB项目,使用JMS将持久性实体对象发送到MDB。我使用JBoss EAP 7,使用Apache ActiveMQ作为消息传递提供程序。我像这样设置ConnectionFactory和队列: 这是我的消息生成器,它接收“Account”实体对象作为参数并将其发送到队列: EntityEnqueueBean。Java语言 MDB从队列接收消息并对其进行处理: java账户 不确定我做错

  • 如果在发送接收到的消息时发生异常,则会丢失已接收到的消息。

  • 我正在使用spring-cloud-stream:1.3.0.发行版、spring-cloud-stream-binder-kafka:1.3.0.发行版开发spring引导应用程序。我使用spring integration dsl拆分文件中的行,使用beanio将行转换为json,要求将成功的json消息写入一个kafka主题,并将错误消息写入不同的kafka主题。下面是application

  • 我试图通过驼峰路由将消息放到Weblogic JMS中的队列中。 我的目标是最终配置一个Route以使用来自jms队列的消息,我将早期Route的数据发布到该队列。 这是我的配置: 我的路线如下所示: 我尝试执行此路由时遇到此异常: 我按照以下过程创建了此处提到的队列:https://blogs.oracle.com/soaproactive/entry/how_to_create_a_simpl

  • 我是Spring JMS的新手。我的应用程序是使用Spring Boot开发的,并部署在JBoss EAP7.2.0中。我有一个远程队列,它是一个活动的MQ Artemis队列,也嵌入在JBoss EAP7.2.0中。有人能建议我如何使用Spring Boot的JmsTemplate向远程JMS队列发送消息吗?基本上,我不知道应该如何定义远程connectionFactory来连接到远程队列。

  • 我正在尝试使用HDFS kafka连接器将protobuf消息从kafka发送到HDFS。我的连接器配置如下所示 为了测试这一点,我尝试在一个小节点应用程序中发送protobuf序列化消息。这是我的文件: 和我的节点应用程序 但是,当我运行此程序时,我会出现以下错误: 我该如何解决这个问题?我的猜测是,我的protobuf模式没有在Kafka模式注册表中注册,但我不确定。如果是这种情况,是否有方法