【发布时间】:2013-09-28 04:52:00
【问题描述】:
在我的架构中,Activemq 每当 DBchanges 时从 Sql Server Database 获取消息。
我们编写了 3 个消费者文件,名称为 FirstConsumer.java,SecondConsumer.java and ThirdConsumer.java,用于使用 Spring 框架处理消息。
到目前为止,我们为每个消费者文件编写了*MiddileWare.java 文件。按以下方式。
我的业务代码是用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
}
}
}
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");
}
}
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"/>
到目前为止,我们遵循上述方式。它工作正常。现在我正在尝试实现以下方式。
以下代码是 First、Second、Third Middileware 文件之间的差异代码。
SecondMiddleWare.java
from(vd.getAmqLink()).transacted().to("bean:msgPro1?Method=Processor2");
ThirdMiddleWare.java:
from(vd.getAmqLink()).transacted().to("bean:msgPro1?Method=Processor3");
我坚持为所有消费者文件制作ConsumerMiddileWare.java 文件。
如果您不明白,请告诉我,我将编辑我的问题。
我的想法:
如果我们将任何 String 格式值从 Consumer(FirstConsumer.java,...) 文件发送到 MiddileWare(FirstMiddileWare.java,...)。
基于该值,我将调用相应的 process(Process1,..) 方法。
谢谢
【问题讨论】:
-
我不认为人们理解你的问题,你能解释得更好吗?
-
@ClausIbsen 我修改了我的问题。你能检查一次吗。如果你不明白,请告诉我。
标签: java spring activemq apache-camel