`
wangleifire
  • 浏览: 511197 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

camel入门 xmpp tcp 配置 之XMPPReceiver

阅读更多

 

这个是服务器

 

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();
        }
    }
}

分享到:
评论

相关推荐

    ApacheCamel快速入门(中)

    接上文EndpointDirect用于在两个编排好的路由间实现Exchange消息的连接,上一个路由中由最后一个元素处理完的Exchange对象,将被发送至由Direct连接的下一个路由起始位置(http://camel.apache.org/direct.html)。...

    Camel in action(camel实战)

    - 路由是 Camel 的核心功能之一,它允许开发者定义消息应该如何在不同的端点之间流动。这包括简单的单向路由、复杂的分发路由等。 **3. 数据转换** - Camel 提供了丰富的工具来转换消息的数据格式。无论是简单的...

    spring-boot-camel-config:Spring Boot Camel配置快速入门

    使用ConfigMap和Secrets的Spring-Boot Camel快速入门本快速入门演示了如何使用Kubernetes ConfigMap和Secrets配置Spring-Boot应用程序。 路由会生成示例消息,这些示例消息将传递到通过src/main/resources/...

    ApacheCamel快速入门(上)

    在这个专题中,我们介绍了相当数量技术组件:Flume、Kafka、ActiveMQ、Rabbitmq、Zookeeper、Thrift、Netty、DUBBO等等,还包括本文要进行介绍的ApacheCamel。有的技术组件讲得比较深入,有的技术组件则是点到为止。...

    camel配置TIBCO-topic

    在上述配置中,我们看到Camel正在被用来与TIBCO的Topic进行集成,这是一个用于发布/订阅消息模式的组件。TIBCO(TIBCO Enterprise Message Service)是一个强大的消息传递系统,广泛用于企业级应用间的数据交换。 ...

    ApacheCamel-JDBC

    - **配置组件**:首先,需要在Camel上下文中配置JDBC组件,提供数据库连接信息。 - **创建数据源**:通常,会使用Java的DataSource接口来创建数据库连接池,提高性能。 - **定义路由**:使用`from()`和`to()`定义...

    针对Java开发者的ApacheCamel入门指南

    为了简化启动过程,可以考虑继承`org.apache.camel.main.Main`类,这样不仅可以自动配置`CamelContext`,还能利用内置的命令行参数,例如启用追踪或加载自定义路由。 在实际应用中,当路由变得复杂时,可以使用...

    [Camel实战].(Camel.in.Action).Claus.Ibsen&Jonathan;.Anstey.文字版

    ### Apache Camel 实战知识点概述 #### 一、Apache Camel 简介 - **定义**:Apache Camel 是一个强大的开源框架...书中不仅提供了丰富的理论知识,还有大量的实践案例和代码示例,是学习Camel不可或缺的经典教材之一。

    Camel服务集成,服务编排操作文档

    这使得Camel能够利用Spring的依赖注入、配置管理和事务管理等功能。 10. **Camel开发指南** 提供的“Apache Camel 开发指南”将详细介绍如何设置开发环境、创建第一个路由、调试和测试Camel应用,以及如何利用...

    Camel实战中文版第四章.pdf

    通过上述配置,Camel能够在接收到消息后直接调用`HelloBean`中的`hello`方法,并将消息体作为参数传递给该方法,大大简化了消息处理的复杂度。 ### 总结 通过对《Camel实战中文版第四章》的学习,我们可以了解到Camel...

    spring-boot-camel-xml:一个快速入门,展示了如何将Spring Boot和camel与XML DSL以及Kubernetes或OpenShift一起使用

    本示例演示了如何通过Spring XML配置文件在Spring Boot中配置骆驼路线。 该应用程序利用Spring 批注通过类路径上的src / main / resources / spring / camel-context.xml文件加载Camel Context定义。 重要的 该...

    Apache Camel中文开发使用指南.zip

    6. **Spring和OSGi集成**:Camel可以无缝集成到Spring框架中,利用Spring的依赖注入和配置能力。此外,它也支持在OSGi容器(如Apache Karaf)中部署和管理。 7. **分布式系统集成**:Camel的异步处理和负载均衡特性...

    ActiveMQ路由配置方式

    ActiveMQ路由配置是Apache ActiveMQ项目中的一种重要配置方式,它依赖另一个Apache项目Camel。ActiveMQ集成了Camel,启动时同时会启动Camel。通过Camel Web Console可以进行Routing配置。 使用Camel Choice进行配置...

    camel in action 中文版 第一章

    Camel 的基本原则之一是不会假设任何你需要处理的数据,这是很重要的一点,因为它给你们开发者一个集成任何系统的一个机会,不需要转换你的数据为另外的一种公认格式。 1.2 Camel 的主要特点 Camel 提供了高水平的...

    Camel_Camel3Camel6函数_

    在MATLAB编程环境中,"Camel3Camel6函数"是指用于特定数学计算或数据分析的一系列函数。这些函数可能涉及到曲线拟合、数值优化、数据处理等应用,尤其是在处理涉及非线性问题时,比如模拟生物体的驼峰形状、物理学中...

    Camel所有示例

    示例可能展示了如何配置和使用Camel Netty端点来创建服务器、发送和接收数据,以及处理网络连接和协议。 2. **Camel MyBatis**: - MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Camel ...

    Camel in action PDF和源代码

    书中通过实际案例,展示了如何配置和管理路由,如何利用Camel的DSL(Domain Specific Language)进行编程,如Java、XML和Groovy DSL。此外,还涵盖了高级主题,如Spring集成、测试策略和性能优化。 源代码文件...

    Apache Camel 框架之---JMS路由.docx

    *灵活的路由配置:Apache Camel 框架提供了一个灵活的方式来配置路由规则,使得开发者可以根据需要灵活地配置路由规则。 *高性能:Apache Camel 框架提供了高性能的路由引擎,使得开发者可以快速地处理大量的消息。 ...

    ApacheCamel-Timer

    - 可以通过 Camel 的 XML 配置或 Java DSL 来创建复杂的定时任务逻辑。 - 支持定时器的暂停、恢复和取消操作,以适应动态调整任务的需求。 - 可以设置定时器的执行策略,如并发执行或顺序执行。 总的来说,...

Global site tag (gtag.js) - Google Analytics