因此,最近我开始学习骆驼。作为该过程的一部分,我决定遍历所有示例(列出了HERE,在您将所有示例和文档包含在DOWNLOAD包中时可用),然后看看我能学到什么。

其中的一个示例Load Balancing using Mina引起了我的注意,因为它在不同的JVM中使用了Mina,并且它模拟了带有轮询的负载均衡器。

我在这个例子中有一些问题。首先,它使用Spring DSL,而不是我的项目使用的Java DSL,而我现在发现它更容易理解(主要是因为我已经习惯了)。因此,第一个问题是:该示例的版本是否仅使用Java DSL而不是Spring DSL进行路由和bean?

我的第二个问题与代码有关。描述中指出,我引用:


  在此演示中,每隔十秒钟,将通过
  Camel负载平衡器服务器。该对象由骆驼负载发送
  平衡器连接到MINA服务器,然后在其中对对象进行序列化。之一
  两个MINA服务器(localhost:9991和localhost:9992)接收到
  对象,并通过设置字段回复来丰富消息
  报告对象。回复由MINA服务器发送回给
  客户端,然后将回复记录在控制台上。


因此,从我的阅读中,我了解到MINA服务器1(按示例)从负载均衡器接收报告,对其进行更改,然后将报告发送回一些不可见的客户端。检查代码后,我看不到任何客户端Java类或XML,并且在运行时,服务器仅将结果发布在命令行上。客户在哪里?这个客户是什么?

MINA-1服务器代码显示在此处:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <bean id="service" class="org.apache.camel.example.service.Reporting"/>

  <camelContext xmlns="http://camel.apache.org/schema/spring">

    <route id="mina1">
      <from uri="mina:tcp://localhost:9991"/>
      <setHeader headerName="minaServer">
        <constant>localhost:9991</constant>
      </setHeader>
      <bean ref="service" method="updateReport"/>
    </route>

  </camelContext>

</beans>


我不明白updateReport()方法如何神奇地在控制台上打印对象。如果我想向第三台MINA服务器发送消息怎么办?我该怎么办? (我必须添加新路由,并将其正确发送到第三台服务器的URI吗?)

我知道这些问题大多数听起来很愚蠢,但是如果有人可以帮助我,我将不胜感激。 Java DSL版本确实可以帮助我。

最佳答案

客户在这条路线上。

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:camel="http://camel.apache.org/schema/spring"
   xsi:schemaLocation="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <bean id="service" class="org.apache.camel.example.service.Generator"/>

  <camelContext xmlns="http://camel.apache.org/schema/spring">

  <route id="sendMessage">
    <from uri="timer://org.apache.camel.example.loadbalancer?period=10s"/>
    <bean ref="service" method="createReport"/>
    <to uri="direct:loadbalance"/>
  </route>

    <!-- use failover load balancer in round robin mode, to automatic failover to next server
         in case of failure -->
  <route id="loadbalancer">
      <from uri="direct:loadbalance"/>
      <loadBalance inheritErrorHandler="false">
        <failover roundRobin="true"/>
        <to uri="mina:tcp://localhost:9991?sync=true"/>
        <to uri="mina:tcp://localhost:9992?sync=true"/>
      </loadBalance>
    <log message="${body}"/>
  </route>
  </camelContext>
</beans>


请注意,有一个时间部分:

<from uri="timer://org.apache.camel.example.loadbalancer?period=10s"/>

该组件调用服务bean的createReport方法,该方法为类类型:org.apache.camel.example.service.Generator。这是客户。

要添加其他MINA服务器,请使用以下Spring DSL。

 <loadBalance inheritErrorHandler="false">
    <failover roundRobin="true"/>
    <to uri="mina:tcp://localhost:9991?sync=true"/>
    <to uri="mina:tcp://localhost:9992?sync=true"/>
    <to uri="mina:tcp://localhost:9993?sync=true"/>
 </loadBalance>


然后创建第三个MINA消费者,如下所示:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:camel="http://camel.apache.org/schema/spring"
   xsi:schemaLocation="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <bean id="service" class="org.apache.camel.example.service.Reporting"/>

  <camelContext xmlns="http://camel.apache.org/schema/spring">

   <route id="mina2">
    <from uri="mina:tcp://localhost:9993"/>
     <setHeader headerName="minaServer">
       <constant>localhost:9993</constant>
     </setHeader>
     <bean ref="service" method="updateReport"/>
    </route>

  </camelContext>

</beans>


注意,在运行示例时,这还需要您另外启动MINA3服务器。客户端和负载平衡器路由(2条路由)在同一骆驼文件中。

我建议您学习如何阅读Spring DSL,因为这样做确实值得。另外,如果您不熟悉Spring,则需要在其上入门。依赖项注入部分尤其重要。

最后的建议是给自己买一本《骆驼在行动》。这确实是开始使用Camel的好方法。

如果您需要进一步的澄清,请询问。

10-08 13:06