所以,最近我开始学习Camel。作为流程的一部分,我决定浏览所有示例(列出HERE,并在DOWNLOAD包含所有示例和文档的时候提供)并查看我可以学习的内容。
其中一个例子Load Balancing using Mina引起了我的注意,因为它在不同的JVM中使用了Mina,它模拟了一个循环的负载均衡器。
这个例子我有一些问题。首先它使用Spring DSL,而不是我的项目使用的Java DSL,我现在发现它更容易理解(主要是因为我已经习惯了)。所以第一个问题:这个例子的版本是否只使用Java DSL而不是Spring DSL用于路由和bean?
我的第二个问题是代码相关。描述说明,我引用:
在每十秒钟的演示中,将创建一个Report对象 Camel负载均衡器服务器。此对象由Camel加载发送 平衡器到MINA服务器,然后序列化对象。之一 两个MINA服务器(localhost:9991和localhost:9992)收到 通过设置的字段回复来对象并丰富消息 报告对象。 MINA服务器将回复发送回 客户端,然后在控制台上记录回复。
因此,根据我的阅读,我了解MINA服务器1(每个示例)从loadbalancer接收报告,更改它,然后它将该报告发送回某个不可见的客户端。检查代码后,我看不到客户端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版本对我有用。
答案 0 :(得分: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.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条路由)位于同一个camel文件中。
我建议您学习如何阅读Spring DSL,因为它确实值得付出努力。如果你不熟悉Spring,你需要一个入门。依赖注入部分尤为重要。
最后一项建议是给自己买一份Camel In Action。这是开始使用Camel的好方法。
如果您需要进一步说明,请随时提出。
答案 1 :(得分:0)
在上一篇文章中我有两个问题: 1.如何添加另一个mina服务器 2.为什么mina服务器发送回复。
Namphibian回答了问题1但没回答问题2.但是,我在这里找到了解决方案: http://camel.465427.n5.nabble.com/Load-balancing-using-Mina-example-with-Java-DSL-td5742566.html#a5742585
向克劳斯先生致谢,给予答案和建议。
PS:如果你编辑你的帖子以包含这些信息,我很乐意选择它作为答案。