无法在 IntelliJ 中使用 ActiveMQ 启动监听器 Java 应用程序

问题描述 投票:0回答:1

我有一个侦听队列的 Java MQ 侦听器应用程序。当我在本地使用时,我使用ActiveMQ发送消息,我的问题是:

尝试使用 ActiveMQ 在 IntelliJ 中运行此侦听器应用程序时遇到问题。当我使用 ActiveMQ 来使用 Eclipse 时,它工作得很好,它是同一个应用程序,我认为这与我的 IntelliJ 消息配置有关。

这是我的 JmsConfig 类:

package br.com.company.hub.mq.app.jms;

import javax.jms.ConnectionFactory;
import javax.jms.JMSException;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.component.jms.JmsComponent;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.core.JmsTemplate;

import com.ibm.msg.client.jms.JmsConnectionFactory;
import com.ibm.msg.client.jms.JmsConstants;
import com.ibm.msg.client.jms.JmsFactoryFactory;
import com.ibm.msg.client.wmq.common.CommonConstants;

/** Configuration class for creating mq connection and jms component */

@Configuration
public class JmsConfig {

  private String host;
  private Integer port;
  private String queueManager;
  private String channel;

  public JmsConfig(@Value("${queue.host}") String host, @Value("${queue.port}") Integer port,
      @Value("${queue.queue-manager}") String queueManager, @Value("${queue.channel}") String channel) {

    this.host = host;
    this.port = port;
    this.queueManager = queueManager;
    this.channel = channel;
  }

  @Bean("jmsConnectionFactory")
  @ConditionalOnProperty(value = "is-localhost", havingValue = "true", matchIfMissing = false)
  public ConnectionFactory activeMqConnectionFactory() {
    return new ActiveMQConnectionFactory("tcp://localhost:61616");
  }

  @Bean("jmsConnectionFactory")
  @ConditionalOnProperty(value = "is-localhost", havingValue = "false", matchIfMissing = false)
  public ConnectionFactory ibmMqConnectionFactory() throws JMSException {

    final JmsFactoryFactory ff = JmsFactoryFactory.getInstance(JmsConstants.WMQ_PROVIDER);
    final JmsConnectionFactory cf = ff.createConnectionFactory();

    cf.setStringProperty(CommonConstants.WMQ_HOST_NAME, this.host);
    cf.setStringProperty(CommonConstants.WMQ_QUEUE_MANAGER, this.queueManager);
    cf.setStringProperty(CommonConstants.WMQ_CHANNEL, this.channel);
    cf.setIntProperty(CommonConstants.WMQ_PORT, this.port);
    cf.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_BINDINGS_THEN_CLIENT);
    cf.setIntProperty(CommonConstants.WMQ_CLIENT_RECONNECT_OPTIONS, CommonConstants.WMQ_CLIENT_RECONNECT_Q_MGR);

    return cf;
  }

  @Bean
  public JmsTemplate jmsTemplate(final ConnectionFactory jmsConnectionFactory) {
    return new JmsTemplate(jmsConnectionFactory);
  }


  @Bean(name = "wmq")
  public JmsComponent jmsComponent(final ConnectionFactory jmsConnectionFactory) {
    return JmsComponent.jmsComponent(jmsConnectionFactory);
  }
}

这是 ActiveMQ 依赖项:

    <!-- MQ Local Tests -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>5.16.7</version>
        <scope>provided</scope>     
    </dependency>

这是我运行时的错误:

 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.4)

