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. sdut 2934 人活着系列之平方数 (完全背包变形)

    题目链接 分析:完全背包的变形,每一层的d[]数组代表这一层的这个数新加入以后所构成的val的种类. #include <iostream> #include <cstdio> ...

  2. HighChart图片本地导出

    Highchart第三方图表控件,导出默认是从官方地址导出,这样在无外网的条件下则导致导出失败,改进如下: 后台导出代码: public partial class HighChart : Syste ...

  3. Alpha、Beta、RC、GA版本的区别

    Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用. Beta:也是测试版,这个阶段的版本会一直加入新的功能.在Alpha版之后推出. RC:(Release Candi ...

  4. MSSQL大全

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

  5. c++实现输入法窗口自定义的代码

    #pragma once #include <Windows.h> #include <imm.h> #include <string> #pragma comme ...

  6. HDU 4609 3-idiots (FFT-快速傅立叶变换)

    [题意]给定N个树枝,求从中取出三个可以围成三角形的概率 [思路] 2013多校训练第一场比赛1010题. 一开始就想到了O(n^2)枚举前两个树枝和的算法,赛后群里大牛说计算所有两个树枝和的情况可以 ...

  7. LeetCode: 3SumClosest

    Title : Given an array S of n integers, find three integers in S such that the sum is closest to a g ...

  8. 持有对象:总结JAVA中的常用容器和迭代器,随机数 速查

    JAVA使用术语“Collection”来指代那些表示集合的对象,JAVA提供的接口很多,首先我们先来记住他们的层次结构: java集合框架的基本接口/类层次结构 java.util.Collecti ...

  9. 数学语言和程序语言的对比:面向过程与面向集合&命题

    共同之处:都使用字符串或数值来引用一个客观实体.当然数字和字符串也可以作为实体对象,这取决于人的解释. 不同之处:数学语句每一行都给出了一个结论, 程序语句的每一行都定义了一个过程.注意这里所指的程序 ...

  10. 深入浅出ClassLoader

    你真的了解ClassLoader吗? 这篇文章翻译自zeroturnaround.com的 Do You Really Get Classloaders? ,融入和补充了笔者的一些实践.经验和样例.本 ...