代码之家  ›  专栏  ›  技术社区  ›  San Jaisy

处理bean注册[io.micronaut.rabbitmq.secept.rabbitmq用户建议]时出错

  •  0
  • San Jaisy  · 技术社区  · 5 年前

    试图在micronat中使用rabbit testcontainer执行JUnit5,但出现了异常 Error disposing of bean registration [io.micronaut.rabbitmq.intercept.RabbitMQConsumerAdvice]: connection is already closed due to clean connection shutdown

    通道池

    @Singleton
    public class ChannelPoolListener  extends ChannelInitializer{
        @Override
        public void initialize(Channel channel) throws IOException {
            channel.exchangeDeclare(ConstantValues.FETE_BIRD_EXCHANGE, BuiltinExchangeType.DIRECT, true);
    
            channel.queueDeclare(ConstantValues.COUNT_SUB_CATEGORY, true, false, false, null);
            channel.queueBind(ConstantValues.COUNT_SUB_CATEGORY, ConstantValues.FETE_BIRD_EXCHANGE, ConstantValues.COUNT_SUB_CATEGORY);
        }
    }
    

    Rabbit MQ侦听器

    @Queue(ConstantValues.COUNT_SUB_CATEGORY)
        public Maybe<Long> Count(String id) {
            SubCategorySearchCriteria criteria = new SubCategorySearchCriteria();
            criteria.setId(id);
            Bson query = QueryBuilder.QueryBuilder(criteria, Bson.class).get(0);
            return Single.fromPublisher(
                    this.repository.getCollection(ConstantValues.PRODUCT_SUB_CATEGORY_COLLECTION_NAME, SubCategory.class)
                            .countDocuments(query)
            ).toMaybe();
        }
    

    Micronaut测试

    @MicronautTest
    @Testcontainers
    public class CategoryListenerTest {
        private final IProductProducer iProductProducer;
    
        public CategoryListenerTest(IProductProducer iProductProducer) {
            this.iProductProducer = iProductProducer;
        }
    
        @Container
        private static final RabbitMQContainer RABBIT_MQ_CONTAINER = new RabbitMQContainer("rabbitmq")
                .withExposedPorts(5672, 15672);
    
        @BeforeEach
        @DisplayName("Container should be running")
        void containerShouldBeRunning() {
            Assertions.assertTrue(RABBIT_MQ_CONTAINER.isRunning());
        }
    
        @Test
        @DisplayName("Should search based on the name")
        void shouldSearchBasedOnTheName() {
            iProductProducer.findFreeText("Value");
        }
    }
    

    例外情况

    ERROR i.m.context.DefaultBeanContext - Error disposing of bean registration [io.micronaut.rabbitmq.intercept.RabbitMQConsumerAdvice]: connection is already closed due to clean connection shutdown; protocol method: #method<connection.close>(reply-code=200, reply-text=OK, class-id=0, method-id=0)
    com.rabbitmq.client.AlreadyClosedException: connection is already closed due to clean connection shutdown; protocol method: #method<connection.close>(reply-code=200, reply-text=OK, class-id=0, method-id=0)
        at com.rabbitmq.client.impl.AMQChannel.ensureIsOpen(AMQChannel.java:258)
        at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:341)
        at com.rabbitmq.client.impl.ChannelN.basicCancel(ChannelN.java:1491)
        at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.basicCancel(AutorecoveringChannel.java:642)
        at io.micronaut.rabbitmq.intercept.RabbitMQConsumerAdvice.close(RabbitMQConsumerAdvice.java:312)
        at io.micronaut.rabbitmq.intercept.$RabbitMQConsumerAdviceDefinition.dispose(Unknown Source)
        at io.micronaut.inject.DisposableBeanDefinition.dispose(DisposableBeanDefinition.java:41)
        at io.micronaut.context.DefaultBeanContext.stop(DefaultBeanContext.java:290)
        at io.micronaut.context.DefaultApplicationContext.stop(DefaultApplicationContext.java:171)
        at io.micronaut.messaging.MessagingApplication.stop(MessagingApplication.java:97)
        at io.micronaut.test.extensions.AbstractMicronautExtension.stopEmbeddedApplication(AbstractMicronautExtension.java:380)
        at io.micronaut.test.extensions.AbstractMicronautExtension.afterClass(AbstractMicronautExtension.java:307)
        at io.micronaut.test.extensions.junit5.MicronautJunit5Extension.afterAll(MicronautJunit5Extension.java:90)
        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeAfterAllCallbacks$14(ClassBasedTestDescriptor.java:434)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeAfterAllCallbacks$15(ClassBasedTestDescriptor.java:434)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeAfterAllCallbacks(ClassBasedTestDescriptor.java:434)
        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.after(ClassBasedTestDescriptor.java:216)
        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.after(ClassBasedTestDescriptor.java:78)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:149)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:149)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248)
        at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211)
        at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
        at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
        at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
        at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
        at com.sun.proxy.$Proxy2.stop(Unknown Source)
        at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:133)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
        at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
        at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
        at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
        at java.base/java.lang.Thread.run(Thread.java:832)
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   James Kleeh    5 年前

    这是一个bug。请将问题提交至 https://github.com/micronaut-projects/micronaut-rabbitmq