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. hdu 4939 Stupid Tower Defense ( dp )

    题目链接 题意:给出一条长为n个单位长度的直线,每通过一个单位长度需要t秒. 有3种塔,红塔可以在当前格子每秒造成x点伤害,绿塔可以在之后的格子每秒造成y点伤害, 蓝塔可以使通过单位长度的时间增加z秒 ...

  2. java 基础学习

    a+b: import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner c ...

  3. Catalog与Schema

    按照SQL标准的解释,在SQL环境下Catalog和Schema都属于抽象概念,可以把它们理解为一个容器或者数据库对象命名空间中的一个层次,主要用来解决命名冲突问题.从概念上说,一个数据库系统包含多个 ...

  4. RecyclerView 结合 CardView 使用

    准备工作:导入 1.activity_mian.xml <android.support.v7.widget.RecyclerView android:id="@+id/recycle ...

  5. Mybatis学习——基本增删改查(CRUD)

    Eclipse+Mybatis+MySql 1.所需jar 2.项目目录 3.源代码 package com.zhengbin.entity; public class Student { priva ...

  6. 【Mysql】初学命令行指南

    MYSQL初学者使用指南与介绍 一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbi ...

  7. SQL对Xml字段的操作

    转:http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一.前言 SQL Server 2005 ...

  8. win7和centos双系统安装

    几年之前为了安装xp和linux的双系统曾折腾了好多天,今天为了安装这个win7和centos双系统,也折腾了两天多,哦,我的天,安装个双系统,怎么这么麻烦呢? 没有来得及整理,先铺上草稿,供同志们参 ...

  9. [Everyday Mathematics]20150107

    设 $f\in C^1[a,b]$, $f(a)=0$, 且存在 $\lm>0$, 使得 $$\bex |f'(x)|\leq \lm |f(x)|,\quad \forall\ x\in [a ...

  10. HDU 1025-Constructing Roads In JGShining's Kingdom(最长不降子序列,线段树优化)

    分析: 最长不降子序列,n很大o(n^2)肯定超,想到了小明序列那个题用线段树维护前面的最大值即可 该题也可用二分搜索来做. 注意问题输出时的坑,路复数后加s #include <map> ...