spring-boot - 拦截骆驼@Consume
问题描述
我有一个现有应用程序,它使用 Apache Camel 将消息发送到 SEDA 端点以进行异步处理,并希望拦截对这些方法的调用以进行检测。
示例代码:
@Component
public class CamelMessageService {
private static final Logger log = LoggerFactory.getLogger(CamelMessageService.class);
public static final String QUEUE = "seda:message";
@Resource
private ProducerTemplate producerTemplate;
public void send() {
producerTemplate.sendBody(QUEUE, "Hello World");
}
@Consume(uri = QUEUE)
public void receive(@Body String payload) {
log.info("Received message {}", payload);
}
}
有没有办法@Consume
在调用之前拦截所有注释的方法。我查看了基于 AOP 的方法,但由于这些类的现有 Spring/Camel 代理,这似乎失败了。
我也尝试过使用各种 Camel Intercept 路线并添加自定义 InterceptStrategy 但似乎上面的示例没有创建 Camel 路线,因此没有被拦截。
编辑:在进一步调查中,似乎可以使用骆驼拦截这些端点,但前提是骆驼上下文中至少定义了 1 条其他路线?
@Component
class MyRouteBuilder extends RouteBuilder {
private static final Logger log = LoggerFactory.getLogger(MyRouteBuilder.class);
public void configure() {
interceptSendToEndpoint(CamelMessageService.QUEUE)
.process(exchange -> log.info("intercepted exchange {}", exchange));
from("timer:hello?period={{timer.period}}").routeId("hello").routeGroup("hello-group")
.transform().simple("yo")
.filter(simple("${body} contains 'foo'"))
.to("log:foo")
.end()
.to("stream:out");
}
}
如果我使用上面的 Route Builder 运行这个应用程序,那么如果我注释掉hello
它不是的路由,我的拦截器就会被触发?
任何帮助将不胜感激。
解决方案
推荐阅读
- mongodb - 50gb 数据集索引上的 MongoDB 文本搜索不适用于确切的短语
- r - 如何将'checkresiduals()函数的输出图发送到pdf文件
- javascript - 出现错误:GET https://www.gstatic.com/charts/elements/loader.js net::ERR_ABORTED 404
- php - 移动目录和删除目录文件
- c++ - 在 C++ 中,log2() 和 log2l() 返回不同的值
- azure - 有没有办法在 Cosmos DB Java V4 API 中读取数据库链接?
- sql - Oracle 查询按 3 个值分组
- ocaml - 如何在 ocaml lambda 中创建自由变量检查功能
- android - 有没有办法访问安卓设备的电源配置文件?
- git - Gitlab:什么是在合并结果管道之后运行的合并训练管道