我有一个Spring应用程序,它与一个rabbitmq代理接口,它能够很好地启动,但是无论队列中是否有消息,我都会不断地启动/关闭消息消费者。下面是我的应用程序日志和客户端类的副本:
2016-10-19 11:40:25,909警告t:SimpleAsyncTaskExecutor-106 SimpleMessageListenerContainer:消费者引发的例外,如果连接工厂支持它,则可以重新启动com.rabbitmq.client.impl.ChannelN.validateQueueNameLength(ChannelN.java:1232) ~amqp 3.5.5.jar:na at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:884) ~amqp 3.5.5.jar:na at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:61) ~amqp 3.5.5.jar:na at sun.reflect.GeneratedMethodAccessor334.invoke(Unknown Source) ~na:na at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~na:1.8.0_51 at java.lang.reflect.Method.invoke(Method.java:497) ~na:1.8.0_51 at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:666) ~spring-兔子-1.4.6 RELEASE.jar:na at com.sun.proxy.$Proxy181.queueDeclarePassive(Unknown源) ~na:na在org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:533) ~春季-兔子:na在org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:453) ~春季-兔子:na在org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1083) ~春季-兔子-1.4.6.RELEASE.jar:na at java.lang.Thread.run(Thread.java:745) na:1.8.0_51 2016-10-19 11:40:25,909 INFO t:SimpleAsyncTaskExecutor-106 SimpleMessageListenerContainer:重新启动消费者: tags={},channel=Cached兔子频道:AMQChannel(amqp://来宾@127.0.0.1:5672/,1),acknowledgeMode=AUTO本地队列size=0 2016-10-19 11:40:25,910调试t:SimpleAsyncTaskExecutor-106 BlockingQueueConsumer:关闭兔子频道:缓存兔通道:AMQChannel(amqp://来宾@127.0.0.1:5672/,1)2016-10-1911:40:25,910调试:SimpleAsyncTaskExecutor-106 CachingConnectionFactory:关闭缓存通道:AMQChannel(amqp://来宾@127.0.0.1:5672/,1) 2016-10-19 11:40:25 911调试t:SimpleAsyncTaskExecutor-107 DefaultListableBeanFactory:返回单例bean 'macRequestQueue‘2016的缓存实例-10-19 11:40:25 911调试t:SimpleAsyncTaskExecutor-107 BlockingQueueConsumer:启动消费者: tags={},channel=null,acknowledgeMode=AUTO本地队列size=0 2016-10-19 11:40:25,912调试t:SimpleAsyncTaskExecutor-107 CachingConnectionFactory:从AMQChannel创建缓存兔子信道(amqp://来宾@127.0.0.1:5672/,1) 2016-10-19 11:40:25,912调试t:SimpleAsyncTaskExecutor-107 SimpleMessageListenerContainer:在5000 ms内恢复消费者。
下面是我的客户端类的副本:
public class RabbitClientConfiguration extends AbstractEMCRabbitConfiguration {
@Inject
private JacksonConfiguration jacksonConfiguration;
@Inject
private MessagingConfiguration messagingConfiguration;
//@Value("${data.core.pattern}")
//private String coreDataRoutingKey;
//@Inject
//private ClientHandler clientHandler;
@Override
public void configureRabbitTemplate(RabbitTemplate rabbitTemplate) {
rabbitTemplate.setRoutingKey(MAC_REQUEST_ROUTING_KEY);
}
@Bean
public SimpleMessageListenerContainer messageListenerContainer(){
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory());
container.setQueueNames(MAC_REQUEST_QUEUE_NAME);
container.setMessageListener(messageListenerAdapter());
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
return container;
}
@Bean
MessageListenerAdapter messageListenerAdapter(){
return new MessageListenerAdapter(clientHandler(jacksonConfiguration.objectMapper(),messagingConfiguration.macMessageHandler(messagingConfiguration.messagingFactory())),jsonMessageConverter());
//return new MessageListenerAdapter(clientHandler,"receiveMessage");
}
@Bean
ClientHandler clientHandler(ObjectMapper objectMapper, IMessageHandler macMessageHandler){
ClientHandler clientHandler = new ClientHandler();
clientHandler.setObjectMapper(objectMapper);
clientHandler.setMacMessageHandler(macMessageHandler);
return clientHandler;
}
@Bean
public AmqpAdmin rabbitAdmin() { return new RabbitAdmin(connectionFactory());}
}发布于 2016-10-19 13:13:57
com.rabbitmq.client.impl.ChannelN.validateQueueNameLength : java.lang.NullPointerException: null
这意味着MAC_REQUEST_QUEUE_NAME包含null --在调用setter时,容器似乎没有检查这一点。
我打开了一个JIRA问题来检测这种情况。
https://stackoverflow.com/questions/40129656
复制相似问题