ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

主要特点:

1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)

3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性

4. 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上

5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

6. 支持通过JDBC和journal提供高速的消息持久化

7. 从设计上保证了高性能的集群,客户端-服务器,点对点

8. 支持Ajax

9. 支持与Axis的整合

10. 可以很容易得调用内嵌JMS provider,进行测试

1. ActiveMQ 在linux下的安装和运行

(1) 下载ActiveMQ http://activemq.apache.org/download.html

linux下版本  http://www.apache.org/dyn/closer.cgi?path=%2Factivemq%2Fapache-activemq%2F5.5.0%2Fapache-activemq-5.5.0-bin.tar.gz

wget http://labs.renren.com/apache-mirror//activemq/apache-activemq/5.5.0/apache-activemq-5.5.0-bin.tar.gz

(2) 解压  tar zxvf apache-activemq-5.5.0-bin.tar.gz

(3)  运行  apache-activemq-5.5.0/bin/activemq start      默认端口是61616    可以用   netstat -an|grep 61616  来查看

(4)  修改端口  在 apache-activemq-5.5.0/conf/activemq.xml   找到

<transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>  然后把 61616 该为你想要的端口

(5) 设置用户名和密码,来验证客户端的连接

在 apache-activemq-5.5.0/conf/credentials.properties  文件中,修改用户名和密码

activemq.username=system

activemq.password=manager

guest.password=password

(6) 停止 activemq ,执行  apache-activemq-5.5.0/bin/activemq stop

2.  使用java 来调用

(1) 先要获得ConnectionFactory

  1. private static ConnectionFactory connectionFactory;
  2. /**
  3. * 获得连接工厂
  4. * */
  5. public static ConnectionFactory getJMSConnectionFactory() {
  6. if(connectionFactory == null){
  7. ConfigModel configModel = ConfigFactory.getConfigModel();
  8. //可以设置设定好的用户名和密码
  9. connectionFactory = new ActiveMQConnectionFactory(
  10. ActiveMQConnection.DEFAULT_USER,
  11. ActiveMQConnection.DEFAULT_PASSWORD,
  12. "tcp://192.168.0.3:61616");
  13. }
  14. return connectionFactory;
  15. }

(2) 发送消息(一个邮件模型),这个模型会保存起来,所以不是发送模型是不费时间的。

  1. /**
  2. * 发送一个邮件对象
  3. * */
  4. public static void sendEmailOperationModel(EmailModel emailModel){
  5. ConnectionFactory connFactory = getJMSConnectionFactory();
  6. try {
  7. //JMS 客户端到JMS Provider 的连接
  8. Connection connection = connFactory.createConnection();
  9. connection.start();
  10. // Session: 一个发送或接收消息的线程
  11. Session session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);
  12. // Destination :消息的目的地;消息发送给谁.
  13. // 获取session注意参数值my-queue是Query的名字
  14. Destination destination = session.createQueue(AppConstants.JMS_QUEUE_NAME_EMAIL);
  15. // MessageProducer:消息生产者
  16. MessageProducer producer = session.createProducer(destination);
  17. // 设置失效时间
  18. //producer.setTimeToLive(3600 * 1000 * 24 * 2);
  19. //设置持久化
  20. //producer.setDeliveryMode(DeliveryMode.PERSISTENT);
  21. //发送一条消息
  22. ObjectMessage objectMessage = session.createObjectMessage(emailModel);
  23. //通过消息生产者发出消息
  24. producer.send(objectMessage);
  25. session.commit();
  26. connection.close();
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. }

