`

利用Camel调用远程对象

阅读更多
利用Camel调用远程对象,很简答也很方便,只要定义好服务器和客户端即可。下面的例子可以直接运行,不过需要导入Camel和ActiveMQ的Jar包, 所有的Jar包都能在camel.apache.org下载。
代码如下:
1.先定义接口:
import java.util.Date;

public interface StudentInterface {
	
	public String getName();
	
	public int getAge();
	
	public Date getDate();
}

2.定义实现类:
public class StudentImpl implements StudentInterface {

	@Override
	public String getName() {
		return "Tom";
	}

	@Override
	public int getAge() {
		return 11;
	}

	@Override
	public Date getDate() {
		return new Date();
	}

}

3.定义服务器端配置文件:
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:camel="http://camel.apache.org/schema/spring" xmlns:broker="http://activemq.apache.org/schema/core"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
        http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd">

	<camel:camelContext id="camel-server">
		<camel:route>
			<camel:from uri="jms:queue:getStudent" />
			<camel:to uri="studentExport" />
		</camel:route>
	</camel:camelContext>

	<broker:broker useJmx="false" persistent="false"
		brokerName="localhost">
		<broker:transportConnectors>
			<broker:transportConnector name="tcp"
				uri="tcp://localhost:61610" />
		</broker:transportConnectors>
	</broker:broker>

	<bean id="jms" class="org.apache.activemq.camel.component.ActiveMQComponent">
		<property name="brokerURL" value="tcp://localhost:61610" />
	</bean>

	<bean id="studentExport" class="org.apache.camel.spring.remoting.CamelServiceExporter">
		<property name="uri" value="jms:queue:getStudent" />
		<property name="service" ref="student" />
		<property name="serviceInterface" value="com.zakisoft.camel.demo01.service.inft.StudentInterface" />
	</bean>

	<bean id="student" class="com.zakisoft.camel.demo01.service.impl.StudentImpl" />

</beans>

4:定义客户端配置文件
<?xml version="1.0" encoding="UTF-8"?>

<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">

    <camel:camelContext id="camel-client">
    	<camel:template id="camelTemplate"/>
          <camel:proxy
            id="studentProxy"
            serviceInterface="com.zakisoft.camel.demo01.service.inft.StudentInterface"
            serviceUrl="jms:queue:getStudent"/>
    </camel:camelContext>
    
    <bean id="jms" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="brokerURL" value="tcp://localhost:61610"/>
    </bean>
    
</beans>

5.定义客户端和测试代码:
package com.zakisoft.camel.demo01.service;

import static org.junit.Assert.assertEquals;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.zakisoft.camel.demo01.service.inft.StudentInterface;

public class CamelRemote4Test {

	protected static ConfigurableApplicationContext serverContext;

	@BeforeClass
	public static void setUpServer() {
		serverContext = new ClassPathXmlApplicationContext("config01/camel-server.xml");
	}

	@AfterClass
	public static void tearDownServer() {
		if (serverContext != null) {
			serverContext.stop();
		}
	}

	@Test
	public void testCamelRemotingInvocation() {
		ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
				"config01/camel-client-remoting.xml");
		
		StudentInterface student = (StudentInterface) context.getBean("studentProxy");

		int age = student.getAge();

		assertEquals("Get a wrong response", 11, age);

		context.stop();
	}
}


6. 所有源文件都在附件中。
分享到:
评论

相关推荐

    camel-cxf调用和发布webservice例子

    用camel-cxf调用webservice和发布一个webservice接口例子,首先启动QueryServiceMain主函数启动webservice接口,然后启动测试类TestWebservice。例子主要是实现java代码实现camel调用webservice接口

    使用CXF和camel-cxf调用webservice

    通过使用camel-cxf,你可以利用Camel的灵活性和路由能力来处理Web服务的调用和响应。 在camel-cxf中,你可以: 1. **定义路由**:使用Camel的DSL(Domain Specific Language)或者XML配置文件,定义从何处获取输入...

    Camel in action(camel实战)

    ### Apache Camel 在行动 #### 一、Apache Camel 概述 Apache Camel 是一个强大...通过本书的学习,读者不仅能够掌握 Camel 的基础知识,还能深入了解如何利用 Camel 解决实际问题,进而成为一名真正的 Camel 大师。

    Camel实战中文版第四章.pdf

    《Camel实战中文版第四章》主要探讨了Apache Camel框架中如何利用现有的Java Bean进行消息处理和服务调用。这一章节对于理解和掌握Camel如何与现有Java系统集成非常重要。 #### 二、ServiceActivator企业设计模式的...

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

    - **远程调用**:探讨了远程调用的实现机制及其应用场景。 #### 三、附加内容 - **简单表达式语言 (Simple, the expression language)**:介绍了Camel中使用的简单表达式语言及其应用。 - **表达式和谓词 ...

    camel文档

    - **远程服务调用**:介绍如何使用Camel实现远程服务的调用。 - **安全性和性能**:讨论Bean路由和远程调用中的安全性和性能问题,并提供解决方案。 综上所述,这本书提供了对Apache Camel的全面了解,不仅涵盖了...

    Camel_Camel3Camel6函数_

    对于"Camel3Camel6函数"的学习,你需要理解非线性函数的性质,掌握MATLAB的基本语法和函数调用方式,同时了解优化算法的基本原理,如梯度下降、牛顿法、遗传算法等。通过阅读和理解源代码,你可以深入学习MATLAB编程...

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

    提供的“Apache Camel 开发指南”将详细介绍如何设置开发环境、创建第一个路由、调试和测试Camel应用,以及如何利用Camel的高级特性。它是学习和精通Camel的宝贵资源。 通过掌握上述知识点,开发者可以有效地利用...

    Manning.Camel.in.Action

    - 第14章探讨了Bean路由和远程调用,以及如何在分布式环境中使用Camel。 ### 结论 《Manning.Camel.in.Action》是一本详尽且实用的指南,对于希望学习和掌握Apache Camel的开发者来说,它提供了一个全面的学习...

    Apache Camel 源码分析.rar

    理解这些细节可以帮助你更好地利用 Camel 构建高效、可靠的集成解决方案。同时,源码分析也有助于提升你的编程技能,使你能够更深入地调试和优化基于 Camel 的系统。 总而言之,通过对 Apache Camel 的 `direct`、`...

    ApacheCamel-JDBC

    通过学习和实践"Apache Camel-JDBC",开发者可以更好地利用Camel的灵活性和JDBC的数据库操作能力,构建出高效且可扩展的集成解决方案。提供的代码样例Demo将帮助我们理解如何在实际项目中应用这些概念,从而提升...

    05-ApacheCamel-CXF-WebService

    Camel的CXF组件使得能够利用CXF的功能,同时利用Camel的灵活性和路由能力来构建复杂的集成逻辑。 另一方面,"05-ApacheCamel-CXF-WebService"可能包含了服务端的实现,它展示了如何使用Camel和CXF来创建Web服务。在...

    Camel in action

    该章节探讨了如何使用Camel进行Bean级别的路由和远程调用,这对于构建微服务架构非常有用。 #### 四、总结 《Camel in Action》是一本内容丰富、实用性强的书籍,适合所有希望深入了解Apache Camel并将其应用于...

    Camel in action PDF和源代码

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

    Camel in Action

    介绍了如何使用Camel来实现Bean级别的路由和远程服务调用。 #### 三、重要知识点总结 - **Camel简介**:Camel是一款开源的企业服务总线(ESB),用于简化企业级应用之间的集成工作。它基于Java语言编写,拥有丰富的...

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

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

    01-ApacheCamel-HelloWorld

    通过了解和实践这个示例,你可以对 Camel 的基本工作原理以及如何利用 HTTP 组件有更深入的理解。这只是一个开始,Apache Camel 提供了更多功能,如数据转换、消息过滤、路由策略等,使得在复杂的集成场景下也能...

    ApacheCamel-Timer

    - 定时器触发的事件会携带一些信息,例如定时器的名称、事件发生的次数等,这些信息可以通过 Camel 的 Message 对象获取。 - 在处理器中,你可以根据这些信息来决定如何处理当前的事件。 4. **与其它组件集成**:...

    camel in action 中文版 第一章

    " Camel In Action 中文版第一章知识点" 本章节将对 Camel 框架进行介绍, Camel 是一个开源的一体化框架,其目的是使一体化系统更容易。本书的第一章节我们将介绍 Camel 及展示它适合大企事业单位的软件。你将会...

Global site tag (gtag.js) - Google Analytics