如何从一个类向另一个类发送一些String值

时间:2013-09-23 10:16:30

标签: java spring activemq apache-camel

我的架构ActivemqSql Server Database更改时从DB收到邮件。

我们编写了3个消费者文件名FirstConsumer.java,SecondConsumer.java and ThirdConsumer.java,用于使用Spring框架处理邮件。

到目前为止,我们为每个消费者文件编写了*MiddileWare.java个文件。按照以下方式。

enter image description here 我的商家代码是用MessageProcessing.java编写的。为了您的理解,我发布了firstConsumer.java代理商文件代码。

FirstConsumer.java:

import org.apache.camel.CamelContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class FirstConsumer {
public static void main(String[] args) {
    try {
        ApplicationContext contextObject=new ClassPathXmlApplicationContext("bean.xml");
        //Forwarding cursor to ConsumersMiddileWare class using CamelContext
        CamelContext camelObject=contextObject.getBean("activeContext1", CamelContext.class);
    } catch (Exception e) {
        // TODO: handle exception
    }
}
}

FirstMiddileWare.java:

 import org.apache.camel.spring.SpringRouteBuilder;
 public class ConsumersMiddileWare2 extends SpringRouteBuilder {
@Override
public void configure() throws Exception {
    VariablesDeclarations vd=lookup("amqURL",VariablesDeclarations.class);
    from(vd.getAmqLink()).transacted().to("bean:msgPro1?Method=Processor1");
}
 }

MessageProcessing.java:

import org.apache.camel.Exchange;
public class MessageProcessing{
 public void MessageProcessing(Exchange exe,String exeFilepath) {
    //Business Code Here
  }
 public void Processor1(Exchange exe) {
    MessageProcessing processorObject=new MessageProcessing();
    processorObject.MessageProcessing(exe,"Rod1");
}
public void Processor2(Exchange exe) {
    MessageProcessing processorObject=new MessageProcessing();
    processorObject.MessageProcessing(exe,"Rod2");
}
}

Spring配置xml文件名为bean.xml,包含所有使用者配置。

bean.xml:

<!--FirstConsumer-->
<camelContext id="activeContext1" xmlns="http://camel.apache.org/schema/spring">
    <routeBuilder ref="activeMQRouter1" />
</camelContext>
<!--SecondConsumer-->
<camelContext id="activeContext2" xmlns="http://camel.apache.org/schema/spring">
    <routeBuilder ref="activeMQRouter2" />
</camelContext>
<!--ThirdConsumer-->
<camelContext id="activeContext3" xmlns="http://camel.apache.org/schema/spring">
    <routeBuilder ref="activeMQRouter3" />
</camelContext>
<!--FirstConsumer-->
<bean id="activeMQRouter1" class="ActivemqPackage.FirstMiddileWare"/>
<!--SecondConsumer-->
<bean id="activeMQRouter2" class="ActivemqPackage.SecondMiddileWare"/>
<!--ThirdConsumer-->
<bean id="activeMQRouter3" class="ActivemqPackage.ThirdMiddileWare"/>
到目前为止,我们以上述方式进行了跟踪。它工作正常。现在我想尝试以下方式。

enter image description here

以下代码是First,Second,Third Middileware文件之间的差异代码。

SecondMiddileWare.java

  from(vd.getAmqLink()).transacted().to("bean:msgPro1?Method=Processor2");

ThirdMiddileWare.java:

  from(vd.getAmqLink()).transacted().to("bean:msgPro1?Method=Processor3");

我坚持为所有消费者文件制作ConsumerMiddileWare.java文件。

如果你不明白,请告诉我,我会编辑我的问题。

我的想法:

如果我们从Consumer(String)文件发送任何FirstConsumer.java,...格式值到MiddileWare(FirstMiddileWare.java,...)。

根据该值,我将调用相应的进程(Process1,..)方法。

由于

1 个答案:

答案 0 :(得分:1)

几件事......

  • 你可以content based router根据'String'值将消息路由到正确的处理器/方法
  • 您不需要为每个RouteBuilder单独使用CamelContexts,也不需要为每条路线单独使用RouteBuilders ......