14:26:09.702[-preinit] DEBUG                        org.jboss.logging  :  :  : Logging Provider: org.jboss.logging.Slf4jLoggerProvider found via system property
14:26:09.706[-preinit] INFO       o.h.validator.internal.util.Version  :  :  : HV000001: Hibernate Validator 8.0.1.Final
14:26:09.795[    main] INFO  .c.s.j.c.AppMQ  :  :  : Starting AppMQ using Java 17.0.9 with PID 12900 (C:\Repositories\app-mq-v1\target\classes started by xx in C:\Users\xxx\IdeaProjects\untitled)
14:26:09.795[    main] DEBUG .c.s.j.c.AppMQ  :  :  : Running with Spring Boot v3.2.4, Spring v6.1.5
14:26:09.797[    main] INFO  .c.s.j.c.AppMQ  :  :  : The following 1 profile is active: "dev"
14:26:11.960[    main] TRACE   o.s.c.c.CacheOrGroupedOpenApiCondition  :  :  : Condition CacheOrGroupedOpenApiCondition on org.springdoc.core.configuration.SpringDocConfiguration#springdocBeanFactoryPostProcessor did not match due to AnyNestedCondition 0 matched 2 did not; NestedCondition on CacheOrGroupedOpenApiCondition.OnCacheDisabled found non-matching nested conditions @ConditionalOnProperty (springdoc.cache.disabled) did not find property 'springdoc.cache.disabled'; NestedCondition on CacheOrGroupedOpenApiCondition.OnMultipleOpenApiSupportCondition AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiSupportCondition.OnActuatorDifferentPort found non-matching nested conditions @ConditionalOnProperty (springdoc.show-actuator) did not find property 'springdoc.show-actuator'; NestedCondition on MultipleOpenApiSupportCondition.OnMultipleOpenApiSupportCondition AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupConfigProperty @ConditionalOnProperty (springdoc.group-configs[0].group) did not find property 'springdoc.group-configs[0].group'; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupedOpenApiBean @ConditionalOnBean (types: org.springdoc.core.models.GroupedOpenApi; SearchStrategy: all) did not find any beans of type org.springdoc.core.models.GroupedOpenApi
14:26:11.993[    main] TRACE  o.s.c.c.MultipleOpenApiSupportCondition  :  :  : Condition MultipleOpenApiSupportCondition on org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration did not match due to AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiSupportCondition.OnActuatorDifferentPort found non-matching nested conditions @ConditionalOnProperty (springdoc.show-actuator) did not find property 'springdoc.show-actuator'; NestedCondition on MultipleOpenApiSupportCondition.OnMultipleOpenApiSupportCondition AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupConfigProperty @ConditionalOnProperty (springdoc.group-configs[0].group) did not find property 'springdoc.group-configs[0].group'; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupedOpenApiBean @ConditionalOnBean (types: org.springdoc.core.models.GroupedOpenApi; SearchStrategy: all) did not find any beans of type org.springdoc.core.models.GroupedOpenApi
14:26:13.741[    main] INFO  o.s.b.w.e.j.JettyServletWebServerFactory  :  :  : Server initialized with port: 7800
14:26:13.744[    main] INFO           org.eclipse.jetty.server.Server  :  :  : jetty-12.0.7; built: 2024-02-29T21:19:41.771Z; git: c89aca8fd34083befd79f328a3b8b6ffff04347e; jvm 17.0.9+11-LTS-201
14:26:13.810[    main] INFO      o.e.j.s.h.ContextHandler.application  :  :  : Initializing Spring embedded WebApplicationContext
14:26:13.810[    main] INFO  w.s.c.ServletWebServerApplicationContext  :  :  : Root WebApplicationContext: initialization completed in 3927 ms
14:26:14.342[    main] INFO     o.e.j.session.DefaultSessionIdManager  :  :  : Session workerName=node0
14:26:14.371[    main] INFO   o.e.jetty.server.handler.ContextHandler  :  :  : Started osbwej.JettyEmbeddedWebAppContext@24d7657b{application,/,b=[file:/C:/Users/xxx/AppData/Local/Temp/jetty-docbase.7800.15218493539891600500/, jar:file:///C:/Users/xxx/.m2/repository/org/webjars/swagger-ui/4.18.2/swagger-ui-4.18.2.jar!/META-INF/resources/],a=AVAILABLE,h=oeje10s.SessionHandler@72e49f6a{STARTED}}
14:26:14.372[    main] INFO     o.e.j.e.servlet.ServletContextHandler  :  :  : Started osbwej.JettyEmbeddedWebAppContext@24d7657b{application,/,b=[file:/C:/Users/xxx/AppData/Local/Temp/jetty-docbase.7800.15218493539891600500/, jar:file:///C:/Users/xxx/.m2/repository/org/webjars/swagger-ui/4.18.2/swagger-ui-4.18.2.jar!/META-INF/resources/],a=AVAILABLE,h=oeje10s.SessionHandler@72e49f6a{STARTED}}
14:26:14.378[    main] INFO           org.eclipse.jetty.server.Server  :  :  : Started oejs.Server@5072e638{STARTING}[12.0.7,sto=0] @7290ms
14:26:15.040[    main] WARN  ConfigServletWebServerApplicationContext  :  :  : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsConnectionFactory' defined in class path resource [br/com/company/hub/mq/app/jms/JmsConfig.class]: Failed to instantiate [javax.jms.ConnectionFactory]: Factory method 'activeMqConnectionFactory' threw exception with message: org/apache/activemq/ActiveMQConnectionFactory
14:26:15.055[    main] INFO           org.eclipse.jetty.server.Server  :  :  : Stopped oejs.Server@5072e638{STOPPING}[12.0.7,sto=0]
14:26:15.060[    main] INFO     o.e.j.e.servlet.ServletContextHandler  :  :  : Stopped osbwej.JettyEmbeddedWebAppContext@24d7657b{application,/,b=[file:/C:/Users/xxx/AppData/Local/Temp/jetty-docbase.7800.15218493539891600500/, jar:file:///C:/Users/xxx/.m2/repository/org/webjars/swagger-ui/4.18.2/swagger-ui-4.18.2.jar!/META-INF/resources/],a=AVAILABLE,h=oeje10s.SessionHandler@72e49f6a{STOPPED}}
14:26:15.086[    main] INFO  .s.b.a.l.ConditionEvaluationReportLogger  :  :  : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
14:26:15.116[    main] ERROR               o.s.boot.SpringApplication  :  :  : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsConnectionFactory' defined in class path resource [br/com/company/hub/mq/app/jms/JmsConfig.class]: Failed to instantiate [javax.jms.ConnectionFactory]: Factory method 'activeMqConnectionFactory' threw exception with message: org/apache/activemq/ActiveMQConnectionFactory
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1335)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1165)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
    at br.com.company.jlcaml.clientintegration.AppMQ.main(AppMQ.java:12)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.jms.ConnectionFactory]: Factory method 'activeMqConnectionFactory' threw exception with message: org/apache/activemq/ActiveMQConnectionFactory
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:177)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
    ... 19 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/apache/activemq/ActiveMQConnectionFactory
    at br.com.company.hub.mq.app.jms.JmsConfig.activeMqConnectionFactory(JmsConfig.java:41)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$0.CGLIB$activeMqConnectionFactory$2(<generated>)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$FastClass$$1.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:258)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$0.activeMqConnectionFactory(<generated>)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1335)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1165)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
