1.6. JMS
使用JMS来作为底层的通信协议透明暴露服务也是可能的。Spring框架中对JMS的远程支持也很基础 - 它在同一线程和同一个非事务 Session上发送和接收,这些吞吐量将非常依赖于实现。
The following interface is used on both the server and the client side.
下面的接口可同时用在服务端和客户端。
package com.foo;
public interface CheckingAccountService {
public void cancelAccount(Long accountId);
}
对于上面接口的使用在服务的端简单实现如下。
package com.foo;
public class SimpleCheckingAccountService implements CheckingAccountService {
public void cancelAccount(Long accountId) {
System.out.println("Cancelling account [" + accountId + "]");
}
}
这个包含JMS设施的bean的配置文件可同时用在客户端和服务端。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://ep-t43:61616"/>
</bean>
<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="mmm"/>
</bean>
</beans>
1.6.1. 服务端配置
在服务端你只需要使用JmsInvokerServiceExporter来暴露服务对象。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="checkingAccountService"
class="org.springframework.jms.remoting.JmsInvokerServiceExporter">
<property name="serviceInterface" value="com.foo.CheckingAccountService"/>
<property name="service">
<bean class="com.foo.SimpleCheckingAccountService"/>
</property>
</bean>
<bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="queue"/>
<property name="concurrentConsumers" value="3"/>
<property name="messageListener" ref="checkingAccountService"/>
</bean>
</beans>
package com.foo;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Server {
public static void main(String[] args) throws Exception {
new ClassPathXmlApplicationContext(new String[]{"com/foo/server.xml", "com/foo/jms.xml"});
}
}
1.6.2. 客户端配置
客户端仅仅需要创建一个客户端代理来实现上面的接口(CheckingAccountService)。根据后面的bean定义创建的结果对象可以被注入到其它客户端对象中,而这个代理会负责通过JMS将调用转发到服务端。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="checkingAccountService"
class="org.springframework.jms.remoting.JmsInvokerProxyFactoryBean">
<property name="serviceInterface" value="com.foo.CheckingAccountService"/>
<property name="connectionFactory" ref="connectionFactory"/>
<property name="queue" ref="queue"/>
</bean>
</beans>
package com.foo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[] {"com/foo/client.xml", "com/foo/jms.xml"});
CheckingAccountService service = (CheckingAccountService) ctx.getBean("checkingAccountService");
service.cancelAccount(new Long(10));
}
}
你可能也希望研究Lingo 项目提供的支持,它(引用到主页) “... 是一个基于轻量级POJO的远程核消息代码库,它使用并扩展了Spring框架的远程代码库以支持JMS。”
- 浏览: 5042581 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
发表评论
-
RocketMQ存储篇——MapedFileQueue
2017-11-16 18:28 730MapedFileQueue 应用层访问commitlo ... -
如何在Kafka上创建一个Topic
2017-11-14 09:36 3626脚本手工创建 ./bin/kafka-topics.sh ... -
万亿级数据洪峰下的分布式消息引擎
2017-11-14 09:43 970前言 通过简单回顾阿里中间件(Aliware)消息引擎的 ... -
分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题
2017-10-26 10:10 1357在说到消息中间件的时候,我们通常都会谈到一个特性:消息的顺序 ... -
kafka消息传递保障
2017-10-20 15:48 915Now that we understand a litt ... -
Kafka 高吞吐量性能揭秘
2017-10-20 15:09 794A high-throughput distributed ... -
从Apache Kafka 重温文件高效读写
2017-10-20 14:52 14860. Overview 卡夫卡说:不要害怕文件系统。 它 ... -
RocketMQ配置
2017-10-13 18:48 9881. 客户端的公共配置类:ClientConfig 参 ... -
RocketMQ批量消费、消息重试、消费模式、刷盘方式
2017-10-13 18:43 1604一、Consumer 批量消费 可以通过 ... -
RocketMQ原理解析-broker 3.load&recover
2017-10-13 10:23 1151Broker启动的时候需要加载一系列的配置,启动一系列的任 ... -
RocketMQ——Consumer篇:向Broker同步消费进度的定时任务
2017-10-13 10:20 3371每隔5秒调用一次MQClientInstance.pers ... -
分布式消息队列RocketMQ与Kafka架构上的巨大差异之2 -- CommitLog与ConsumeQueue
2017-10-12 16:29 1762在前面Rocket与Kafka的对比之“拨乱反正”续篇中, ... -
Kafka源码深度解析-序列7 -Consumer -coordinator协议与heartbeat实现原理
2017-10-12 11:45 1930单线程的consumer在前面 ... -
分布式消息队列RocketMQ源码分析之4 -- Consumer负载均衡与Kafka的Consumer负载均衡之不同点
2017-10-12 11:36 1204分析完RocketMQ的负载均衡,我们发现它比Kafka的负 ... -
alibaba rocket mq的串行及并行处理
2017-10-12 10:37 890项目中用到rocket mq的方式有多种, 第一种,严格 ... -
Otter(一)初识----简介和基本架构图
2017-10-11 11:23 1284tter 初识----简介和基本架构图 ... -
RocketMQ的顺序消费和事务消费
2017-10-11 10:57 1108一、三种消费 :1.普通消费 2. 顺序消费 3.事务消费 ... -
rocketmq怎么保证队列完全顺序消费?
2017-10-11 10:55 5502实际上,RocketMQ是支持顺序消费的。 但这个顺序,不是 ... -
RocketMQ原理解析-producer 4.发送分布式事物消息
2017-08-09 11:40 1338为什么消息要具备事务能力 还是比较清晰的。简单的说 就是 ... -
架构设计:系统间通信(20)——MQ:消息协议(下)
2017-07-27 10:01 780篇文章中我们重点讨 ...
相关推荐
1. 创建服务代理:客户端首先需要通过JAX-WS或JAX-RS API创建服务代理对象,这将暴露与服务端相同的接口。CXF提供了工具,如wsdl2java,可以自动生成这些代理类。 2. 调用服务:通过服务代理对象,客户端可以像调用...
这个bean将服务接口和其实现绑定到JMS队列,使得客户端可以通过发送消息到队列来触发服务端的方法执行。 在客户端,我们需要创建一个消息生产者,它负责包装调用请求为JMS消息,并将其发送到服务端的队列。服务端则...
在服务端,你可以使用Axis将Java类或者Java接口转换为Web服务,而客户端则可以通过WSDL(Web服务描述语言)文件生成客户端 stubs 来调用服务。Axis还支持多种协议,如HTTP、HTTPS和JMS,以及多种数据绑定机制,如...
客户端通过CXF的客户端API与服务端进行通信,调用服务端提供的接口,传递参数,接收返回结果。客户端通常会包含服务代理的创建、调用方法和处理响应的代码。 6. 服务调用流程: - 客户端通过服务地址(如URL)获取...
### CXF服务端和客户端应用开发指南:详细解析与实践 #### 一、CXF概述与应用场景 CXF(Camel XFire Framework)是Apache软件基金会的一个开源项目,旨在简化Web Services的开发过程,提供了一个强大的框架来创建...
这个"CXF开发完整包"包含了所有你需要的组件,确保版本一致,无论是用于服务端部署还是客户端调用。CXF允许开发者通过Java编程模型来创建和消费Web服务,使得API的开发和使用变得更加简单。 1. **CXF简介** Apache...
Spring为各种远程访问技术提供集成工具类。Spring远程访问通过使用普通POJOs,能更容易的开发远程访问服务。... 客户端定义与服务端已暴露的相同接口 4). 客户端通过RmiProxyFactoryBean调用服务接口
Web服务调用与发布技术是IT领域中一种重要的通信机制,它允许不同的应用程序之间通过互联网进行数据交换和功能共享。Web服务基于开放标准,如XML(可扩展标记语言)、SOAP(简单对象访问协议)和WSDL(Web服务描述...
HttpInvoker是Spring框架中的一种远程调用机制,主要用于在分布式系统中实现服务间的通信...通过阅读和运行这个示例,你可以掌握配置、客户端调用和服务端暴露服务的基本步骤,进一步提升你在分布式系统开发中的技能。
- **服务引用(Service Reference)**:`RpcExample.reference()`方法在客户端创建一个`Socket`连接到服务端,通过动态代理创建接口的实例,所有对这个接口的调用都会被转发到服务端执行。 4. **消息中间件:** -...
首先,需要定义服务接口和实现,然后使用CXF的注解或者XML配置来暴露这个服务。CXF会自动生成WSDL文件,描述服务的接口和操作。最后,启动服务器监听指定端口,等待客户端的请求。 **客户端开发** "Cxf_Client...
本篇文章将深入探讨如何使用CXF创建Web服务接口,包括服务端和客户端的构建,并提供详细的步骤和文档。 1. **服务端创建** - 首先,我们需要定义服务接口。这通常是一个Java接口,其中包含了我们希望暴露为Web服务...
- **远程接口(Remote Interface)**:定义了远程对象需要暴露给客户端调用的方法。这些接口必须继承自java.rmi.Remote接口。 - **远程实现(Remote Implementation)**:实现了远程接口的具体类,包含了业务逻辑...
Shell Plus 是一款基于RMI(Remote Method Invocation,远程方法调用)技术的服务器管理工具,主要由服务端、注册中心和客户端三部分构成。这款工具主要用于合法的服务器管理和攻防后门安全测试,严禁用于非法活动。...
RMI是分布式计算的基础,广泛应用于构建分布式应用系统,如服务器端与客户端之间的交互。本篇文章将深入探讨RMI的工作原理、实现步骤以及相关示例。 一、RMI工作原理 1. 注册表:RMI的核心是注册表,它是一个全局的...
客户端用于调用服务端提供的Web服务。在CXF中,客户端可以通过WSDL(Web服务描述语言)文件生成服务代理,这个代理就像服务的本地代理,使得调用远程服务如同调用本地方法一样简单。也可以通过动态客户端API直接构造...
服务端实现这个接口并暴露为Web Service,客户端通过SOAP请求调用这个服务,接收返回的问候消息。 1. 服务端: - 使用JAX-WS(Java API for XML Web Services)创建Web Service。JAX-WS是Java标准版的一部分,提供...
这个实例源码提供了一个完整的示例,包括服务端的配置和服务的实现,以及客户端如何通过Web页面和JavaScript进行调用。 1. **Xfire框架**:Xfire是Apache CXF的前身,它提供了快速构建SOAP Web服务的能力。它的核心...
在这个例子中,我们有一个服务端,它暴露了一个远程接口,以及一个客户端,该客户端能够调用服务端的方法。 1. **RMI的基本概念**: - **远程接口**:这是定义远程方法的Java接口,需要使用`java.rmi.Remote`作为...
- **JMS集成**:通过CORBA的GIOP协议,JacORB可以与Java消息服务(JMS)结合,实现消息驱动的分布式应用。 - **Web服务集成**:可以通过JacORB的WS-IF支持,将CORBA对象暴露为Web服务,或者消费Web服务。 ### 6. ...