Spring Boot Sping Boot 3.2.0使用JMS进行单元测试,因为无法连接任何嵌入式ActiveMQ Broker,我该怎么做?

h43kikqp  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(200)

我想用EmbeddedActiveMQBroker创建连接,还想在Message中设置String属性,以便侦听器可以从Message中提取这些String属性。我想使用Message.class发送和接收消息。
我的目标是在这个消息集合中生成消息,并将消息生成到输入队列。下一部分是我的侦听器应该能够从这个输入队列中侦听,并能够从消息中提取这些字符串属性。

  1. import org.apache.activemq.junit.EmbeddedActiveMQBroker;
  2. import org.junit.ClassRule;
  3. import org.junit.jupiter.api.Assertions;
  4. import org.junit.jupiter.api.Test;
  5. import org.junit.runner.RunWith;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.mock.mockito.MockBean;
  8. import org.springframework.test.context.junit4.SpringRunner;
  9. @RunWith(SpringRunner.class)
  10. public class JmsMessageListeningAndSendingTest extends IntegrationTestBase {
  11. @ClassRule
  12. public static EmbeddedActiveMQBroker embeddedBroker = new EmbeddedActiveMQBroker();
  13. }

x

  1. Application.yml
  2. activemq:
  3. broker-url: tcp://localhost:61616
  4. close-timeout: 15
  5. packages:
  6. trusted: com.broker.activemq.entities,java.lang
  7. password: admin
  8. user: admin
  9. in-memory: true
  10. pool:
  11. enabled: false
  1. build.gradle
  2. testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.1'
  3. testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.9.1'
  4. testImplementation 'org.mockito:mockito-junit-jupiter:4.8.1'
  5. testImplementation 'org.springframework.boot:spring-boot-starter-test'
  6. testImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner:4.1.0'
  7. testImplementation 'org.mockito:mockito-core:5.8.0'
  8. testImplementation 'org.testcontainers:testcontainers:1.19.3'
  9. runtimeOnly 'com.h2database:h2'
  10. annotationProcessor 'org.projectlombok:lombok'
  11. implementation 'org.apache.activemq:activemq-broker:6.0.1'
  12. implementation 'org.apache.activemq:activemq-all:6.0.1'
  13. testImplementation 'org.apache.activemq.tooling:activemq-junit:6.0.1'
  14. testImplementation 'org.testcontainers:junit-jupiter:1.16.3'
  1. Error Description:
  2. java.lang.NoClassDefFoundError: javax/jms/JMSException
  3. at java.base/java.lang.ClassLoader.defineClass1(Native Method)
  4. at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
  5. at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
  6. at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
  7. at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
  8. at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
  9. at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
  10. at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
  11. at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
  12. at org.apache.activemq.junit.EmbeddedActiveMQBroker.<init>(EmbeddedActiveMQBroker.java:69)

的数据

kg7wmglp

kg7wmglp1#

正如注解中所指出的,这一定是SB3(jaktip)和ActiveMQ嵌入式版本的依赖性问题。
从v6开始,ActiveMQ现在是兼容jakmet的。
你应该使用下面的6.0.1,并尝试看看它是否解决了你的问题。
梅文:

  1. <groupId>org.apache.activemq.tooling</groupId>
  2. <artifactId>activemq-junit</artifactId>
  3. <version>6.0.1</version>

字符串
或gradle:

  1. org.apache.activemq.tooling:activemq-junit:6.0.1


如果这个依赖本身没有修复,你仍然可以按照guide从java创建EmbeddedServer。

编辑

在看到gradle文件后,错误部分是

  1. implementation 'org.apache.activemq:activemq-all:5.4.2'


它将混合ActiveMQ 6与5个依赖项。
你也应该升级到6.0.1

展开查看全部

相关问题