ActiveMQ

来源:互联网 发布:淘宝上迷彩服是正品吗 编辑:程序博客网 时间:2024/06/11 04:08
activemq需要服务启动过程
    按照JMS的规范,我们首先需要获得一个JMS connection factory.,通过这个connection factory来创建connection.在这个基础之上我们再创建session, destination, producer和consumer。因此主要的几个步骤如下:
1. 获得JMS connection factory. 通过我们提供特定环境的连接信息来构造factory。
2. 利用factory构造JMS connection
3. 启动connection
4. 通过connection创建JMS session.
5. 指定JMS destination.
6. 创建JMS producer或者创建JMS message并提供destination.
7. 创建JMS consumer或注册JMS message listener.
8. 发送和接收JMS message.
9. 关闭所有JMS资源,包括connection, session, producer, consumer等。

 

service:

@Service("mqProducer")public class MQProducer {private JmsTemplate jmsTemplate;public JmsTemplate getJmsTemplate() {return jmsTemplate;}@Autowiredpublic void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}public void sendMessage(final Mail mail) {jmsTemplate.send(new MessageCreator() {public Message createMessage(Session session) throws JMSException {return session.createTextMessage(JSONObject.toJSONString(mail));}});}}



<!--  ConnectionFactory --><bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"><!-- ActiveMQ Address -->        <property name="brokerURL" value="${activemq.brokerURL}" />        <property name="userName" value="${activemq.userName}"></property>        <property name="password" value="${activemq.password}"></property> </bean><bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"><property name="connectionFactory" ref="targetConnectionFactory" /><property name="maxConnections" value="${activemq.pool.maxConnections}" /></bean><bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"><property name="targetConnectionFactory" ref="pooledConnectionFactory" /></bean><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">      <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->      <property name="connectionFactory" ref="connectionFactory"/>      <property name="defaultDestinationName" value="${activemq.queueName}"></property></bean> 


consumer:

@Componentpublic class MailQueueMessageListener implements SessionAwareMessageListener<Message> {@Autowiredprivate JmsTemplate jmsTemplate;@Autowiredprivate Destination mailQueue;@Autowiredprivate MailService mailService;public synchronized void onMessage(Message message, Session session) {try {TextMessage msg = (TextMessage) message;final String ms = msg.getText();System.out.println("收到消息:" + ms);//转换成相应的对象Mail mail = JSONObject.parseObject(ms, Mail.class);if (mail == null) {return;}try {//执行发送业务mailService.mailSend(mail);} catch (Exception e) {e.printStackTrace();}} catch (Exception e) {e.printStackTrace();}}}

MailService:

@Service("mailService")public class MailService {@Autowiredprivate JavaMailSender mailSender;@Autowiredprivate SimpleMailMessage simpleMailMessage;@Autowiredprivate ThreadPoolTaskExecutor threadPool;/** * <B>方法名称:</B>发送邮件<BR> * <B>概要说明:</B>发送邮件<BR> * @param mail */public void mailSend(final Mail mail) {threadPool.execute(new Runnable() {public void run() {try {simpleMailMessage.setFrom(simpleMailMessage.getFrom()); simpleMailMessage.setTo(mail.getTo()); simpleMailMessage.setSubject(mail.getSubject());simpleMailMessage.setText(mail.getContent());mailSender.send(simpleMailMessage);} catch (MailException e) {e.printStackTrace();throw e;}}});}}

待续……



原创粉丝点击