以编程方式创建流程或模型

时间:2014-02-25 12:35:14

标签: mule

我想动态创建一个流或模型,而不使用mule-config.xml用于远程机器的tcp。

它应该是这样的:

MuleContext context = new DefaultMuleContextFactory().createMuleContext();
MuleRegistry registry = context.getRegistry();

EndpointBuilder testEndpointBuilder = new EndpointURIEndpointBuilder("vm://testFlow.in",
    context);
testEndpointBuilder.setExchangePattern(MessageExchangePattern.REQUEST_RESPONSE);
registry.registerEndpointBuilder("testFlow.in", testEndpointBuilder);

InboundEndpoint vmInboundEndpoint = testEndpointBuilder.buildInboundEndpoint();
registry.registerEndpoint(vmInboundEndpoint);

StringAppendTransformer stringAppendTransformer = new StringAppendTransformer(" world");
stringAppendTransformer.setMuleContext(context);

Flow testFlow = new Flow("testFlow", context);
testFlow.setMessageSource(vmInboundEndpoint);
testFlow.setMessageProcessors(Arrays.asList((MessageProcessor) stringAppendTransformer));
registry.registerFlowConstruct(testFlow);

context.start();

MuleClient muleClient = new MuleClient(context);
MuleMessage response = muleClient.send("vm://testFlow.in", "hello", null);
Validate.isTrue(response.getPayloadAsString().equals("hello world"));

muleClient.dispose();
context.stop();

1 个答案:

答案 0 :(得分:1)

不确定我是否理解您的问题,但是如果您需要在流中使用tcp出站端点,则只需像示例中的入站vm端点一样创建它,但是然后将其添加到流中的某个点。包含所有具有setMessageProcessors的处理器的列表,例如stringAppendTransformer被包装在列表中并添加到流中的示例。

创建tcp出站的代码将是这样的:

String address = "tcp://localhost:1234";
EndpointURIEndpointBuilder builder = new 
   EndpointURIEndpointBuilder(new URIBuilder(address), context);
builder.setExchangePattern(MessageExchangePattern.REQUEST_RESPONSE);
registry.registerEndpointBuilder("testFlow.out", builder);

OutboundEndpoint tcpOutboundEndpoint = builder.buildOutboundEndpoint();
registry.registerEndpoint(tcpOutboundEndpoint);

关于您的新评论的更新:

使用Java组件:

//object factory for your Java class
PrototypeObjectFactory objectFactory = new PrototypeObjectFactory(MyClass.class);
objectFactory.initialise();
//the actual component
DefaultJavaComponent component = new DefaultJavaComponent(objectFactory);
//entry point resolver to determine the called method
EntryPointResolver resolver = new ExplicitMethodEntryPointResolver();
((ExplicitMethodEntryPointResolver)resolver).addMethod("myMethod");
component.setEntryPointResolvers(Arrays.asList(resolver));

然后像添加所有其他处理器一样在列表中添加组件

相关问题