随笔-124  评论-194  文章-0  trackbacks-0

事情开始想的简单,可开始做发现没那么容易。

开始只是想能够找一个具有CALLBACK功能的REMOTING RPC式的POJO方案。一搜就是LINGO,啥话也不说了,整!

可没想到LINGO依赖于4.0.2的ACTIVEMQ,且POM里的MAVEN路径也没更新成ACTIVEMQ搬家后的地方(从CODEHAUSE搬到APACHE了)。去改它的POM指向4.1.1,后来不行又找了4.0.2来自己手工安装上。

这个过程中,发现了其实直接用SPRING+MQ的方案也不错,这里有个方案。再看看LINGO的用户论坛,门可罗雀,算了,转攻MQ吧,别涂简单了。好像工作量就是多写一个消息到POJO的CONVERTER,也可以达到直接发POJO。

没想到,这边也不是很顺,不断报解析不到http://activemq.org/config/1.0schemaLocation,我按照这里说的,自己写了META-INF里的spring.schema,顺便学了下,这个文件就是告诉SPRING到本地找XSD文件的。

晕!可还是报这个错,我想最新版应该没事吧,又找来MQ的5.0 SNAPSHOT版,还是一样,最后我把SPRING的LOG4J级别设成DEBUG,发现是报找不到XBEAN的解析HANDLER:

    <dependency>
      <groupId>org.apache.xbean</groupId>
      <artifactId>xbean-spring</artifactId>
       <version>3.2</version>
    </dependency>  


赶紧加上,这次LOG走得远点,可以还是报找不到SCHEMA,彻底晕死了!最后仔仔细细查配置文件,发现我从官网这里,拷贝的SCHEMALOCATION:http://activemq.apache.org/snapshot-schema/activemq-core-5.0-SNAPSHOT.xsd,而解开实际的MQ的JAR包里,看相应的meta-inf/spring.schema文件,又是http://activemq.apache.org/schema/activemq-core-5.0.xsd,看出区别了吧?所以对应不上找不着,改了这里,就好了。把JMS配置及POM相关部分贴上来以明志,这才是开始呀!


<?xml version="1.0" encoding="UTF-8" ?>
     
<beans 
  
xmlns="http://www.springframework.org/schema/beans" 
  xmlns:amq
="http://activemq.org/config/1.0"
  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.0.xsd
    http://activemq.org/config/1.0 http://activemq.apache.org/schema/activemq-core-5.0.xsd"
>
        
 
    
<!--  embedded ActiveMQ Broker -->
    
<amq:broker useJmx="false" persistent="false">
        
<amq:transportConnectors>
            
<amq:transportConnector uri="tcp://localhost:6116"/>
        
</amq:transportConnectors>
    
</amq:broker>

    
<!--  ActiveMQ connectionFactory  -->
    
<amq:connectionFactory id="jmsConnectionFactory" brokerURL="tcp://localhost:6116"/>

    
<!--  ActiveMQ destinations  -->
    
<amq:queue name="destination" physicalName="org.apache.activemq.spring.Test.spring.embedded"/>

    
<!--  Spring JmsTemplate config -->
    
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        
<property name="connectionFactory">
            
<!--  lets wrap in a pool to avoid creating a connection per send -->
            
<bean class="org.springframework.jms.connection.SingleConnectionFactory">
                
<property name="targetConnectionFactory" ref="jmsConnectionFactory"/>
            
</bean>
        
</property>
        
<!-- custom MessageConverter -->
        
<property name="messageConverter" ref="orderMessageConverter"/>
    
</bean>

    
<!--  OrderMessage converter  -->
    
<bean id="statusConverter" class="com.exchangebit.nms.magic.mq.ConvertAddHostData"/>

    
<!-- POJO which send Message uses  Spring JmsTemplate -->
    
<bean id="statusProducer" class="com.exchangebit.nms.magic.mq.StatusProducer">
        
<property name="template" ref="jmsTemplate"/>
        
<property name="destination" ref="destination"/>
    
</bean>

    
<!--  Message Driven POJO (MDP) -->
    
<bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
        
<constructor-arg>
            
<bean class="com.exchangebit.nms.magic.mq.StatusConsumer">
            
</bean>
        
</constructor-arg>
        
<property name="messageConverter" ref="statusConverter"/>
    
</bean>

    
<bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        
<property name="connectionFactory" ref="jmsConnectionFactory"/>
        
<property name="destination" ref="destination"/>
        
<property name="messageListener" ref="messageListener"/>
    
</bean>
</beans>



POM文件相关节:

    <dependency>
      
<groupId>org.springframework</groupId>
      
<artifactId>spring</artifactId>
      
<version>2.0.6</version>
    
</dependency>

    
<dependency>
      
<groupId>org.apache.activemq</groupId>
      
<artifactId>activemq-core</artifactId>
      
<version>5.0-SNAPSHOT</version>
    
</dependency>
      
    
<dependency>
      
<groupId>org.apache.xbean</groupId>
      
<artifactId>xbean-spring</artifactId>
      
<version>3.2</version>
    
</dependency>     

看下面日志,应该启动成功,netstat看也有连接和监听端口了,可以继续往前走了:
9266 INFO main  [org.apache.activemq.broker.BrokerService] - Using Persistence Adapter: MemoryPersistenceAdapter
9282 INFO main  [org.apache.activemq.broker.BrokerService] - ActiveMQ 5.0-SNAPSHOT JMS Message Broker (localhost) is starting
9282 INFO main  [org.apache.activemq.broker.BrokerService] - For help or more information please see: http://activemq.apache.org/
2007-11-24 14:57:41 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://magic.nms.exchangebit.com/}NotifyServiceImplService from class com.exchangebit.nms.magic.NotifyServiceImpl
2007-11-24 14:57:43 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://nodesvc.magic.nms.exchangebit.com/}NodeSvcImplService from class com.exchangebit.nms.magic.nodesvc.NodeSvcImpl
9813 INFO main  [org.apache.activemq.transport.TransportServerThreadSupport] - Listening for connections at: tcp://hehe:6116
9829 INFO main  [org.apache.activemq.broker.TransportConnector] - Connector tcp://localhost:6116 Started
9844 INFO main  [org.apache.activemq.broker.BrokerService] - ActiveMQ JMS Message Broker (localhost, ID:hehe-1857-1195887464218-0:0) started
posted on 2007-11-24 15:29 我爱佳娃 阅读(4023) 评论(0)  编辑  收藏 所属分类: ActiveMQ

只有注册用户登录后才能发表评论。


网站导航: