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

Mule 以编程方式创建流或模型,mule,Mule,我想动态创建一个流或模型,而不必在远程机器上使用mule-config.xml for tcp 应该是这样的: MuleContext context = new DefaultMuleContextFactory().createMuleContext(); MuleRegistry registry = context.getRegistry(); EndpointBuilder testEndpointBuilder = new EndpointURIEndpointBuilder("v

我想动态创建一个流或模型,而不必在远程机器上使用mule-config.xml for 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();

不确定我是否理解您的问题,但如果您的流中需要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));

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

您遇到了什么问题?您好,我不想使用mule-config.xml,我想以编程方式执行入站和出站操作,直到:问题出在哪里?我只看到一段代码,但没有错误或实际问题。你需要弄清楚。它没有调用我的java组件,你有没有想法将java组件添加到流中,这超出了你最初的tcp问题,但我更新了我的答案。亲爱的Anton,感谢你的输入,正如你建议的那样,我添加了更改,它工作正常