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. uva 10453 - Make Palindrome(dp, 记录路径)

    题目 题意: 给一个字符串 ,判断最少插入多少个字符 使字符串成为回文串, 并输出回文串. 思路:先用dp判断需要个数, 再递归输出路径. #include <iostream> #inc ...

  2. tornado中使用torndb,连接数过高的问题

    问题背景 最近新的产品开发中,使用了到了Tornado和mysql数据库.但在基本框架完成之后,我在开发时候发现了一个很奇怪的现象,我在测试时,发现数据库返回不了结果,于是我在mysql中输入show ...

  3. Java [Leetcode 88]CMerge Sorted Array

    题目描述: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. N ...

  4. 省常中模拟 Test4

    prime 数论 题意:分别求 1*n.2*n.3*n.... n*n 关于模 p 的逆元.p 是质数,n < p. 初步解法:暴力枚举.因为 a 关于模 p 的逆元 b 满足 ab mod p ...

  5. Linux常用设置

    1.文件夹操作 创建-->mkdir NAME 删除-->rm NAME -i 删除前逐一询问确认 -f 直接删除,不确认 -r 将目录即以下档案逐一删除 例:删除所有C语言程序文档,删除 ...

  6. Ejabberd源码解析前奏--概述

    一.绪论    Ejabberd是一个用Erlang/OTP写的开源即时通讯服务器,其是跨平台.分布式.容错且基于开放标准的实时通讯系统.Ejabberd是一个功能丰富的XMPP服务器,同时适合小规模 ...

  7. 六种排序的C++实现

    class SortNum { public: SortNum(); virtual ~SortNum(); void exchange(int& b,int& c);//交换数据 v ...

  8. Hie with the Pie(POJ 3311状压dp)

    题意:披萨店给n个地方送披萨,已知各地方(包括披萨店)之间花费的时间,求送完所有地方并回到店花费的最小时间 分析:状态好确定dp[i][j],i中1表示地方已送过,否则为0,j为当前状态最后一个送过的 ...

  9. bzoj 1025 [SCOI2009]游戏(置换群,DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1025 [题意] 给定n,问1..n在不同的置换下变回原序列需要的不同排数有多少种. [ ...

  10. Ubuntu 软件包管理详解

    原文转载自:http://www.cppblog.com/jb8164/archive/2009/01/09/71583.html Ubuntu 方便宜用,最值得让人称道的便是其安装软件的方式, 一条 ...