Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Manually Startup the No-autoStartup Stream RabbitListener Fail #470

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
ldcsaa opened this issue Dec 8, 2023 · 0 comments
Closed

Manually Startup the No-autoStartup Stream RabbitListener Fail #470

ldcsaa opened this issue Dec 8, 2023 · 0 comments
Labels
bug Something isn't working

Comments

@ldcsaa
Copy link

ldcsaa commented Dec 8, 2023

Describe the bug

streaam-client version: 0.14.0

Create a RabbitListener and set it's property autoStartup = "false", but startup the listener fail manually at later. Because the listener lost the host and port attributes, and always try to connect localhost:5552.

define listener

// define a no-autoStartup listener
@RabbitListener(queues = "test-queue", autoStartup = "false", containerFactory = "secondStreamRabbitListenerContainerFactory")
public void onSecondStreamMessage(com.rabbitmq.stream.Message message, Context context) throws IOException
{
	// do something .
}

startup listener manually

@Component
public class RabbitmqReadOnlyEventListener
{
    @Autowired
    private RabbitListenerEndpointRegistry registry;
    
    private void doSwitch(boolean readOnly)
    {
        if(readOnly)
            registry.stop();
        else
            registry.start();
    }
}

When I try to startup the listener, it would output the next errors (try to connect localhost:5552):

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-12-08 17:59:28.677 INFO  [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-2] o.s.a.rabbit.listener.SimpleMessageListenerContainer#lambda$shutdownAndWaitOrCallback$2(L:645) -> Waiting for workers to finish.
2023-12-08 17:59:28.679 INFO  [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#1-2] o.s.a.rabbit.listener.SimpleMessageListenerContainer#lambda$shutdownAndWaitOrCallback$2(L:645) -> Waiting for workers to finish.
2023-12-08 17:59:29.316 INFO  [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-2] o.s.a.rabbit.listener.SimpleMessageListenerContainer#lambda$shutdownAndWaitOrCallback$2(L:649) -> Successfully waited for workers to finish.
2023-12-08 17:59:29.340 INFO  [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#1-2] o.s.a.rabbit.listener.SimpleMessageListenerContainer#lambda$shutdownAndWaitOrCallback$2(L:649) -> Successfully waited for workers to finish.
2023-12-08 17:59:33.447 ERROR [main] o.s.b.SpringApplication#reportFailure(L:824) -> Application run failed
com.rabbitmq.stream.impl.ConnectionStreamException: Error while creating stream connection to localhost:5552
	at com.rabbitmq.stream.impl.Client.<init>(Client.java:326) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.Utils.lambda$null$9(Utils.java:158) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.Utils$ExactNodeRetryClientFactory.client(Utils.java:313) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.Utils.lambda$coordinatorClientFactory$10(Utils.java:159) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.ProducersCoordinator$ClientProducersManager.<init>(ProducersCoordinator.java:688) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.ProducersCoordinator$ClientProducersManager.<init>(ProducersCoordinator.java:559) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.ProducersCoordinator.addToManager(ProducersCoordinator.java:159) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.ProducersCoordinator.registerAgentTracker(ProducersCoordinator.java:113) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.ProducersCoordinator.registerTrackingConsumer(ProducersCoordinator.java:104) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.StreamEnvironment.registerTrackingConsumer(StreamEnvironment.java:797) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.StreamConsumer.<init>(StreamConsumer.java:98) ~[stream-client-0.14.0.jar:0.14.0]
	at com.rabbitmq.stream.impl.StreamConsumerBuilder.build(StreamConsumerBuilder.java:238) ~[stream-client-0.14.0.jar:0.14.0]
	at org.springframework.rabbit.stream.listener.StreamListenerContainer.start(StreamListenerContainer.java:237) ~[spring-rabbit-stream-3.0.10.jar:3.0.10]
	at org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry.startIfNecessary(RabbitListenerEndpointRegistry.java:289) ~[spring-rabbit-3.0.10.jar:3.0.10]
	at org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry.start(RabbitListenerEndpointRegistry.java:239) ~[spring-rabbit-3.0.10.jar:3.0.10]
	at io.github.hpsocket.soa.starter.rabbitmq.consumer.listener.RabbitmqReadOnlyEventListener.doSwitch(RabbitmqReadOnlyEventListener.java:42) ~[classes/:?]
	at io.github.hpsocket.soa.starter.rabbitmq.consumer.listener.RabbitmqReadOnlyEventListener.onApplicationEvent(RabbitmqReadOnlyEventListener.java:33) ~[classes/:?]
	at io.github.hpsocket.soa.starter.rabbitmq.consumer.listener.RabbitmqReadOnlyEventListener.onApplicationEvent(RabbitmqReadOnlyEventListener.java:14) ~[classes/:?]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:174) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:445) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-6.0.14.jar:6.0.14]
	at io.github.hpsocket.soa.framework.web.holder.SpringContextHolder.publishEvent(SpringContextHolder.java:41) ~[classes/:?]
	at io.github.hpsocket.soa.framework.web.listener.ReadOnlyContextRefreshedEventListener.onApplicationEvent(ReadOnlyContextRefreshedEventListener.java:26) ~[classes/:?]
	at io.github.hpsocket.soa.framework.web.listener.ReadOnlyContextRefreshedEventListener.onApplicationEvent(ReadOnlyContextRefreshedEventListener.java:15) ~[classes/:?]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:174) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:445) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:969) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:619) ~[spring-context-6.0.14.jar:6.0.14]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.1.6.jar:3.1.6]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:738) ~[spring-boot-3.1.6.jar:3.1.6]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:440) ~[spring-boot-3.1.6.jar:3.1.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) ~[spring-boot-3.1.6.jar:3.1.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.6.jar:3.1.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.6.jar:3.1.6]
	at io.github.hpsocket.soa.framework.web.server.main.AppStarter.main(AppStarter.java:39) ~[classes/:?]
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/127.0.0.1:5552
Caused by: java.net.ConnectException: Connection refused: no further information
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[?:?]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[?:?]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:946) ~[?:?]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
	at java.base/java.lang.Thread.run(Thread.java:833) [?:?]

I step into the code of com.rabbitmq.stream.impl.Utils#coordinatorClientFactory(), variable address always is 'localhost:5552'.

static ClientFactory coordinatorClientFactory(StreamEnvironment environment) {
  return context -> {
    ClientParameters parametersCopy = context.parameters().duplicate();
    // address always is 'localhost:5552'
    Address address = new Address(parametersCopy.host(), parametersCopy.port());
    address = environment.addressResolver().resolve(address);
    parametersCopy.host(address.host()).port(address.port());

    if (context.key() == null) {
      throw new IllegalArgumentException("A key is necessary to create the client connection");
  }

  // ... ...

}

but the environment param is right:
image

Reproduction steps

  1. create a no-autostartup listener
  2. startup application
  3. startup listener manually at later

Expected behavior

startup listener succ

Additional context

No response

@ldcsaa ldcsaa added the bug Something isn't working label Dec 8, 2023
@rabbitmq rabbitmq locked and limited conversation to collaborators Dec 8, 2023
@michaelklishin michaelklishin converted this issue into discussion #471 Dec 8, 2023

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant