初学JMS笔记3
来源:互联网 发布:熊出没知乎 编辑:程序博客网 时间:2024/06/05 04:21
Lingo 是一个Spring的子项目,是一种基于Spring的远程调用方式,可以将Bean的功能输出成Login服务,然后通过代理的方式转入到本地客户使用.Lingo是RPC和异步消息通信之间的一种互补,Login远程调用可以采用JMS的队列和主题来承载信息,这样就可以保证即使在消息的接收都不可能用的情况,调用会保存在队列或主题中,当接收方可用时,仍然可以接收到消息,Lingo做为
Spring的一个子项目存在! 下面是一个简单的例子
在工程中导入 lingo.jar 和 jsde_concurrent-9.0.jar 两个jar包.
spring文件中如何配置 Lingo将Bean输出成Login服务,该服务是基于JMS消息目标的
<!-- 输出服务 -->
<bean id="server" class="org.logicblaze.lingo.jms.JmsServiceExporter">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="kesnQDestination"/>
<property name="service" ref="markingPojoMdp"/> //Bean
<property name="serviceInterface" value="com.kesn.jms.pojomdp.MarkingService"/> //服务要实现的接口
</bean>
通过代理工厂的方式创建服务代理对象
<!-- 代理工厂 产生使用Lingo输出服务的代理对象-->
<bean id="marking" class="org.logicblaze.lingo.jms.JmsProxyFactoryBean">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="kesnQDestination"/>
<property name="serviceInterface" value="com.kesn.jms.pojomdp.MarkingService"/> //代理实现的接口
</bean>
将服务代理对象注入到本地业务对象中
<bean id="markingService" class="com.kesn.jms.pojomdp.MarkingMdp">
<property name="markingService" ref="marking"/>
</bean>
本地业务的接口和实现类
package com.kesn.jms.pojomdp;
import com.kesn.jms.entity.Motorist;
public interface MarkingService {
public void handleMessage(Motorist m);
public void addMotorist(Motorist m);
}
package com.kesn.jms.pojomdp;
import org.apache.log4j.Logger;
import com.kesn.jms.entity.Motorist;
public class MarkingMdp implements MarkingService{
private Logger log=Logger.getLogger(MarkingMdp.class);
private MarkingService markingService;
// public void handleMessage(Map map) {
// Motorist m=new Motorist();
// m.setName(map.get("name").toString());
// m.setEmail(map.get("email").toString());
// m.setAge(map.get("age").toString());
// log.info("name:"+m.getName());
// }
public void setMarkingService(MarkingService markingService) {
this.markingService = markingService;
}
public void handleMessage(Motorist m) {
log.info("name:"+m.getName());
}
@Override
public void addMotorist(Motorist m) {
markingService.handleMessage(m);
}
}
测试类
package com.kesn.jms.client;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.kesn.jms.entity.Motorist;
import com.kesn.jms.pojomdp.MarkingService;
public class LingoClient {
private static Logger log=Logger.getLogger(LingoClient.class);
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
MarkingService ms=(MarkingService)context.getBean("markingService");
Motorist m=new Motorist();
m.setName("李乐平1");
m.setEmail("lilpjob");
m.setAge("1");
ms.addMotorist(m);
}
}
测试过程中,调用添加Matorist 对象后,可以调用服务代理的方法,调用Handmessage() 方法是基于JMS的调用方式,真实的应用场景中,两个方法是分布在不同的进程中的!
Lingo的RPC调用的方式不同之处在Lingo的调用可以是异步的,如果通过Lingo调用的远程方法没有返回值,系统就可以做其它事情,不必等待; RPC是同的远程的调用方式
- 初学JMS笔记3
- 初学JMS笔记1
- 初学JMS笔记2
- JMS学习笔记3
- JMS笔记-
- JMS笔记
- JMS笔记
- 初学笔记3
- Python初学笔记3
- R语言初学笔记3
- JS初学笔记(3)
- 初学笔记
- 初学笔记
- JMS学习笔记
- Jms---ActiveMQ学习笔记
- JMS学习笔记1
- JMS学习笔记2
- JMS学习笔记4
- 今天开始学习struts2
- SSH用户等价关系配置
- asterisk IPPBX 系统架构说明文档
- 无聊,测试一下啦
- porting 类软件管理
- 初学JMS笔记3
- TF/IDF概念学习笔记
- 一些VBScript日期小代码
- DE2开发板:NiosII+LWIP环境下DM9000A的驱动程序分析(web_server.c)
- 最新MacBook配置更新综述
- 就你发高手坛
- 就你发高手坛
- C字符串处理函数的实现
- Visual Studio 2010:助力敏捷开发