首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >到IBM MQ的Camel jms路由在成功的测试连接后立即关闭。

到IBM MQ的Camel jms路由在成功的测试连接后立即关闭。
EN

Stack Overflow用户
提问于 2018-01-23 12:05:01
回答 1查看 867关注 0票数 0

我已经用过骆驼几次了,但是这个问题在我的头上,我不知道我做错了什么。它是一个新的应用程序,应该从IBM获取消息并将文件放入磁盘。路线很简单:

代码语言:javascript
运行
复制
String fromString = "message-queue:XXX.FUNDORDER.YYY.OUT?testConnectionOnStartup=true";

    from(fromString)
        .autoStartup(true)
        .routeId("RouteReceiver")
        .log("Processing message ${exchangeId}")
        .to("file:/in?fileName=${exchangeId}.txt");

以下是创建连接工厂时使用的代码:

代码语言:javascript
运行
复制
public JmsConnectionFactory websphereConnectionFactory() throws JMSException
          {

    Logger logger = Logger.getLogger(Config.class);

    logger.info("ibmMqChannel = " + ibmMqChannel);
    logger.info("ibmMqHost = " + ibmMqHost);
    logger.info("ibmMqPort = " + ibmMqPort);
    logger.info("ibmMqQueueManagerName = " + ibmMqQueueManagerName);


    /*
     * Create MQConnectionFactory
     */
    final MQConnectionFactory connectionFactory = new MQConnectionFactory();
    connectionFactory.setHostName(ibmMqHost);
    connectionFactory.setPort(ibmMqPort);
    connectionFactory.setChannel(ibmMqChannel);
    connectionFactory.setQueueManager(ibmMqQueueManagerName);
    connectionFactory.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_CLIENT);

    logger.debug("connectionFactory=" + connectionFactory.toString());

    /*
     * Add ConnectionFactory to JmsConfiguration
     */
    final JmsConfiguration jmsConfiguration = new JmsConfiguration();
    jmsConfiguration.setConnectionFactory(connectionFactory);

    /*
     * Add JmsConfiguration to JmsComponent
     */
    final JmsComponent jmsComponent = new JmsComponent();
    jmsComponent.setConfiguration(jmsConfiguration);
    jmsComponent.setAcknowledgementModeName("AUTO_ACKNOWLEDGE");

    /*
     * Add JmsComponent to camelContext
     */
    camelContext.addComponent("message-queue", jmsComponent);


    return connectionFactory;

}

在启动应用程序和测试连接之后,它立即开始关闭。不会引发任何异常。在本地测试时,我使用的是不同的配置文件,而是连接到ActiveMQ服务器。它运行得很好,可以做它应该做的事情。

任何帮助都将不胜感激!

/Katarina

在关闭路线之前,下面是日志的摘录:

