Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 队列声明错误时退出Spring RabbitMQ应用程序_Java_Spring_Rabbitmq_Amqp - Fatal编程技术网

Java 队列声明错误时退出Spring RabbitMQ应用程序

Java 队列声明错误时退出Spring RabbitMQ应用程序,java,spring,rabbitmq,amqp,Java,Spring,Rabbitmq,Amqp,我的任务是创建一个简单的Spring RabbitMQ聊天应用程序。其中一个要求是,同一时间只能有一个具有给定昵称的用户在线。用户通过其队列名称进行区分。现在,我在捕获队列声明错误时遇到问题。在配置类中,我声明了一个队列bean,如下所示 @Bean public Queue privateQueue(String nickname) { String queueName = "prv." + nickname; return new Queue(queueN

我的任务是创建一个简单的Spring RabbitMQ聊天应用程序。其中一个要求是,同一时间只能有一个具有给定昵称的用户在线。用户通过其队列名称进行区分。现在,我在捕获队列声明错误时遇到问题。在配置类中,我声明了一个队列bean,如下所示

@Bean
public Queue privateQueue(String nickname) {
    String queueName = "prv." + nickname;
    return new Queue(queueName, false, true, true);
}

如果已经存在一个名为
queueName
的队列,我想退出整个应用程序并打印出类似“username take”的内容。最简单的方法是什么?现在,应用程序会重试几次创建队列,然后由于bean创建失败而抛出
AmqpIOException
和其他消息。是否有方法捕获这些异常?

根据设计,声明队列是幂等操作。因此,您可能没有收到错误,因为队列已经存在

无论如何,您可以使用RabbitMQ HTTP API检查队列是否存在

首先,如果这些依赖项不存在,请在
pom.xml
中添加它们:

<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>http-client</artifactId>
  <version>3.10.0</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.3.6</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.12.3</version>
</dependency>
@Bean
@SneakyThrows
public Queue myQueue(String queueName) {
    Client client = new Client(new ClientParameters()
            .url("http://127.0.0.1:15672/api/").username("guest").password("guest"));

    QueueInfo queue = client.getQueue("/", queueName);

    if (queue == null) { // Does it exist?
        // Write to log, throw exception and etc'
        throw new RuntimeException("Queue " + queueName + " already exists!");
    }

    return new Queue(queueName, true);
}