您的位置:首页 > 其它

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

2013-05-28 10:29 609 查看
最近,在企业集成方面,做了一些技术尝试,用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中进行接收监听,点击订阅消息:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