赞
踩
1、Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused
这个很明显,没有连接配置。增加一个配置文件。
(笨方式,测试用,实际可采用配置文件方式。)
- @Configuration
- public class RabbitMqConfig {
-
- @Bean
- public ConnectionFactory connectionFactory() {
- CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
- connectionFactory.setAddresses("192.168.10.10:5672");
- connectionFactory.setUsername("nei");
- connectionFactory.setPassword("zhao");
- connectionFactory.setVirtualHost("vhost_nei");
- connectionFactory.setPublisherConfirms(true);//消息确认
- connectionFactory.setPublisherReturns(true);
- return connectionFactory;
- }
-
- //注意此下两个bean 有用 有坑时用到
- @Bean
- public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
- RabbitTemplate template = new RabbitTemplate(connectionFactory);
- template.setMessageConverter(new Jackson2JsonMessageConverter());
- return template;
- }
-
- @Bean
- public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
- SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
- factory.setConnectionFactory(connectionFactory);
- factory.setMessageConverter(new Jackson2JsonMessageConverter());
- return factory;
- }
-
- }

2、队列不存在
- org.springframework.amqp.rabbit.listener.QueuesNotAvailableException: Cannot prepare queue for listener. Either the queue doesn't exist or the broker will not allow us to use it.
- at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:514)
- at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1280)
- at java.lang.Thread.run(Thread.java:745)
- Caused by: org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$DeclarationException: Failed to declare queue(s):[hello]
- at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:587)
- at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:486)
- ... 2 common frames omitted
- Caused by: java.io.IOException: null
- at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
- at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
- at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:124)
- at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:885)
- at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:61)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- at java.lang.reflect.Method.invoke(Method.java:498)
- at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:917)
- at com.sun.proxy.$Proxy140.queueDeclarePassive(Unknown Source)
- at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:566)
- ... 3 common frames omitted
- Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'hello' in vhost '/', class-id=50, method-id=10)
- at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
- at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
- at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:361)
- at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:226)
- at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:118)
- ... 12 common frames omitted
- Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'hello' in vhost '/', class-id=50, method-id=10)
- at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:484)
- at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:321)
- at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:144)
- at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:91)
- at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:560)
- ... 1 common frames omitted
- 14:38:51.463 [SimpleAsyncTaskExecutor-1] ERROR o.s.a.r.l.SimpleMessageListenerContainer - Stopping container from aborted consumer
- 14:38:51.478 [localhost-startStop-1] ERROR o.s.boot.SpringApplication - Application startup failed
- org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.amqp.rabbit.config.internalRabbitListenerEndpointRegistry'; nested exception is org.springframework.amqp.AmqpIllegalStateException: Fatal exception on listener startup
- at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176)
- at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
- at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
- at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
- at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
- at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:874)
- at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144)
- at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
- at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
- at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
- at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
- at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151)
- at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131)
- at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86)
- at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
- at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5183)
- at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152)
- at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403)
- at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
- at java.util.concurrent.FutureTask.run(FutureTask.java:266)
- at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
- at java.lang.Thread.run(Thread.java:745)
- Caused by: org.springframework.amqp.AmqpIllegalStateException: Fatal exception on listener startup
- at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doStart(SimpleMessageListenerContainer.java:820)
- at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:550)
- at org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry.startIfNecessary(RabbitListenerEndpointRegistry.java:272)
- at org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry.start(RabbitListenerEndpointRegistry.java:235)
- at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
- ... 23 common frames omitted
- Caused by: org.springframework.amqp.rabbit.listener.QueuesNotAvailableException: Cannot prepare queue for listener. Either the queue doesn't exist or the broker will not allow us to use it.
- at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:514)
- at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1280)
- ... 1 common frames omitted
- Caused by: org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$DeclarationException: Failed to declare queue(s):[hello]
- at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:587)
- at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:486)
- ... 2 common frames omitted

3、无限循环报 org.springframework.amqp.AmqpException: No method found for class 。。。 我的是找不到HashMap。实际应该是一些官方BUG,参照一位网友的解决方案。:
https://www.cnblogs.com/lazio10000/p/5559999.html (感谢)
- @Bean
- public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
- RabbitTemplate template = new RabbitTemplate(connectionFactory);
- template.setMessageConverter(new Jackson2JsonMessageConverter());
- return template;
- }
-
- @Bean
- public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
- SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
- factory.setConnectionFactory(connectionFactory);
- factory.setMessageConverter(new Jackson2JsonMessageConverter());
- return factory;
- }
消费者里添加 containerFactory="rabbitListenerContainerFactory" @Payload
- @RabbitListener(queues = "task", containerFactory="rabbitListenerContainerFactory")
- public void process(@Payload String str) {
-
- logger.info("============="+str);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。