【问题标题】:Add 'application.errorChannel' to config in Spring Integration在 Spring Integration 中将“application.errorChannel”添加到配置中
【发布时间】:2018-10-23 21:56:49
【问题描述】:

我编写了一个程序来从 Solace 队列中读取消息。我收到以下错误。

你能帮忙吗?

代码如下:

我的主要配置如下:

public class ReadFromQueueConfig {

    @Autowired
    private PrintMessageFromQueue printMessageFromQueue;

    String queueName = "MY.SAMPLE.SOLACE.QUEUE";

    @Bean
    public CachingConnectionFactory jmsConnectionFactory() {
        CachingConnectionFactory ccf = new CachingConnectionFactory();
        try {
            SolConnectionFactory scf = SolJmsUtility.createConnectionFactory();
            scf.setHost("host");
            scf.setUsername("username");
            scf.setVPN("vpm");
            scf.setPassword("password");
            scf.setDirectTransport(false);

            ccf.setTargetConnectionFactory(scf);

        } catch (Exception e) {
            logger.debug(e.getMessage());
        }
        return ccf;
    }

    @Bean
    public IntegrationFlow handleJsmInput() {
        return IntegrationFlows
                .from(Jms.inboundAdapter(jmsConnectionFactory()).destination(queueName))
                        .handle(printMessageFromQueue)
                        .get();
    }
}

PrintMessageFromQueue.java:

更新: 我的主要课程:

@SpringBootApplication
@EnableIntegration
@IntegrationComponentScan
public class TestReadFromQueueApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestReadFromQueueApplication.class, args);
    }
}

【问题讨论】:

  • 您并没有显示真正的问题所在。我们在您的日志中看到的是正常的应用程序启动和停止。而已。您可能只是在main() 中过早地关闭了应用程序上下文。在关闭应用程序上下文之前,您应该考虑添加一些sleep() 或对最终用户输入的反应。
  • 感谢您的回复。我真正想要的是让程序继续监听队列,并打印发布到它的任何消息。我应该添加什么来保持程序运行和收听消息?

标签: java error-handling spring-integration solace


【解决方案1】:

您可以在创建ApplicationContext 后在main() 中执行类似操作:

final Scanner scanner = new Scanner(System.in);
context.close();

所以,在控制台输入一些输入之前,您的应用程序不会退出。

您也可以等待消息被使用,例如通过QueueChannel.receive()。 在 Spring Integration Samples 的 Apache Kafka 示例中完成了一些阻止 main 的示例:https://github.com/spring-projects/spring-integration-samples/blob/master/basic/kafka/src/main/java/org/springframework/integration/samples/kafka/Application.java

【讨论】:

  • 嗨 Artem,这是一个 Spring Boot 应用程序,我不想使用 ApplicationContext。我已经用我使用的主要课程更新了这个问题。我应该修复什么来让程序收听 Solace 队列上的消息并打印它们?
  • 当我使用这个主类时,我遇到了同样的问题(上下文在从队列中读取消息之前关闭)。
  • 嗯? `SpringApplication.run()` 正好创建了一个ApplicationContext。正如我所说:您需要以某种方式延迟退出main(),我建议您等待来自控制台的一些输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多