Java RabbitMQ:在运行时向侦听器动态添加队列

Java RabbitMQ:在运行时向侦听器动态添加队列,java,rabbitmq,spring-amqp,Java,Rabbitmq,Spring Amqp,我有一个用例,需要使用运行时发现的队列中的消息 这里有一个config类和listener类。我已经为两个现有队列定义了一个使用者,并希望使用来自新队列的消息,这些消息可能会在运行时被发现,并遵循相同的命名约定,即queue.animals* 此外,我还有另一个服务,它将在名为“newQueues”的队列上向我发送新发现的队列名称。如果不需要,这种方法可以改变,我们可以摆脱在“新队列”上发送消息的服务 我当前收到以下异常: Caused by: com.fasterxml.jackson.cor

我有一个用例,需要使用运行时发现的队列中的消息

这里有一个config类和listener类。我已经为两个现有队列定义了一个使用者,并希望使用来自新队列的消息,这些消息可能会在运行时被发现,并遵循相同的命名约定,即queue.animals*

此外,我还有另一个服务,它将在名为“newQueues”的队列上向我发送新发现的队列名称。如果不需要,这种方法可以改变,我们可以摆脱在“新队列”上发送消息的服务

我当前收到以下异常:

Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'queue': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')

我对RabbitMQ非常陌生,所以不确定是否所有的片段都正确。谢谢您的帮助。

您的问题令人困惑-标题是关于添加新队列,但随后您谈到JSON异常。听起来您正在接收非json内容

到底是什么问题

要添加新队列

((AbsrtactMessageListenerContainer)RabbitListenedPointRegistry.getMessageListenerContainer(“animalQContainer”))
.addquenames(“newQueue1”、“newQueue2”);

您的问题令人困惑——标题是关于添加新队列,但随后您谈到JSON异常。听起来您正在接收非json内容

到底是什么问题

要添加新队列

((AbsrtactMessageListenerContainer)RabbitListenedPointRegistry.getMessageListenerContainer(“animalQContainer”))
.addquenames(“newQueue1”、“newQueue2”);

由于此处配置了Jackson2JsonMessageConverter,processQueueEvents方法无法解析字符串。创建了一个新类,并将一个对象传递给processQueueEvent方法,以通过问题中提到的异常:

    public void processQueueEvents(NewQueue newQueueName) {
        System.out.println("Received a message on a new queue: " + newQueueName);
        String name = newQueueName.toString();

由于此处配置了Jackson2JsonMessageConverter,processQueueEvents方法无法解析字符串。创建了一个新类,并将一个对象传递给processQueueEvent方法,以通过问题中提到的异常:

    public void processQueueEvents(NewQueue newQueueName) {
        System.out.println("Received a message on a new queue: " + newQueueName);
        String name = newQueueName.toString();

newQueue中的内容以字符串形式出现,这是一个新的队列名称。在运行时发现的新队列中的内容应具有类型为Animal object的内容。我不太清楚为什么我会看到这个异常。您认为配置看起来正确吗?在上面的回答中,您将其转换为AbstractMessage。。。在另一篇文章中,您提到了使用DirectMessageListenerContainer。不管怎样,DMLC都是AMLC的一个子类。由于您同时使用
JacksonMessageConverter
queue
需要是一个JSON字符串
“queue”
-或者您需要为第二个侦听器使用不同的容器工厂。标题是关于动态队列配置,因为我怀疑一般配置不太正确。从那时起,我就解决了配置问题,并用同样的方法更新了上面问题中的代码,以帮助其他尝试配置动态队列的人。newQueue中的内容以字符串形式出现,这是一个新队列名称。在运行时发现的新队列中的内容应具有类型为Animal object的内容。我不太清楚为什么我会看到这个异常。您认为配置看起来正确吗?在上面的回答中,您将其转换为AbstractMessage。。。在另一篇文章中,您提到了使用DirectMessageListenerContainer。不管怎样,DMLC都是AMLC的一个子类。由于您同时使用
JacksonMessageConverter
queue
需要是一个JSON字符串
“queue”
-或者您需要为第二个侦听器使用不同的容器工厂。标题是关于动态队列配置,因为我怀疑一般配置不太正确。从那时起,我就解决了配置问题,并用同样的方法更新了上面问题中的代码,以帮助其他试图配置动态队列的人。
    public void processQueueEvents(NewQueue newQueueName) {
        System.out.println("Received a message on a new queue: " + newQueueName);
        String name = newQueueName.toString();