【问题标题】:How can I send some String value from one class to another class如何将一些字符串值从一个类发送到另一个类
【发布时间】: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


【解决方案1】:

几件事...

  • 您能否通过 content based router 根据“字符串”值将消息路由到正确的处理器/方法
  • 您不需要为每个 RouteBuilder 使用单独的 CamelContext,甚至不需要为每条路线使用单独的 RouteBuilder...

【讨论】:

  • 感谢您的回答。是的,我不需要为每个路由创建单独的 RouteBuilders。我在单个 CamelContext 标签中配置了所有路由。知道我不想创建 SecondConsumers.java,ThirdConsumer.java and ConsumerMiddileWare.java
  • 如果您只是使用 Sprint 上下文引导您的 camelContext.xml,那么您将不需要任何这些类,只需启动上下文并让您的路线自行设置...不确定是什么您正在尝试以其他方式进行操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多