我有一个简单的spring启动应用程序,其中有一个兔子发送器和一个接收器。我想编写一些接收器测试,其中我以Junit类规则(RabbitContainerRule)运行rabbitmq docker实例,然后使用rabbitTemplate发送消息,测试验证接收器是否接收到相同的消息。但我得到了以下例外:
Caused by: 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:178)
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:599)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1424)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'my-message-queue' in vhost '/', class-id=50, method-id=10)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
如果使用管理控制台在docker实例中手动创建队列(通过在断点处停止),则测试通过。
另外,如果我使用docker rabbit实例手动测试它,我的Spring Boot应用程序将成功创建队列。那么,是什么导致它不能在测试中创建呢?
我使用的是SpringAMQP1.7.4版本
接收器代码:
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "my-message-queue", durable = "true",
arguments = {
@Argument(name = "x-dead-letter-exchange", value = "my-message-exchange-dead-letter"),
@Argument(name = "x-dead-letter-routing-key", value = "my-message-queue")}),
exchange = @Exchange(value = "my-message-exchange", type = "topic", durable = "true"),
key = "my-message-rk")
)
public void handleMessage(MyMessage message) {
MESSAGE_LOG.info("Receiving message: " + message);
}
此外,我不会在配置中为我的消息队列创建任何@Bean,并依靠@RabbitListener为我创建一个。但是我正在我的配置中创建ConnectionFactory、RabbitTemboard和SimpleRabbitListenerContainerFactory bean。
构建队列的类应该使用@configurationannotation进行注释,否则spring将无法在启动时创建队列
在某些@Configuration
类中,@enablebrabbit
是必需的,以允许应用程序上下文解析@RabbitListener
。
为了让应用程序自动创建队列以及它们之间的交换和绑定,配置中必须存在RabbitAdmin
bean。
有关更多信息,请参阅参考手册:https://docs.spring.io/spring-amqp/docs/2.0.0.RELEASE/reference/html/
我试图把一个Spring启动应用程序放在一个docker容器内,但当我运行它时,我得到这个错误。我看到它是平木的应用程序属性 我在另一个出版物Spring Boot:未能配置数据源:未指定“url”属性,并且无法配置嵌入式数据源 这是我的天赋 泊坞窗文件
从文件夹内部执行“npm start”命令时出现以下错误/ 我在互联网上尝试了多种解决方案,但都无效。
我通过pgAdmin III与远程postgres-9.3连接。关闭pgAdmin后,我尝试在另一天与同一数据库连接。 在pgstartup.log文件中,我有: pg_hba.conf: 服务器上的操作系统是CentOS。不幸的是,我不知道postgres是如何安装在服务器上的,因为有人这样做了。我能用这个做什么?
当前的java版本是
启动Tomcat失败,请检查C:\Program Files\Apache Software Foundation\Apache Tomcat 8.0.27\bin\catalina。bat和相关脚本是可执行的。 一直有这个问题在netbean。如何解决问题?请帮忙。
我下载了Scene Builder,试图打开一个.fxml文件,但出现了以下错误消息: 启动SceneBuilder失败。错误消息是:无法运行程序“C:\program Files(x86)\Oracle\JavaFX Scene Builder 2.0”:CreateProcess error=5,Acces被拒绝