这个是服务器
package testxmpp;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.xmpp.XmppEndpoint;
import org.apache.camel.component.xmpp.XmppExchange;
import org.apache.camel.component.xmpp.XmppMessage;
import org.apache.camel.component.xmpp.XmppPrivateChatProducer;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.DefaultEndpoint;
import org.apache.cxf.common.logging.Log4jLogger;
import org.apache.log4j.Logger;
import org.jivesoftware.smack.XMPPConnection;
import back.SendMessage;
/**
* 上面例子的第一行创建一个一个RouteBuilder的匿名类的实例,这个匿名类需要实现 configure()方法。
* camelContext.addRoutes(RouterBuilder builder)
* 方法中调用了builder.setContext(this)方法,
* 这样RouteBuilder对象就获得了与之对应的CamelContext的,然后调用builder.configure()方法。
* 在configure方法中,可以调用例如 from(), filter(), choice(), when(),isEqualTo(),
* otherwise()以及to()方法。 RouteBuilder.from(String uri)
* 方法会调用与之对应的CamelContext的getEndpoint(uri)方法来获得指定的Endpoint,
* 并用一个FromBuilder包装这个Endpoint。这样 FromBuilder.filter(Predicate predicate)
* 方法就会创建一个在header("foo").isEqualTo("bar")这个表达式基础创建的Predicate(所谓的条件) 创建一个
* FilterProcessor对象。就这样,通过定义这些操作我们逐渐构建出了一个Route对象
* (使用RouterBuilder进行包装的)并且将这个Route对象添加进了与RouteBuilder所关联的CamelContext中。
*
*/
public class XmppReceiver {
public static void main(String[] s) {
String host = "192.168.1.20" ;
String port = "5201" ;
try {
CamelContext context = new DefaultCamelContext();
// 增加路由的接点,可以是一个URL也可以是file://test这样一个中间接点,用于转到下个路由
final Endpoint endpoint = context.getEndpoint("mina:tcp://"+host+":"+port);
final XmppEndpoint xmppendpoint = new XmppEndpoint("xmpp://localhost:5200") ;
context.addRoutes(new RouteBuilder() {
public void configure() {
// from("queue:a").filter(header("foo").isEqualTo("bar")).to("queue:b");
from(endpoint).process(new Processor() {
public void process(Exchange e)
throws Exception {
Logger.getLogger(XmppReceiver.class).info("success!"+ header("foo").isEqualTo("bar"));
e.getOut().setBody(e.getIn().getBody());
}
}).to("direct:start");
//选择的方式,如果被其中一个when选中,就不再往下走了。
from("direct:start").choice()
.when(new MessageFilter(body())).to("direct:a")
.when(new MessageFilter(body())).to("direct:b")
.otherwise().to("direct:c") ;
from("direct:a").process(new Processor() {
public void process(Exchange arg0) throws Exception {
Logger.getLogger(XmppReceiver.class).info("To direct:a");
}
});
from("direct:b").process(new Processor() {
public void process(Exchange arg0) throws Exception {
Logger.getLogger(XmppReceiver.class).info("To direct:b");
}
});
from("direct:c").process(new Processor() {
public void process(Exchange arg0) throws Exception {
Logger.getLogger(XmppReceiver.class).info("To direct:c");
}
});
}
});
context.start();
Logger.getLogger(XmppReceiver.class).info("success!");
} catch (Throwable ex) {
ex.printStackTrace();
}
}
}
分享到:
相关推荐
接上文EndpointDirect用于在两个编排好的路由间实现Exchange消息的连接,上一个路由中由最后一个元素处理完的Exchange对象,将被发送至由Direct连接的下一个路由起始位置(http://camel.apache.org/direct.html)。...
- 路由是 Camel 的核心功能之一,它允许开发者定义消息应该如何在不同的端点之间流动。这包括简单的单向路由、复杂的分发路由等。 **3. 数据转换** - Camel 提供了丰富的工具来转换消息的数据格式。无论是简单的...
使用ConfigMap和Secrets的Spring-Boot Camel快速入门本快速入门演示了如何使用Kubernetes ConfigMap和Secrets配置Spring-Boot应用程序。 路由会生成示例消息,这些示例消息将传递到通过src/main/resources/...
在这个专题中,我们介绍了相当数量技术组件:Flume、Kafka、ActiveMQ、Rabbitmq、Zookeeper、Thrift、Netty、DUBBO等等,还包括本文要进行介绍的ApacheCamel。有的技术组件讲得比较深入,有的技术组件则是点到为止。...
在上述配置中,我们看到Camel正在被用来与TIBCO的Topic进行集成,这是一个用于发布/订阅消息模式的组件。TIBCO(TIBCO Enterprise Message Service)是一个强大的消息传递系统,广泛用于企业级应用间的数据交换。 ...
- **配置组件**:首先,需要在Camel上下文中配置JDBC组件,提供数据库连接信息。 - **创建数据源**:通常,会使用Java的DataSource接口来创建数据库连接池,提高性能。 - **定义路由**:使用`from()`和`to()`定义...
这使得Camel能够利用Spring的依赖注入、配置管理和事务管理等功能。 10. **Camel开发指南** 提供的“Apache Camel 开发指南”将详细介绍如何设置开发环境、创建第一个路由、调试和测试Camel应用,以及如何利用...
为了简化启动过程,可以考虑继承`org.apache.camel.main.Main`类,这样不仅可以自动配置`CamelContext`,还能利用内置的命令行参数,例如启用追踪或加载自定义路由。 在实际应用中,当路由变得复杂时,可以使用...
### Apache Camel 实战知识点概述 #### 一、Apache Camel 简介 - **定义**:Apache Camel 是一个强大的开源框架...书中不仅提供了丰富的理论知识,还有大量的实践案例和代码示例,是学习Camel不可或缺的经典教材之一。
通过上述配置,Camel能够在接收到消息后直接调用`HelloBean`中的`hello`方法,并将消息体作为参数传递给该方法,大大简化了消息处理的复杂度。 ### 总结 通过对《Camel实战中文版第四章》的学习,我们可以了解到Camel...
本示例演示了如何通过Spring XML配置文件在Spring Boot中配置骆驼路线。 该应用程序利用Spring 批注通过类路径上的src / main / resources / spring / camel-context.xml文件加载Camel Context定义。 重要的 该...
6. **Spring和OSGi集成**:Camel可以无缝集成到Spring框架中,利用Spring的依赖注入和配置能力。此外,它也支持在OSGi容器(如Apache Karaf)中部署和管理。 7. **分布式系统集成**:Camel的异步处理和负载均衡特性...
ActiveMQ路由配置是Apache ActiveMQ项目中的一种重要配置方式,它依赖另一个Apache项目Camel。ActiveMQ集成了Camel,启动时同时会启动Camel。通过Camel Web Console可以进行Routing配置。 使用Camel Choice进行配置...
在MATLAB编程环境中,"Camel3Camel6函数"是指用于特定数学计算或数据分析的一系列函数。这些函数可能涉及到曲线拟合、数值优化、数据处理等应用,尤其是在处理涉及非线性问题时,比如模拟生物体的驼峰形状、物理学中...
Camel 的基本原则之一是不会假设任何你需要处理的数据,这是很重要的一点,因为它给你们开发者一个集成任何系统的一个机会,不需要转换你的数据为另外的一种公认格式。 1.2 Camel 的主要特点 Camel 提供了高水平的...
示例可能展示了如何配置和使用Camel Netty端点来创建服务器、发送和接收数据,以及处理网络连接和协议。 2. **Camel MyBatis**: - MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Camel ...
书中通过实际案例,展示了如何配置和管理路由,如何利用Camel的DSL(Domain Specific Language)进行编程,如Java、XML和Groovy DSL。此外,还涵盖了高级主题,如Spring集成、测试策略和性能优化。 源代码文件...
*灵活的路由配置:Apache Camel 框架提供了一个灵活的方式来配置路由规则,使得开发者可以根据需要灵活地配置路由规则。 *高性能:Apache Camel 框架提供了高性能的路由引擎,使得开发者可以快速地处理大量的消息。 ...
- 可以通过 Camel 的 XML 配置或 Java DSL 来创建复杂的定时任务逻辑。 - 支持定时器的暂停、恢复和取消操作,以适应动态调整任务的需求。 - 可以设置定时器的执行策略,如并发执行或顺序执行。 总的来说,...