我有一个交换设置amq.topic,在那里我有一个指向我的密钥的路由密钥。
我有一个使用rest端点定义的路由。我用一个正文作为json {“sample”:“sample”}来调用该终点。
rest("myendpoint")
.post()
.route()
.routeId(ROUTE_ID)
.log(ROUTE_ID + " started.")
.convertBodyTo(String.class)
.log("Receiving request with body=${body}")
.to("rabbitmq://rabbiturl:port/amq.topic?connectionFactory=rabbitmqConnectionFactory&autoDelete=false&routingKey=myroutingkey&declare=false&exchangeType=topic")
.log(ROUTE_ID + " ended.")
.end();
这实现了我想要的:我的休息呼叫的主体将被发送到主题交换,其将根据路由密钥进入我的队列。
问题:它还会创建一个自动生成的队列
[ qtp86171426-28] RabbitMQProducer INFO Starting reply manager service RabbitMQReplyManagerTimeoutChecker[amq.topic]
[ qtp86171426-28] ReplyManagerSupport INFO Using temporary queue name: amq.gen-JGF0CKioQ6_MLA9uBNIOOQ
[ qtp86171426-28] CorrelationTimeoutMap INFO in putIfAbsent with key Camel-ID-L-VC-10050-58983-1467158153454-0-3
[nagerTimeoutChecker[amq.topic]] TemporaryQueueReplyHandler INFO in onTimeout with correlationId= Camel-ID-L-VC-10050-58983-1467158153454-0-3
[nagerTimeoutChecker[amq.topic]] ReplyManagerSupport WARN Timeout occurred after 20000 millis waiting for reply message with correlationID [Camel-ID-L-VC-10050-58983-1467158153454-0-3] on destination amq.gen-JGF0CKioQ6_MLA9uBNIOOQ. Setting ExchangeTimedOutException on (MessageId: ID-L-VC-10050-58983-1467158153454-0-2 on ExchangeId: ID-L-VC-10050-58983-1467158153454-0-1) and continue routing.
我尝试过skipqueuedeclare& skipexchangedeclare并且我已经没有了解它为什么生成队列的想法。有没有人有任何想法?
答案 0 :(得分:1)
将ExchangePattern设置为InOnly。
临时和回复队列是因为路由需要回复,因此创建临时队列以等待响应。
因此,如果您的休息端点没有返回任何内容,则在休息调用时将ExchangePattern设置为Inonly,它应该没问题。或者将其设置为.to()。