聽<bean id="connectionFactory"
聽聽聽聽聽聽聽 class="org.apache.activemq.ActiveMQConnectionFactory">
聽聽聽聽聽聽聽 <property name="brokerURL" value="tcp://localhost:61616" />
</bean>
<bean id="jmsTemplate"
聽聽聽聽聽聽聽 class="org.springframework.jms.core.JmsTemplate102">
聽聽聽聽聽聽聽 <property name="connectionFactory" ref="connectionFactory"/>
聽聽聽聽聽聽聽 <property name="timeToLive" value="86400000"/>
聽聽聽聽聽聽聽 <property name="defaultDestinationName" value="cmpp" />
聽聽聽聽聽聽聽 <property name="messageConverter" ref="messageConverter" />
聽聽聽聽聽聽聽 <property name="receiveTimeout" value="30000" />
聽聽聽 </bean>
涓婇潰鐨勯厤緗腑鐢ㄥ埌浜嗙涓姝ラ厤緗殑connectionFactory浠ュ強涓涓秷鎭漿鎹㈢殑綾?messageConverter錛岃繖涓被瀹炵幇浜?org.springframework.jms.support.converter.MessageConverter鎺ュ彛錛屽彲浠ュ湪娑堟伅鍙戦佷箣鍓嶅拰鎺ュ彈涔嬪悗榪涜娑堟伅綾誨瀷杞崲銆傚叿浣撶殑鐪嬫渶鍚庣殑瀹炰緥浠g爜銆傞厤緗唬鐮佸涓嬶細
聽<!-- Spring JMS SimpleConverter -->
聽聽聽聽聽聽 <bean id="simpleConverter"聽 class="org.springframework.jms.support.converter.SimpleMessageConverter" />
<!-- Message Converter -->
聽聽聽 <bean id="messageConverter"
聽聽聽聽聽聽聽 class="com.liangj.apmgt.jms.ApmgtMessageConverter">
聽聽聽聽聽聽聽 <property name="converter">
聽聽聽聽聽聽聽聽聽聽聽 <ref local="simpleConverter" />
聽聽聽聽聽聽聽 </property>
聽聽聽 </bean>
4銆傞厤緗彂閫佷唬鐮?br />聽聽聽 <bean id="producer"
聽聽聽聽聽聽聽 class="com.liangj.apmgt.jms.DefaultApmgtMessageProducer">
聽聽聽聽聽聽聽 <property name="jmsTemplate" ref="jmsTemplate" />
聽聽聽 </bean>
5銆傛帴鐫閰嶇疆鐩戝惉鍣紝榪欐槸Spring2.0鏂板鐨勫姛鑳斤紝閰嶇疆濡備笅錛?br /><!-- this is the Message Driven POJO (MDP) -->
聽聽聽 <bean id="messageListener"
聽聽聽聽聽聽聽 class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
聽聽聽聽聽聽聽 <constructor-arg>
聽聽聽聽聽聽聽聽聽聽聽 <bean
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 class="com.liangj.apmgt.jms.DefaultApmgtMessageListener" />
聽聽聽聽聽聽聽 </constructor-arg>
聽聽聽聽聽聽聽 <property name="defaultListenerMethod" value="onMessage" />
聽聽聽聽聽聽聽 <property name="messageConverter" ref="messageConverter" />
聽聽聽 </bean>
聽聽聽 <!-- and this is the attendant message listener container -->
聽聽聽 <bean id="listenerContainer"
聽聽聽聽聽聽聽 class="org.springframework.jms.listener.DefaultMessageListenerContainer">
聽聽聽聽聽聽聽 <property name="connectionFactory" ref="connectionFactory" />
聽聽聽聽聽聽聽 <property name="destinationName" value="${jms.destinationName.cmpp}" />
聽聽聽聽聽聽聽 <property name="messageSelector" value="${jms.messageSelector}" />
聽聽聽聽聽聽聽 <property name="messageListener" ref="messageListener" />
聽聽聽 </bean>
聽Spring閰嶇疆鐩戝惉鍣ㄦ湁寰堝縐嶉夋嫨錛屽湪榪欓噷鎴戦夋嫨榪欏洖縐峂essageListenerAdapter鏂規(guī)硶涓昏鏄洜涓鴻繖涓柟娉曟瘮杈冪伒媧匯傚疄鐜頒粬鍙涓涓緢鏅氱殑java綾誨嵆鍙紝鍜孞MS浠ュ強Spring鐨勮﹀悎搴︽渶浣庛傚叾涓柟娉昽nMessage鍙互闅忎究淇敼鏂規(guī)硶鍚嶏紝鍙鍦ㄩ厤緗枃浠朵腑瀵瑰簲鐨勪慨鏀瑰氨濂戒簡銆?br />聽聽聽聽 MessageListenerAdapter榪樻湁涓涓姛鑳藉氨鏄鏋滃鐞嗘柟娉?鎴戣繖閲屾槸onMessage)榪斿洖涓涓潪絀哄鹼紝瀹冨皢鑷姩榪斿洖涓涓搷搴?tt class="interfacename">娑堟伅銆傝繖涓秷鎭細榪斿洖緇橨MS Reply-To灞炴у畾涔夌殑鐩殑鍦?/tt>(濡傛灉瀛樺湪)錛屾垨鑰呮槸MessageListenerAdapter璁劇疆(濡傛灉閰嶇疆浜?鐨勭己鐪?tt class="interfacename">鐩殑鍦?/tt>錛涘鏋滄病鏈夊畾涔?tt class="interfacename">鐩殑鍦?/tt>錛岄偅涔堝皢浜х敓涓涓?tt class="classname">InvalidDestinationException寮傚父(姝ゅ紓甯稿皢涓嶄細鍙鎹曡幏鑰屼笉澶勭悊錛屽畠灝?/em>娌跨潃璋冪敤鍫嗘爤涓婁紶)銆?br />聽聽聽聽 榪欐牱鎴戜滑鐨勯厤緗氨閮藉畬鎴愪簡銆傛帴涓嬫潵鎴戜滑鏉ュ疄鐜板搴旂殑Java鏂囦歡
鍏堟槸鎺ュ彛鏂囦歡鍙戦佹秷鎭帴鍙ApmgtMessageProducer.java
public interface IApmgtMessageProducer {
聽聽聽 public abstract void sendMessage(ApmgtMessageData messageData);
}
鎺ュ彈娑堟伅鎺ュ彛IApmgtMessageListener.java
public interface IApmgtMessageListener {
聽聽聽 public void onMessage(ApmgtMessageData message);
}
鍙戞秷鎭殑鏂囦歡DefaultApmgtMessageProducer.java
聽public class DefaultApmgtMessageProducer implements IApmgtMessageProducer {
聽聽聽
聽聽聽 private JmsTemplate jmsTemplate;
聽聽聽 public void setJmsTemplate(JmsTemplate jmsTemplate) {
聽聽聽聽聽聽聽 this.jmsTemplate = jmsTemplate;
聽聽聽 }
聽聽聽 public void sendMessage(ApmgtMessageData messageData) {
聽聽聽聽聽聽聽 this.jmsTemplate.convertAndSend(messageData);
聽聽聽 }
}
鏀舵秷鎭枃浠禗efaultApmgtMessageListener.java
public class DefaultApmgtMessageListener implements IApmgtMessageListener {
聽聽聽 public void onMessage(ApmgtMessageData message) {
聽聽聽聽聽聽聽 System.out.println("鐩戝惉鍒版秷鎭細"+message);
聽聽聽 }
}
娑堟伅杞崲綾籄pmgtMessageConverter.java
public class ApmgtMessageConverter implements MessageConverter {
聽聽聽 private Log log = LogFactory.getLog(ApmgtMessageConverter.class);
聽聽聽 private SimpleMessageConverter converter;
聽聽聽 public void setConverter(SimpleMessageConverter converter) {
聽聽聽聽聽聽聽 this.converter = converter;
聽聽聽 }
聽聽聽 public Object fromMessage(Message message) throws JMSException, MessageConversionException {
聽聽聽聽聽聽聽 if (message instanceof ObjectMessage) {
聽聽聽聽聽聽聽聽聽聽聽 ObjectMessage o_message = (ObjectMessage)message;
聽聽聽聽聽聽聽聽聽聽聽 MessageHeader header = new MessageHeader();
聽聽聽聽聽聽聽聽聽聽聽 header.setId(message.getLongProperty("id"));
聽聽聽聽聽聽聽聽聽聽聽 header.setReceiver(message.getIntProperty("receiver"));
聽聽聽聽聽聽聽聽聽聽聽 header.setSender(message.getIntProperty("sender"));
聽聽聽聽聽聽聽聽聽聽聽 header.setSendPerson(message.getStringProperty("sendPerson"));
聽聽聽聽聽聽聽聽聽聽聽 header.setType(message.getIntProperty("type"));
聽聽聽聽聽聽聽聽聽聽聽 Serializable messageContent = o_message.getObject();
聽聽聽聽聽聽聽聽聽聽聽 ApmgtMessageData<Serializable> messageData = new ApmgtMessageData<Serializable>();
聽聽聽聽聽聽聽聽聽聽聽 messageData.setMessageContent(messageContent);
聽聽聽聽聽聽聽聽聽聽聽 messageData.setMessageHeader(header);
聽聽聽聽聽聽聽聽聽聽聽 return messageData;
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 return null;
聽聽聽 }
聽聽聽 public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
聽聽聽聽聽聽聽 if (object instanceof ApmgtMessageData) {
聽聽聽聽聽聽聽聽聽聽聽 ApmgtMessageData data = (ApmgtMessageData) object;
聽聽聽聽聽聽聽聽聽聽聽 Message message = converter.toMessage(data.getMessageContent(), session);
聽聽聽聽聽聽聽聽聽聽聽 message.setLongProperty("id", data.getMessageHeader().getId());
聽聽聽聽聽聽聽聽聽聽聽 message.setIntProperty("receiver", data.getMessageHeader().getReceiver());
聽聽聽聽聽聽聽聽聽聽聽 message.setIntProperty("sender", data.getMessageHeader().getSender());
聽聽聽聽聽聽聽聽聽聽聽 message.setIntProperty("type", data.getMessageHeader().getType());
聽聽聽聽聽聽聽聽聽聽聽 message.setStringProperty("sendPerson", data.getMessageHeader().getSendPerson());
聽聽聽聽聽聽聽聽聽聽聽 log.info("鍙戦佹秷鎭痆MessageSender]:\n" + message);
聽聽聽聽聽聽聽聽聽聽聽聽 return message;
聽聽聽聽聽聽聽 } else {
聽聽聽聽聽聽聽聽聽聽聽 return null;
聽聽聽聽聽聽聽 }
聽聽聽 }
}
娑堟伅綾繪枃浠堵?娑堟伅鐖剁被錛欰pmgtMessageData.java
public class ApmgtMessageData<T extends Serializable>{
聽聽聽 protected T messageContent;
聽聽聽
聽聽聽 protected MessageHeader messageHeader;
聽聽聽 public T getMessageContent() {
聽聽聽聽聽聽聽 return this.messageContent;
聽聽聽 }
聽聽聽 public MessageHeader getMessageHeader() {
聽聽聽聽聽聽聽 return this.messageHeader;
聽聽聽 }
聽聽聽 public void setMessageContent(T messageContent) {
聽聽聽聽聽聽聽 this.messageContent = messageContent;
聽聽聽 }
聽聽聽 public void setMessageHeader(MessageHeader messageHeader) {
聽聽聽聽聽聽聽 this.messageHeader = messageHeader;
聽聽聽 }
}
娑堟伅灞炴х殑涓涓被MessageHeader.java
public class MessageHeader {
聽聽聽 /**
聽聽聽聽 * 娑堟伅ID
聽聽聽聽 */
聽聽聽 private long id;
聽聽聽 /**
聽聽聽聽 * 娑堟伅綾誨瀷
聽聽聽聽 */
聽聽聽 private int type;
聽聽聽 /**
聽聽聽聽 * 娑堟伅鍙戦佹柟錛屽彂閫佹秷鎭殑妯″潡
聽聽聽聽 */
聽聽聽 private int sender;
聽聽聽 /**
聽聽聽聽 * 娑堟伅鎺ユ敹鏂癸紝鎺ユ敹娑堟伅鐨勬ā鍧?br />聽聽聽聽 */
聽聽聽 private int receiver;
聽聽聽 /**
聽聽聽聽 * 娑堟伅鍙戦佽咃紝鍏蜂綋鐨勭敤鎴?br />聽聽聽聽 */
聽聽聽 private String sendPerson;
聽聽聽 public MessageHeader(){
聽聽聽聽聽聽聽 this.id = System.currentTimeMillis() ;
聽聽聽 }
聽聽聽
聽聽聽 public long getId() {
聽聽聽聽聽聽聽 return id;
聽聽聽 }
聽聽聽 public void setId(long id) {
聽聽聽聽聽聽聽 this.id = id;
聽聽聽 }
聽聽聽 public String getSendPerson() {
聽聽聽聽聽聽聽 return sendPerson;
聽聽聽 }
聽聽聽 public void setSendPerson(String sendPerson) {
聽聽聽聽聽聽聽 this.sendPerson = sendPerson;
聽聽聽 }
聽聽聽 public int getReceiver() {
聽聽聽聽聽聽聽 return receiver;
聽聽聽 }
聽聽聽 public void setReceiver(int receiver) {
聽聽聽聽聽聽聽 this.receiver = receiver;
聽聽聽 }
聽聽聽 public int getSender() {
聽聽聽聽聽聽聽 return sender;
聽聽聽 }
聽聽聽 public void setSender(int sender) {
聽聽聽聽聽聽聽 this.sender = sender;
聽聽聽 }
聽聽聽 public int getType() {
聽聽聽聽聽聽聽 return type;
聽聽聽 }
聽聽聽 public void setType(int type) {
聽聽聽聽聽聽聽 this.type = type;
聽聽聽 }
}
娑堟伅浣撶殑綾籑odPasswordRequest.java
public class ModPasswordRequest implements Serializable{
聽聽聽 private static final long serialVersionUID = 1L;
聽聽聽 /**
聽聽聽聽 * 鏃у瘑鐮?br />聽聽聽聽 */
聽聽聽 private String oldPassword;
聽聽聽
聽聽聽 /**
聽聽聽聽 * 鏂板瘑鐮?br />聽聽聽聽 */
聽聽聽 private String newPassword;
聽聽聽 public String getNewPassword() {
聽聽聽聽聽聽聽 return newPassword;
聽聽聽 }
聽聽聽 public void setNewPassword(String newPassword) {
聽聽聽聽聽聽聽 this.newPassword = newPassword;
聽聽聽 }
聽聽聽 public String getOldPassword() {
聽聽聽聽聽聽聽 return oldPassword;
聽聽聽 }
聽聽聽 public void setOldPassword(String oldPassword) {
聽聽聽聽聽聽聽 this.oldPassword = oldPassword;
聽聽聽 }
}
娑堟伅綾伙細ApmgtModPasswordRequest.java
public class ApmgtModPasswordRequest extends ApmgtMessageData<ModPasswordRequest> {
聽聽聽
聽聽聽
聽聽聽
聽聽聽 private static final int REQ_MODPASSWORD = 0;
聽聽聽 private static final int INTF = 1;
聽聽聽 private static final int APMGT = 2;
聽聽聽 public void init(){
聽聽聽聽聽聽聽 messageHeader = new MessageHeader();
聽聽聽聽聽聽聽 messageContent = new ModPasswordRequest();
聽聽聽聽聽聽聽 messageHeader.setType(REQ_MODPASSWORD);
聽聽聽聽聽聽聽 messageHeader.setSender(INTF);
聽聽聽聽聽聽聽 messageHeader.setReceiver(APMGT);
聽聽聽聽聽聽聽 messageContent.setNewPassword("123456");
聽聽聽聽聽聽聽 messageContent.setOldPassword("654321");
聽聽聽 }
聽聽
}
鏈鍚庢槸嫻嬭瘯綾籑ain.java
聽聽聽 public class Main {
聽聽聽 public static void main(final String[] args) throws Exception {
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 PropertyConfigurator.configure("log4j.properties");
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "spring-jms.xml" });
//聽聽聽聽聽聽聽 ctx.registerShutdownHook();
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 IApmgtMessageProducer producer = (IApmgtMessageProducer)ctx.getBean("producer");
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 ApmgtModPasswordRequest messageData = new ApmgtModPasswordRequest();
聽聽聽聽聽聽聽 messageData.setMessageHeader(new MessageHeader());
聽聽聽聽聽聽聽 messageData.setMessageContent(new ModPasswordRequest());
聽聽聽聽聽聽聽 messageData.init();
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 producer.sendMessage(messageData);
聽聽聽 }
}
榪樻湁涓や釜閰嶇疆鏂囦歡錛岀涓涓猻pring-jms.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="[url]http://www.springframework.org/schema/beans"[/url]
聽聽聽 xmlns:xsi="[url]http://www.w3.org/2001/XMLSchema-instance"[/url]
聽聽聽 xsi:schemaLocation="[url]http://www.springframework.org/schema/beans[/url] [url]http://www.springframework.org/schema/beans/spring-beans.xsd">[/url]
聽聽聽 <bean id="propertyConfigurer"
聽聽聽聽聽聽聽 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
聽聽聽聽聽聽聽 <property name="locations">
聽聽聽聽聽聽聽聽聽聽聽 <list>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <value>apmgt.properties</value>
聽聽聽聽聽聽聽聽聽聽聽 </list>
聽聽聽聽聽聽聽 </property>
聽聽聽 </bean>
聽聽聽 <!-- ####################################### -->
聽聽聽 <!--聽聽聽聽聽聽聽聽聽 JMS Spring Beans聽聽聽聽聽聽聽聽聽聽聽聽聽聽 -->
聽聽聽 <!-- ####################################### -->
聽聽聽 <!-- Jms ConnectionFactory -->
聽聽聽 <bean id="connectionFactory"
聽聽聽聽聽聽聽 class="org.apache.activemq.ActiveMQConnectionFactory">
聽聽聽聽聽聽聽 <property name="brokerURL" value="${jms.brokerURL}" />
聽聽聽 </bean>
聽聽聽 <!-- Spring JMS SimpleConverter -->
聽聽聽 <bean id="simpleConverter"
聽聽聽聽聽聽聽 class="org.springframework.jms.support.converter.SimpleMessageConverter" />
聽聽聽 <!-- JMS Queue Template -->
聽聽聽 <bean id="jmsTemplate"
聽聽聽聽聽聽聽 class="org.springframework.jms.core.JmsTemplate102">
聽聽聽聽聽聽聽 <property name="connectionFactory" ref="connectionFactory"/>
聽聽聽聽聽聽聽 <property name="timeToLive" value="${jms.timeToLive}"/>
聽聽聽聽聽聽聽 <property name="defaultDestinationName" value="${jms.destinationName.cmpp}" />
聽聽聽聽聽聽聽 <property name="messageConverter" ref="messageConverter" />
聽聽聽聽聽聽聽 <property name="receiveTimeout" value="${jms.receiveTimeout}" />
聽聽聽 </bean>
聽聽聽 <!-- Message Converter -->
聽聽聽 <bean id="messageConverter"
聽聽聽聽聽聽聽 class="com.liangj.apmgt.jms.ApmgtMessageConverter">
聽聽聽聽聽聽聽 <property name="converter">
聽聽聽聽聽聽聽聽聽聽聽 <ref local="simpleConverter" />
聽聽聽聽聽聽聽 </property>
聽聽聽 </bean>
聽聽聽 <!-- Message porducer -->
聽聽聽 <bean id="producer"
聽聽聽聽聽聽聽 class="com.liangj.apmgt.jms.DefaultApmgtMessageProducer">
聽聽聽聽聽聽聽 <property name="jmsTemplate" ref="jmsTemplate" />
聽聽聽 </bean>
聽聽聽 <!-- this is the Message Driven POJO (MDP) -->
聽聽聽 <bean id="messageListener"
聽聽聽聽聽聽聽 class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
聽聽聽聽聽聽聽 <constructor-arg>
聽聽聽聽聽聽聽聽聽聽聽 <bean
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 class="com.liangj.apmgt.jms.DefaultApmgtMessageListener" />
聽聽聽聽聽聽聽 </constructor-arg>
聽聽聽聽聽聽聽 <property name="defaultListenerMethod" value="onMessage" />
聽聽聽聽聽聽聽 <property name="messageConverter" ref="messageConverter" />
聽聽聽 </bean>
聽聽聽 <!-- and this is the attendant message listener container -->
聽聽聽 <bean id="listenerContainer"
聽聽聽聽聽聽聽 class="org.springframework.jms.listener.DefaultMessageListenerContainer">
聽聽聽聽聽聽聽 <property name="connectionFactory" ref="connectionFactory" />
聽聽聽聽聽聽聽 <property name="destinationName" value="${jms.destinationName.cmpp}" />
聽聽聽聽聽聽聽 <property name="messageSelector" value="${jms.messageSelector}" />
聽聽聽聽聽聽聽 <property name="messageListener" ref="messageListener" />
聽聽聽 </bean>
</beans>
apmgt.properties
#jms properties
jms.brokerURL=tcp://localhost:61616
jms.receiveTimeout=3000
jms.destinationName.cmpp=cmpp
jms.messageSelector=receiver=2
#one day is 86400000 ms. 0 is means that it lives forever.
jms.timeToLive=86400000
杞細http://blog.iecn.net/blog/html/do-showone-tid-1035.html