springMVC下集成active MQ发送邮件
环境:本地需安装activemq,且访问正常,安装方法网上很多,这里省略。
1.添加相关jar包,我这里使用的是maven,你也可以选择其他方式添加。下面是maven相关配置:
<dependency> <groupId>org.apache.activemqgroupId> <artifactId>activemq-brokerartifactId> <version>5.8.0version> dependency> <dependency> <groupId>org.apache.activemqgroupId> <artifactId>activemq-clientartifactId> <version>5.14.0version> dependency> <dependency> <groupId>org.apache.geronimo.specsgroupId> <artifactId>geronimo-j2ee-management_1.1_specartifactId> <version>1.0.1version> dependency> <dependency> <groupId>org.apache.geronimo.specsgroupId> <artifactId>geronimo-jms_1.1_specartifactId> <version>1.1.1version> dependency> <dependency> <groupId>org.slf4jgroupId> <artifactId>slf4j-apiartifactId> <version>1.6.6version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-jmsartifactId> <version>4.1.5.RELEASEversion> dependency>
2.编写发送和接收处理类
public class MyMessageConverter implements MessageConverter { public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { return session.createObjectMessage((Serializable) object); } public Object fromMessage(Message message) throws JMSException, MessageConversionException { ObjectMessage objMessage = (ObjectMessage) message; return objMessage.getObject(); }
3.编写发送实现类,接口类这里就不贴了。
public class ProducerServiceImpl implements ProducerService { private JmsTemplate jmsTemplate; protected final Logger logger = Logger.getLogger(getClass()); public void sendMessage(final Serializable obj) { logger.debug("---------------生产者向MQ发送消息-----------------"); jmsTemplate.convertAndSend(obj); } public JmsTemplate getJmsTemplate() { return jmsTemplate; } @Resource public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; }
4.编写监听类
public class MyMessageListener implements MessageListener { @Autowired private MyMessageConverter messageConverter; protected final Logger logger = Logger.getLogger(getClass()); public void onMessage(Message message) { if (message instanceof ObjectMessage) { ObjectMessage objMessage = (ObjectMessage) message; try { Mail mail = (Mail) messageConverter.fromMessage(objMessage); logger.debug("接收到一个ObjectMessage,包含Email对象,准备发送邮件!"); new MailUtil().send(mail); } catch (JMSException e) { logger.info("接收到一个ObjectMessage,但处理失败!"); } } }
5.配置XML
<context:component-scan base-package="com.guesslive" /> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory"/> <property name="messageConverter" ref="emailMessageConverter"/> <property name="defaultDestination" ref="queueDestination" /> <property name="explicitQosEnabled" value="true" /> <property name="deliveryMode" value="2" /> bean> <bean id="emailMessageConverter" class="com.guesslive.admin.common.mq.MyMessageConverter"/> <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://127.0.0.1:61616"/> <property name="userName" value="admin"/> <property name="password" value="admin"/> <property name="useAsyncSend" value="true" /> <property name="trustAllPackages" value="true"/> bean> <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory" ref="targetConnectionFactory"/> bean> <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg> <value>emailvalue> constructor-arg> bean> <bean id="consumerMessageListener" class="com.guesslive.admin.common.mq.MyMessageListener"/> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="queueDestination" /> <property name="messageListener" ref="consumerMessageListener" /> bean>
6.发送和接收
//调用向MQ推送消息的方法 producerService.sendMessage(mail);