企业集成模式实践——用actviemq集成.net应用系统

最近,在企业集成方面,做了一些技术尝试,用activemq来集成java与.net系统。

1.首先,搭建主数据管理系统

主界面如下:

3.在spring的配置文件中配置名为testTopic的队列:

<!-- 配置JMS连接工厂 --> 
      
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop"> 
            <property name="connectionFactory"> 
               <bean class="org.apache.activemq.spring.ActiveMQConnectionFactory">
                    <property name="brokerURL" value="tcp://localhost:61616"/>                  
               </bean>
               </property>    
               <!--  <property name="maxConncetions"  value="1"/>-->
        </bean>
             <!--   <bean id ="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
                    <property name="brokerURL" value="tcp://localhost:61616"/>                  
               </bean>--> 


       <bean id="SendMessage" class="test.SendMessage">
           <property name="jmsTemplate" ref="jmsTemplate"/>
           <property name="topicName" value="testTopic"/>                            
       </bean> 
      <!--   <bean id="Listener" class="test.Listener">
            <constructor-arg ref="jmsTemplate"/>     
            <constructor-arg value="testTopic" />
              				
       </bean> -->
        <!-- 配置JMS模版 --> 
      <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
             <property name="connectionFactory" ref="jmsFactory"/> 
              <property name="defaultDestination" ref="testTopic"/> 
             <property name="explicitQosEnabled" value="true"/>
             <property name="deliveryMode" value="1" />
        </bean> 
        <bean id="testTopic" class="org.apache.activemq.command.ActiveMQTopic">
            <constructor-arg value="testTopic" />          
        </bean>

4.发送消息:

package test;


import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.Topic;

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class SendMessage {
	
	private JmsTemplate jmsTemplate;
	
	private String topicName;
	
	private Topic testTopic;
	
	public void setJmsTemplate(JmsTemplate jmsTemplate){
		this.jmsTemplate = jmsTemplate;
	}
	public void setTopicName(String topicName) {
		this.topicName = topicName;
	}	

	public void sendMessage(final Map message) throws JMSException,InterruptedException{
		 
		if(testTopic==null){
			System.out.println(jmsTemplate);
			ConnectionFactory cf =jmsTemplate.getConnectionFactory();
			Connection conn = cf.createConnection();
			Session sess = conn.createSession(false,Session.AUTO_ACKNOWLEDGE);
			testTopic = sess.createTopic(topicName);
		}
		jmsTemplate.send(testTopic, new MessageCreator(){
			@Override
			public Message createMessage(Session session) throws JMSException {
				MapMessage mapMess = session.createMapMessage();
				Set temp = message.entrySet();
				Iterator temp2 = temp.iterator();
				while(temp2.hasNext()){
					Entry entry = (Entry)temp2.next();										
					mapMess.setObject((String)entry.getKey(), entry.getValue());
				}
				return mapMess;
			}
		});
		
	}
	/**
	 * 测试
	 * @param args
	 */
	public static void main(String[] args) {
	}

}

5.接收消息:

package test;

import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.Topic;

import org.springframework.jms.JmsException;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.listener.DefaultMessageListenerContainer;

public class Listener  implements MessageListener{

	private JmsTemplate jmsTemplate;
	
	private String topicName;
	
	public Listener(JmsTemplate jmsTemplate,String topicName){
		this.jmsTemplate = jmsTemplate;
		this.topicName = topicName;
		Topic topic;
		try{
			topic = this.jmsTemplate.getConnectionFactory().createConnection()
					.createSession(false, Session.AUTO_ACKNOWLEDGE)
					.createTopic(topicName);
			DefaultMessageListenerContainer dc = new DefaultMessageListenerContainer();
			dc.setPubSubDomain(true);
			dc.setDestination(topic);
			dc.setConnectionFactory(this.jmsTemplate.getConnectionFactory());
			dc.setPubSubNoLocal(false);
			dc.setMessageListener(this);
			dc.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
			dc.initialize();
			dc.start();
		}catch(JMSException e){
			e.printStackTrace();
		}
	}
	@Override
	public void onMessage(Message arg0) {
		// TODO Auto-generated method stub
		System.out.println("收到的消息:"+arg0);
		MapMessage map = (MapMessage) arg0;
		try {
			System.out.println(map.getObject("Name"));
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

6.点击消息同步,执行SendMessage:

7.在.net中进行接收监听,点击订阅消息:


posted @ 2013-05-28 10:29  zzw_88  阅读(242)  评论(0编辑  收藏  举报