`

jms 学习笔记3

 
阅读更多

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是同的远程的调用方式

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics