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. poj 2029 Get Many Persimmon Trees (dp)

    题目链接 又是一道完全自己想出来的dp题. 题意:一个w*h的图中,有n个点,给一个s*t的圈,求这个圈能 圈的最多的点 分析:d[i][j]代表i行j列 到第一行第一列的这个方框内有多少个点, 然后 ...

  2. BZOJ2226: [Spoj 5971] LCMSum

    题解: 考虑枚举gcd,然后问题转化为求<=n且与n互质的数的和. 这是有公式的f[i]=phi[i]*i/2 然后卡一卡时就可以过了. 代码: #include<cstdio> # ...

  3. ASP.NET MVC @helper使用说明

    简单的 @helper 方法应用场景 Razor中的@helper语法让您能够轻松创建可重用的方法,此方法可以在您的视图模板中封装输出功能.他们使代码能更好地重用,也使代码更具有可读性. 在我们定义@ ...

  4. 试图从数据库 ‘UFData_001_2003' 中提取的逻辑页 (1:10720) 属于对象 '0',而非对象 'syscolumns'

    数据库可以使用,可以备份,但对备份进行恢复时报错,使用sp_attach_db对两个物理文件进行连接时,报同样错误: 服务器: 消息 605,级别 21,状态 1,行 1 试图从数据库 ‘UFData ...

  5. AspNet WebApi OData 学习

    OData介绍:是一个查询和更新数据的Web协议.OData应用了web技术如HTTP.Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务 和存储的信息访问.除了提供一些基本的操 ...

  6. I.MX6 Linux udev porting

    /*********************************************************************** * I.MX6 Linux udev porting ...

  7. shell 的判断与比较

    1  shell 的$! ,$?, $$,$@ $n        $1 the first parameter,$2 the second... $#        The number of co ...

  8. oracle查询某个用户下的所有视图

    SYS>select view_name from dba_views where owner = 'NS_RAS3'; VIEW_NAME--------------------------- ...

  9. 转载RabbitMQ入门(3)--发布和订阅

    发布和订阅 (使用java 客户端) 在先前的指南中,我们创建了一个工作队列.这工作队列后面的假想是每一个任务都被准确的传递给工作者.在这部分我们将会做一些完全不同的事情–我们将一个消息传递给多个消费 ...

  10. 【转】iOS类似Android上toast效果

    原文网址:http://m.blog.csdn.net/article/details?id=50478737 做过Android开发的人都知道toast,它会在界面上显示一排黑色背景的文字,用于提示 ...