-2

在我的体系结构中,每当发生变化时都会Activemq收到消息。Sql Server DatabaseDB

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

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

在此处输入图像描述 我的业务代码是用MessageProcessing.java.for 您的理解编写的,我发布了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
    }
}
}

FirstMiddleWare.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");
}
 }

消息处理.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"/>

到目前为止,我们遵循上述方式。它工作正常。现在我正在尝试实现以下方式。

在此处输入图像描述

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

SecondMiddleWare.java

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

第三MiddleWare.java:

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

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

如果你不明白,让我知道我会编辑我的问题。

我的想法:

如果我们将StringConsumer() 文件中的任何格式值发送FirstConsumer.java,...到 MiddileWare(FirstMiddileWare.java,...)。

基于该值,我将调用相应的 process( Process1,..) 方法。

谢谢

4

1 回答 1

1

几件事...

  • 您是否可以使用基于内容的路由器根据“字符串”值将消息路由到正确的处理器/方法
  • 您不需要为每个 RouteBuilder 单独的 CamelContexts 甚至为每条路线单独的 RouteBuilders ...
于 2013-09-27T04:12:09.107 回答