补充一下,spring 集成activeMQ:
1.首先安装MQ和配置环境变量
见下图:
2.
2.1 配置maven :
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jms8</groupId>
<artifactId>jms8</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name />
<description />
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>3.0.7.RELEASE</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>${basedir}/src</sourceDirectory>
<outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webappDirectory>${basedir}/WebRoot</webappDirectory>
<warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
<defaultGoal>compile</defaultGoal>
</build>
</project>
2.配置属性文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire="byName">
<!-- 配置connectionFactory -->
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://127.0.0.1:61616</value>
</property>
</bean>
</property>
<property name="maxConnections" value="100"></property>
</bean>
<!-- Spring JMS Template -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref local="jmsFactory" />
</property>
<property name="defaultDestinationName" value="subject" />
<!-- 区别它采用的模式为false是p2p,为true是订阅 -->
<property name="pubSubDomain" value="true" />
<property name="messageConverter" ref="myConvert"></property>
</bean>
<!-- 发送消息的目的地(一个队列) -->
<bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
<!-- 设置消息队列的名字 -->
<constructor-arg index="0" value="subject" />
</bean>
<!-- 消息监听 -->
<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<!-- 消息监听器输出消息的数量 -->
<property name="concurrentConsumers" value="1" />
<property name="connectionFactory" ref="jmsFactory" />
<property name="destinationName" value="subject" />
<property name="messageListener" ref="myMessageListener" />
<property name="pubSubNoLocal" value="false"></property>
</bean>
<!-- 消息转换器 -->
<bean id="myConvert" class="com.acca.activemq.convert.MyConvert">
</bean>
<!-- 消息侦听器 -->
<bean id="myMessageListener" class="com.acca.activemq.listener.MyMessageListener"></bean>
<!--
<bean id="messageReceiver" class="com.acca.activemq.ProxyJMSConsumer">
<property name="jmsTemplate" ref="jmsTemplate"></property>
<property name="destination" ref="destination"></property>
</bean>
-->
</beans>
3.写一个发送者:
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
JmsTemplate template = (JmsTemplate) applicationContext.getBean("jmsTemplate");
User user=new User();
user.setUserName("张三");
template.convertAndSend(user);
System.out.println("成功发送了一条JMS消息");
}
4.写一个转换器:
public class MyConvert implements MessageConverter {
/**
* @param arg0
* @return
* @throws JMSException
* @throws MessageConversionException
* @see org.springframework.jms.support.converter.MessageConverter#fromMessage(javax.jms.Message)
*/
public Object fromMessage(Message message) throws JMSException, MessageConversionException {
User user=null;
if(message instanceof ActiveMQObjectMessage){
ActiveMQObjectMessage aMsg = (ActiveMQObjectMessage) message;
user=(User) aMsg.getObject();
}
return user;
}
/**
* @param arg0
* @param arg1
* @return
* @throws JMSException
* @throws MessageConversionException
* @see org.springframework.jms.support.converter.MessageConverter#toMessage(java.lang.Object, javax.jms.Session)
*/
public Message toMessage(Object object, Session session) throws JMSException,
MessageConversionException {
ActiveMQObjectMessage msg = (ActiveMQObjectMessage) session.createObjectMessage();
msg.setObject((Serializable) object);
return msg;
}
}
5.消息监听者:
public class MyMessageListener implements MessageListener {
/**
* @param arg0
* @see javax.jms.MessageListener#onMessage(javax.jms.Message)
*/
public void onMessage(Message message) {
System.out.println(message.toString());
System.out.println("MyMessageListener");
if(message instanceof ObjectMessage){
ObjectMessage objectMessage=(ObjectMessage) message;
try {
User user=(User) objectMessage.getObject();
System.out.println(user.getUserName());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
7.效果:
参考博文:
https://www.iteye.com/blog/firezhfox-1753688
https://www.cnblogs.com/eric-fang/p/11339927.html