Caused by: java.lang.ClassNotFoundException: org.apache.activemq.ActiveMQConnectionFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at br.com.company.hub.mq.app.jms.JmsConfig.activeMqConnectionFactory(JmsConfig.java:41)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$0.CGLIB$activeMqConnectionFactory$2(<generated>)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$FastClass$$1.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:258)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
    at br.com.company.hub.mq.app.jms.JmsConfig$$SpringCGLIB$$0.activeMqConnectionFactory(<generated>)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1335)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1165)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)

Process finished with exit code 1```

The focus is to discover which is the difference between IntelliJ and Eclipse when running this app. 

I tryed to install and uninstall IntelliJ several times, I also tryed to install a [JMS Messenger plugin](https://plugins.jetbrains.com/plugin/10949-jms-messenger) in IntelliJ but didn't work.
java spring intellij-idea message-queue spring-jms
1个回答
0
投票

也许可以采用编译后的应用程序组装然后运行的方式来完成。

在此:

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>5.16.7</version>
        <scope>provided</scope>     
    </dependency>

删除

<scope>provided</scope>

原因:

provided

表示您希望 JDK 或容器在运行时提供依赖项

我想 Eclipse 正在为您提供这个。删除该关键字和默认范围 (

compile
) 将被使用,并且此依赖项将在您运行应用程序时可用

参见 https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope

© www.soinside.com 2019 - 2024. All rights reserved.