使用Camel 4.4.1和SpringBoot 3.2.3。
我有一个非常简单的骆驼路线构建器:
import org.apache.camel.builder.RouteBuilder;
public class SimpleTestRouteBuilder extends RouteBuilder
{
public SimpleTestRouteBuilder(int i)
{
// do something with i...
}
@Override
public void configure() throws Exception
{
// from("direct:messageReceiver").id("testReceipt")
// .log("received");
from("timer:/foo?repeatCount=1") // read from the specified queue
.routeId("fromrequestto0")
.to("smpp://localhost:2775");
from("timer:/foo2?repeatCount=1") // read from the specified queue
.routeId("fromresponseto1")
.to("smpp://localhost:2776");
}
}
Application.java如下:
@ConfigurationPropertiesScan
public class Application
{
@Autowired private CamelContext context;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
CommandLineRunner init(ProducerTemplate template)
{
return args ->
{
Integer i = args.length == 0 ? 1 : Integer.parseInt(args[0]);
try
{
context.addRoutes(new SimpleTestRouteBuilder(i));
}
catch (Exception e)
{
// swallow
}
};
}
}
配置 - application.yaml:
camel:
routecontroller:
enabled: true
backoffDelay: 5000
backoffMaxAttempts: 17280
initialDelay: 1000
threadPoolSize: 2
unhealthyOnExhausted: false
unhealthyOnRestarting: false
includeRoutes: "*"
在应用程序启动时,如果由于 sms-c 关闭而无法启动第一个路由
fromrequestto0
,则监督路由控制器似乎不会启动,并且骆驼应用程序将关闭。 (这是因为 Camel 尝试连接生产者 - smsc 连接 - 并且在无法启动时失败)如果第一条路线启动了,但第二条路线没有启动;然后应用程序保持运行状态,并且监控路由控制器启动,重试路由,直到第二个 SMS-C 可用。 (这就是我希望在两种情况下发生的情况,但这很奇怪,因为我认为骆驼热身在这里也会失败?)
为什么这里的行为会因路线而异?