我有一个使用spring mvc的apache camel应用程序。我对RouteBuilder类扮演的角色以及它实际初始化的方式感到困惑。我知道docs表示configure()方法是:
在初始化时调用以使用流畅的构建器语法构建路由。
但是这个初始化何时发生?它是在应用程序启动时发生还是在稍后使用该路由时发生?
这个问题的目的最终是问我如何在运行时修改路由。我希望能够根据需要建立不同的路线。
xml定义:
public class ServiceProviders2702FragmentHolder extends Fragment {
private static final String TAG = ServiceProviders2702FragmentHolder.class.getSimpleName();
private FrameLayout mFrameLayout;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_holder, container, false);
initView(view);
return view;
}
private void initView(View view) {
mFrameLayout = (FrameLayout) view.findViewById(R.id.flFragmentHolder);
Fragment serviceProviders = new ServiceProviders2702Fragment();
Bundle args = new Bundle();
args.putString(AppConstants.SENDING_ACTIVITY, "MainActivity");
serviceProviders.setArguments(args);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.flFragmentHolder, serviceProviders).commit();
}
Route Builder模板:
mResources = mContext.getResources();
String[] howTos = mResources.getStringArray(R.array.facebook);
Fragment serviceProviders = new ServiceProvidersDetailFragment();
Bundle args = new Bundle();
args.putString("Service Provider", "Facebook");
args.putStringArray("How-Tos", howTos);
serviceProviders.setArguments(args);
FragmentManager fragmentManager = ((EmergencyDisclosureGuideActivity) mContext).getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.flFragmentHolder, serviceProviders).commit();
答案 0 :(得分:2)
您可以使用toD根据表达式在运行时动态更改端点。见the documentation
如果您想更改更多路线或添加全新路线,请查看CamelContext上的API。这个Stackoverflow question有一个添加全新路线的例子。
答案 1 :(得分:0)
Camel服务的生命周期记录在此处:https://camel.apache.org/lifecycle.html
Camel使用一个名为Service的简单生命周期接口,它有一个start()和stop()方法。 各种类实现了诸如CamelContext之类的Service以及许多Component和Endpoint类。 当您使用Camel时,您通常必须启动CamelContext,它将启动所有各种组件和端点并激活路由规则,直到再次停止上下文。
当上下文开始时,各种组件开始。不确定我理解动态网址部分。如果要指示动态端点(如果数据是this,则queue1 else queue2),您应该能够使用类似DynamicRouter EIP的内容,如此处所述(https://camel.apache.org/dynamic-router.html)
答案 2 :(得分:-1)
您有几种选择。
然后,您可以将属性值放在标题中,然后将值放在.toD("$header.routeEndpoint")
中。这可以处理动态端点。
当然要重建您需要使用API的整个路线。