因此,最近我开始学习骆驼。作为该过程的一部分,我决定遍历所有示例(列出了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的好方法。
如果您需要进一步的澄清,请询问。