(3)  触发来发送邮件,这个是异步操作,不影响系统性能, 需要在系统启动时启动这个线程来监听消息,然后发邮件

  1. public class MailSendManager extends Thread{
  2. protected final Log log = LogFactory.getLog(MailSendManager.class);
  3. public MailSendManager() {
  4. }
  5. /**
  6. * 等待接受操作信息然后发邮件
  7. * */
  8. public static void sendEmail(){
  9. try {
  10. //JMS 客户端到JMS Provider 的连接
  11. Connection connection = JMSFactory.getJMSConnectionFactory().createConnection();
  12. connection.start();
  13. // Session: 一个发送或接收消息的线程
  14. Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
  15. // Destination :消息的目的地;消息发送给谁.
  16. // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
  17. Destination destination = session.createQueue(AppConstants.JMS_QUEUE_NAME_EMAIL);
  18. MessageConsumer consumer = session.createConsumer(destination);
  19. //应用阻塞模式
  20. /*while (true) {
  21. Message message = consumer.receive();
  22. if(message instanceof ObjectMessage){
  23. ObjectMessage omsg = (ObjectMessage) message;
  24. //EmailModel operationModel = (EmailModel) omsg.getObject();
  25. //发送邮件
  26. //MailSender.sendMail(operationModel);
  27. System.out.println("send email ok --------------");
  28. }
  29. } */
  30. //应用事件模型
  31. consumer.setMessageListener(new MessageListener() {
  32. public void onMessage(Message message) {
  33. try {
  34. if (message instanceof ObjectMessage) {
  35. ObjectMessage omsg = (ObjectMessage) message;
  36. EmailModel operationModel = (EmailModel) omsg.getObject();
  37. //发送邮件
  38. MailSender.sendMail(operationModel);
  39. }
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. });
  45. //session.close();
  46. //connection.close();
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. }
  50. }
  51. public void run(){
  52. MailSendManager.sendEmail();
  53. }

转载自:http://blog.csdn.net/kindy1022/article/details/6427985

ActiveMQ JMS 在发邮件中的使用的更多相关文章

  1. iOS中如何切换到发短信、打电话、发邮件

    我们在做APP的时候,难免会遇到需要调用短信,电话等程序的时候.如美团. 当然,这些都只是一些简单的方法就可以实现,但是时间久了也会淡忘,所以想写这边博客.一是为了再捡起来复习一下,另一个相当于留个备 ...

  2. 实现celery中出现拥挤队列时,及时发邮件通知

    里面有几个常用的功能,以后值得借鉴. 如获取脚本目录,IP,获取shell返回值,发送邮件等.. 上午写完,中午测试,下午上线~~ #!/usr/bin/env python # -*- coding ...

  3. iOS中打电话、打开网址、发邮件、发短信等

    常用小功能 小功能简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话-方法1 最简单最直接的方式:直接跳到拨号界面 NSURL *url = [ ...

  4. shell中mail发邮件的问题

    今天为了监控一下脚本,按照网上说的利用mail 发邮件,mail -s "error预警2" peien@1221.qq.com<'邮件内容',发现出现cc,不知道啥问题,也 ...

  5. Springboot与ActiveMQ、Solr、Redis中分布式事物的初步探索

    Springboot与ActiveMQ.Solr.Redis中分布式事物的初步探索 解决的场景:事物中的异步问题,当要求数据库与solr服务器的最终一致时. 程序条件: 利用消息队列,当数据库添加成功 ...

  6. ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送

    现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码再到消息提醒,这些功能普遍的会用到邮件发送功能.我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到 ...

  7. # PHP - 使用PHPMailer发邮件

    PHPMailer支持多种邮件发送方式,使用起来非常简单 1.下载PHPMailer https://github.com/PHPMailer/PHPMailer,下载完成加压后, 把下边的两个文件复 ...

  8. 测试MailUtils,作用是发邮件

    package cn.itcast.test; import java.io.IOException; import javax.mail.MessagingException; import jav ...

  9. 学习linux之用mail命令发邮件

    背景 这两天工作比较闲,网上各种冲浪(这个词暴露我的网龄了).看到一位大神的文章更闲 <>.端详一番,原来是用R语言拼接字符串后用shell命令发出去.发现shell命令既然还能直接发邮件 ...

随机推荐

  1. 【转载】React初学者入门须知

    http://www.oschina.net/news/75530/9-things-every-reactjs-beginner-should-know react.js入门学习 看了一遍,没什么特 ...

  2. axis : java.lang.NoSuchMethodError

    Hi friends,Iam getting the following error when deploying my app in jboss error.Iam new to axis .can ...

  3. uva1262Password

    解码,暴力. 恬不知耻地把暴力题解放了上来,因为k比较小,直接暴力找到字符串第k大就可以了. 编码解码就是根据组合数学公式算出来它到底在哪. dfs返回bool就能使得找到字典序第k大字符串以后退出d ...

  4. vs2008 编译时候 自动关闭 问题解决方法

    最近又出现如此让人崩溃的问题.      vs2008在编译程序时候老是莫名其妙的自动退出.卸载重装以后问题仍然存在.      害我一度以为是vs2008的BUG,看网上说的更新BUG.      ...

  5. BZOJ1048: [HAOI2007]分割矩阵

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1048 题解:搞清题意之后来个记忆化爆搜就行了. 代码: #include<cstdio& ...

  6. BZOJ2337: [HNOI2011]XOR和路径

    题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...

  7. 利用dns解析来实现网站的负载均衡

    当网站的访问量大了就会考虑负载均衡,这也是每一个架构师的基本功了,其基本地位就相当于相声里的说学逗唱,活好不好就看这个了 :) 传统的负载均衡思路是单点的,不管你是硬件的还是软件的基本都是这样的原理 ...

  8. 纯css做的安卓开机动画

    随着css3的发展,越来越多的负责绚丽的效果可以由纯css来完成了.用css3实现的动画效果丝毫不必js实现的逊色,而且浏览器对css渲染的速度远比js快,大多数时候css的体积也不js小.其中css ...

  9. .net,mvc使用bootstrap做一个标准后台

    今天准备搭一个公用后台,使用bootstrap,方便今后开发,顺便mark一下 后期列表页将使用kendo-ui,增强后台的效果 下面是代码... login页面 @{ Layout = null; ...

  10. MySQL数据库备份和还原

    备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 备份MySQL数据库 ...