使用Apache Camel与Spring Boot的正确方法



我一直在做3个不同的项目,它们都有不同的使用Camel的方式。第一个主要是通过bean在每条路由上调用几个服务(我们最终得到的大型服务只有在Camel路由中使用的方法),像这样:

from("direct:someUrl")
.bean(myService, "loadData")
.bean(myService, "validateData")
.bean(myService, "saveData")
.bean(myService2, "sendEvent")

等等。第二,为每个任务创建单独的处理器(必须创建长构造函数来注入它们)。如:

from("direct:someUrl")
.process(myParseProcessor)
.process(myValidationProcessor)
.process(mySaveToDbProcessor)
.process(myPublishEventProcessor)

在第三个中,路由相互调用(很难看到完整的流程,因为你必须跳过多个类)。如:

FisrtRoute.java
from("direct:someUrl")
.process(()-> doSmth)
.to("direct:someUrl2")

SecondRoute.java
from("direct:someUrl2")
.process(()-> doSmth)
.to("direct:someUrl3")
ThirdRoute.java
from("direct:someUrl3")
.process(()-> doSmth)
.to("direct:someUrl4")

我试图了解什么是首选的方式与骆驼工作?就我个人而言,我更喜欢第二种方法,因为它更容易在一个地方看到整个流程,并且可以用测试覆盖所有小处理器,但另一方面,我们最终会有大量的处理器和大量的处理器被注入到我们的Route中。

既然我必须自己思考这个问题,我可以根据你的描述给你一个答案。虽然我不确定这是最正确的答案。

你的第一个和第二个解决方案利用Spring Boot中的单例模式,同时保持路由可见性和透明度。两者都是好的和可取的。因此,据我所知,这两种方法都很好。

应该使用服务层还是处理器对象在很大程度上取决于它们各自的用途。因此,如果您能够识别不同处理步骤之间的共享功能,那么这些步骤就可以组织在一个服务中,并由任何需要它们的路由调用。如果处理步骤几乎是隔离的,那么使用处理器可能更干净。这里基本上可以归结为这种评估或一些进一步的技术含义,如测试或异步处理等。

最好

最新更新