Apache Camel:Mina组件简单介绍
apache camel mina component是camel支持tcp、udp互通的一个组件。利用它你可以实现客户端与多个通讯服务器及多个通讯服务器之间的互通。但是缺省条件下实现不了这个目的,该插件仅仅默认提供了MinaConsumer和MinaProducer,通过配置camel路由可以实现MinaConsumer到MinaProducer的数据传送,但是对于MinaProducer到MinaConsumer的数据传送则没有代码提供,下面对其实现做一些简单介绍:
首先介绍两个概念
1、MinaConsumer,消费者的代表,它的主要作用是接受来自客户端的连接和负责与客户端的数据传输。当然了,方法是活的,你也可以让一个服务器主动连接过来。
2、MinaProducer,生产者的代表,它的主要作用是连接到通讯服务器并与之进行数据交互。当然了,如果一个客户端有侦听功能,你也可以连接过去。
现在我们介绍下代码上的实现
1、首先在MinaEndpoint类里添加一个MinaConsumer集合:
private static final CopyOnWriteArrayList<DefaultConsumer> consumers = new CopyOnWriteArrayList<DefaultConsumer>();
同时添加三个函数
public List<DefaultConsumer> getConsumers() {
return consumers;
}
public void addConsumer(DefaultConsumer consumer){
consumers.add(consumer);
}
public void removeConsumer(DefaultConsumer consumer){
consumers.remove(consumer);
}
2、在MinaConsumer类中doStart()函数里添加如下代码:
endpoint.addConsumer(this);
同时在doStop()函数里添加如下代码:
endpoint.removeConsumer(this);
3、在MinaProducer类的内部类ResponseHandler的messageReceived函数里修改部分代码为如下:
try {
int size = endpoint.getConsumers().size();
if (size == 0) {
LOG.warn("No consumers available on endpoint: "
+ endpoint + " to process " + exchange);
} else if (size == 1) {
DefaultConsumer consumer = endpoint.getConsumers()
.get(0);
// AsyncProcessor processor =
// AsyncProcessorTypeConverter.convert(consumer.getProcessor());
consumer.getProcessor().process(exchange);
} else if (size > 1) {
for (DefaultConsumer consumer : endpoint.getConsumers()) {
consumer.getProcessor().process(exchange);
}
}
} catch (Exception e) {
e.printStackTrace();
}
通过以上三步就可以实现MinaProducer到MinaConsumer的数据传送了,然后通过配置camel路由就可以实现我们上面所说的互通了。