我的 REST 应用程序会将数据发布到rabbitMQ 上的队列 (Q1)。还有另一个单独的应用程序将从 Q1 读取数据、处理数据并将结果发送回 Q2。我的应用程序将从 Q2 读取数据并返回结果。许多客户端会使用这两个队列,因此我生成一个 UUID 并将其设置在 header 中,以便我可以监听 Q2(响应主题)。然后,我将查询每条传入消息,并将 header 中传入的 UUID 与我发布到 Q1 时生成的 UUID 进行匹配。
from("direct:test")
.choice().when(isValid)
.bean(FOOProcessor.class, "setFooQuery")
.to(FOO_REQUEST_QUEUE).log(LoggingLevel.INFO, "body=${in.body}")
.otherwise()
.setBody(constant("error"))
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(400)).log(LoggingLevel.INFO, "body=${in.body}")
.to("direct:error");
from(FOO_RESPONSE_QUEUE)
.unmarshal(new JacksonDataFormat(JsonNode.class))
.bean(FooProcessor.class, "setFooResponse")
.to("direct:end");
from("direct:error").log(LoggingLevel.DEBUG, "end");
from("direct:end").log(LoggingLevel.DEBUG, "end");
问题是 2 个“from”语句 - 它们创建单独的 Camel 交换/上下文,但我无法获取原始的 UUID。有什么建议吗?
最佳答案
我通过使用嵌入了路由构建器(具有自己的生产者和消费者)的处理器解决了这个问题。 处理器从此提供了对主交换的引用
process(final Exchange exchange)
关于java - 同一路线构建器中不同路线上的 Camel Exchange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36000942/