代码语言:javascript
运行
复制
2018-01-23 12:13:05:501 o.a.camel.component.jms.JmsConsumer DEBUG - Successfully tested JMS Connection on startup for destination: MY.QUEUE.NAME
2018-01-23 12:13:05:501 o.a.camel.component.jms.JmsConsumer TRACE - Starting listener container org.apache.camel.component.jms.DefaultJmsMessageListenerContainer@7b02881e on destination MY.QUEUE.NAME
2018-01-23 12:13:05:532 o.a.c.c.j.DefaultJmsMessageListenerContainer DEBUG - Established shared JMS Connection
2018-01-23 12:13:05:532 o.a.c.u.c.CamelThreadFactory TRACE - Created thread[Camel (Client Robur messaging service) thread #1 - JmsConsumer[MY.QUEUE.NAME]] -> Thread[Camel (Client Robur messaging service) thread #1 - JmsConsumer[MY.QUEUE.NAME],5,main]
2018-01-23 12:13:05:547 o.a.c.c.j.DefaultJmsMessageListenerContainer DEBUG - Resumed paused task: org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker@503d687a
2018-01-23 12:13:05:547 o.a.camel.component.jms.JmsConsumer DEBUG - Started listener container org.apache.camel.component.jms.DefaultJmsMessageListenerContainer@7b02881e on destination MY.QUEUE.NAME
2018-01-23 12:13:05:547 o.a.camel.spring.SpringCamelContext INFO  - Route: RouteReceiver started and consuming from: message-queue://MY.QUEUE.NAME?errorHandlerLoggingLevel=TRACE&jmsMessageType=Text&testConnectionOnStartup=true
2018-01-23 12:13:05:547 o.a.camel.support.ServiceSupport TRACE - Starting service
2018-01-23 12:13:05:547 o.a.camel.spring.SpringCamelContext INFO  - Total 1 routes, of which 1 are started
2018-01-23 12:13:05:547 o.a.camel.spring.SpringCamelContext INFO  - Apache Camel 2.20.1 (CamelContext: Client Robur messaging service) started in 5.974 seconds
2018-01-23 12:13:05:547 o.a.camel.spring.SpringCamelContext DEBUG - start() took 5974 millis
2018-01-23 12:13:05:563 o.a.camel.spring.SpringCamelContext DEBUG - onApplicationEvent: org.springframework.boot.context.event.ApplicationReadyEvent[source=org.springframework.boot.SpringApplication@53976f5c]
2018-01-23 12:13:05:563 se.tradechannel.IbmMqApplication INFO  - Started IbmMqApplication in 37.347 seconds (JVM running for 39.742)
2018-01-23 12:13:05:563 se.tradechannel.IbmMqApplication INFO  - Message Queue application started.
2018-01-23 12:13:05:563 o.a.c.c.j.DefaultJmsMessageListenerContainer TRACE - runningAllowed() -> true
2018-01-23 12:13:05:766 o.a.camel.spring.SpringCamelContext DEBUG - onApplicationEvent: org.springframework.context.event.ContextClosedEvent[source=org.springframework.context.annotation.AnnotationConfigApplicationContext@621be5d1: startup date [Tue Jan 23 12:12:29 CET 2018]; root of context hierarchy]
2018-01-23 12:13:05:766 o.a.camel.spring.SpringCamelContext INFO  - Apache Camel 2.20.1 (CamelContext: Client Robur messaging service) is shutting down
2018-01-23 12:13:05:766 org.apache.camel.util.ServiceHelper TRACE - Stopping service org.apache.camel.impl.DefaultRouteController@35e2d654
2018-01-23 12:13:05:766 org.apache.camel.util.ServiceHelper TRACE - Shutting down service org.apache.camel.impl.DefaultRouteController@35e2d654
2018-01-23 12:13:05:766 o.a.camel.support.ServiceSupport TRACE - Service already stopped
2018-01-23 12:13:05:766 o.a.c.impl.DefaultShutdownStrategy INFO  - Starting to graceful shutdown 1 routes (timeout 300 seconds)
2018-01-23 12:13:05:766 o.a.c.m.DefaultManagementLifecycleStrategy TRACE - Checking whether to register org.apache.camel.util.concurrent.RejectableThreadPoolExecutor@279ccd56[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0][ShutdownTask] from route: null
2018-01-23 12:13:05:766 o.a.c.i.DefaultExecutorServiceManager DEBUG - Created new ThreadPool for source: org.apache.camel.impl.DefaultShutdownStrategy@1e800aaa with name: ShutdownTask. -> org.apache.camel.util.concurrent.RejectableThreadPoolExecutor@279ccd56[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0][ShutdownTask]
2018-01-23 12:13:05:766 o.a.c.u.c.CamelThreadFactory TRACE - Created thread[Camel (Client Robur messaging service) thread #2 - ShutdownTask] -> Thread[Camel (Client Robur messaging service) thread #2 - ShutdownTask,5,main]
2018-01-23 12:13:05:766 o.a.c.impl.DefaultShutdownStrategy DEBUG - There are 1 routes to shutdown
2018-01-23 12:13:05:766 o.a.c.impl.DefaultShutdownStrategy TRACE - Shutting down route: RouteReceiver with options [Default,CompleteCurrentTaskOnly]
2018-01-23 12:13:05:766 o.a.c.impl.DefaultShutdownStrategy TRACE - Suspending: Consumer[message-queue://MY.QUEUE.NAME?errorHandlerLoggingLevel=TRACE&jmsMessageType=Text&testConnectionOnStartup=true]
2018-01-23 12:13:05:766 org.apache.camel.util.ServiceHelper TRACE - Suspending service Consumer[message-queue://MY.QUEUE.NAME?errorHandlerLoggingLevel=TRACE&jmsMessageType=Text&testConnectionOnStartup=true]
2018-01-23 12:13:05:766 o.a.c.c.j.DefaultJmsMessageListenerContainer DEBUG - Stopping listenerContainer: org.apache.camel.component.jms.DefaultJmsMessageListenerContainer@7b02881e with cacheLevel: 3 and sharedConnectionEnabled: true
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-23 15:31:32

你在用SpringBoot吗?如果是,是否有可能您的应用程序不阻塞,因此在启动后简单地关闭,因为主方法已经完成?

根据http://camel.apache.org/spring-boot.html,有许多方法可以阻止SpringBoot应用程序中的主线程(有关更多细节,请参见链接):

  • 路由类扩展了org.apache.camel.spring.boot.FatJarRouter
  • 使用CamelSpringBootApplicationController.blockMainThread()
  • spring-boot-starter-web依赖项包含在pom.xml中
  • 在属性或YAML文件中将属性camel.springboot.main-run-controller设置为true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48401308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档