好的,谢谢大佬们的建议。我咬紧牙关,以正确的方式做事,而不是解析正则表达式。这是我的解决方案:
我构建了一个使用 org.codehaus.jackson.map.ObjectMapper 的服务。此类将交换主体作为参数。它看起来像这样。
public class ProviderTypeWrangler {
public String getProvider(String json) {
try {
ObjectMapper mapper = new ObjectMapper();
Integration integration;
integration = mapper.readValue(json, Integration.class);
return integration.getProvider();
} catch (JsonParseException e) {
return "";
} catch (JsonMappingException e) {
return "";
} catch (IOException e) {
return "";
}
}
}
然后我使用路由滑动模式来提供对该服务的访问。如果有人认为另一个 EIP 是合适的,我愿意接受建议。无论如何,这是一个例子。
public class WufooIntegrationRoutingSlip {
@RoutingSlip
public String slip(String body) {
String answer = "activemq:noProducerDefined";
ProviderTypeWrangler wrangler = new ProviderTypeWrangler();
String producer = wrangler.getProvider(body);
Logger mylogger = Logger.getLogger("log4j.logger.org.apache.camel");
if (!producer.equals("")) {
mylogger.info("Body:"+body);
answer = "activemq:"+producer;
}
return answer;
}
}
然后,在我的 camel.xml 文件中,我将此路由单作为 bean 公开
<bean id="integrationBean" class="com.wufoo.camel.WufooIntegrationRoutingSlip"/>
我使用该 bean 将交换路由到正确的队列。
<route errorHandlerRef="dlc" autoStartup="true" id="IntegrationQueue" xmlns:ns2="http://camel.apache.org/schema/web" xmlns="http://camel.apache.org/schema/spring">
<description>Send all integrations here. Logic will parse to individual queue based on Provider.</description>
<from uri="activemq:integration"/>
<bean ref="integrationBean"/>
</route>
一路上我学到了很多关于骆驼和春天的知识,所以感谢评论者把我推向了正确的方向。