zoukankan      html  css  js  c++  java
  • 企业集成模式实践——用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中进行接收监听,点击订阅消息:


  • 相关阅读:
    bootstrap实战练习中涉及的知识点(很有用哦!)
    Markdown的最常用标记符号有哪些?
    队列的插入 和出列 阻塞 时间 问题
    ArrayBlockingQueue和LinkedBlockingQueue的使用
    自己总结 :并发队列ConcurrentLinkedQueue、阻塞队列AraayBlockingQueue、阻塞队列LinkedBlockingQueue 区别 和 使用场景总结
    战斗由客户端来做,后端来验证 方式 解决 一些弊端思路
    类 文件 右下角呈现 红色小圆圈,里面有一个J 标记
    苏州儿童医保
    Error: opening registry key 'SoftwareJavaSoftJava Runtime Environment' could not find java.dll
    intellj(idea) 编译项目时在warnings 页签框里 报 “xxx包不存在” 或 “找不到符号” 或 “未结束的字符串字面值” 或 “需要)” 或 “需要;”等错误提示
  • 原文地址:https://www.cnblogs.com/bestdata/p/3199787.html
Copyright © 2011-2022 走看看