ActiveMQ JMS 在发邮件中的使用
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
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
- private static ConnectionFactory connectionFactory;
- /**
- * 获得连接工厂
- * */
- public static ConnectionFactory getJMSConnectionFactory() {
- if(connectionFactory == null){
- ConfigModel configModel = ConfigFactory.getConfigModel();
- //可以设置设定好的用户名和密码
- connectionFactory = new ActiveMQConnectionFactory(
- ActiveMQConnection.DEFAULT_USER,
- ActiveMQConnection.DEFAULT_PASSWORD,
- "tcp://192.168.0.3:61616");
- }
- return connectionFactory;
- }
(2) 发送消息(一个邮件模型),这个模型会保存起来,所以不是发送模型是不费时间的。
- /**
- * 发送一个邮件对象
- * */
- public static void sendEmailOperationModel(EmailModel emailModel){
- ConnectionFactory connFactory = getJMSConnectionFactory();
- try {
- //JMS 客户端到JMS Provider 的连接
- Connection connection = connFactory.createConnection();
- connection.start();
- // Session: 一个发送或接收消息的线程
- Session session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);
- // Destination :消息的目的地;消息发送给谁.
- // 获取session注意参数值my-queue是Query的名字
- Destination destination = session.createQueue(AppConstants.JMS_QUEUE_NAME_EMAIL);
- // MessageProducer:消息生产者
- MessageProducer producer = session.createProducer(destination);
- // 设置失效时间
- //producer.setTimeToLive(3600 * 1000 * 24 * 2);
- //设置持久化
- //producer.setDeliveryMode(DeliveryMode.PERSISTENT);
- //发送一条消息
- ObjectMessage objectMessage = session.createObjectMessage(emailModel);
- //通过消息生产者发出消息
- producer.send(objectMessage);
- session.commit();
- connection.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
(3) 触发来发送邮件,这个是异步操作,不影响系统性能, 需要在系统启动时启动这个线程来监听消息,然后发邮件
- public class MailSendManager extends Thread{
- protected final Log log = LogFactory.getLog(MailSendManager.class);
- public MailSendManager() {
- }
- /**
- * 等待接受操作信息然后发邮件
- * */
- public static void sendEmail(){
- try {
- //JMS 客户端到JMS Provider 的连接
- Connection connection = JMSFactory.getJMSConnectionFactory().createConnection();
- connection.start();
- // Session: 一个发送或接收消息的线程
- Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
- // Destination :消息的目的地;消息发送给谁.
- // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
- Destination destination = session.createQueue(AppConstants.JMS_QUEUE_NAME_EMAIL);
- MessageConsumer consumer = session.createConsumer(destination);
- //应用阻塞模式
- /*while (true) {
- Message message = consumer.receive();
- if(message instanceof ObjectMessage){
- ObjectMessage omsg = (ObjectMessage) message;
- //EmailModel operationModel = (EmailModel) omsg.getObject();
- //发送邮件
- //MailSender.sendMail(operationModel);
- System.out.println("send email ok --------------");
- }
- } */
- //应用事件模型
- consumer.setMessageListener(new MessageListener() {
- public void onMessage(Message message) {
- try {
- if (message instanceof ObjectMessage) {
- ObjectMessage omsg = (ObjectMessage) message;
- EmailModel operationModel = (EmailModel) omsg.getObject();
- //发送邮件
- MailSender.sendMail(operationModel);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- //session.close();
- //connection.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void run(){
- MailSendManager.sendEmail();
- }
转载自:http://blog.csdn.net/kindy1022/article/details/6427985
ActiveMQ JMS 在发邮件中的使用的更多相关文章
- iOS中如何切换到发短信、打电话、发邮件
我们在做APP的时候,难免会遇到需要调用短信,电话等程序的时候.如美团. 当然,这些都只是一些简单的方法就可以实现,但是时间久了也会淡忘,所以想写这边博客.一是为了再捡起来复习一下,另一个相当于留个备 ...
- 实现celery中出现拥挤队列时,及时发邮件通知
里面有几个常用的功能,以后值得借鉴. 如获取脚本目录,IP,获取shell返回值,发送邮件等.. 上午写完,中午测试,下午上线~~ #!/usr/bin/env python # -*- coding ...
- iOS中打电话、打开网址、发邮件、发短信等
常用小功能 小功能简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话-方法1 最简单最直接的方式:直接跳到拨号界面 NSURL *url = [ ...
- shell中mail发邮件的问题
今天为了监控一下脚本,按照网上说的利用mail 发邮件,mail -s "error预警2" peien@1221.qq.com<'邮件内容',发现出现cc,不知道啥问题,也 ...
- Springboot与ActiveMQ、Solr、Redis中分布式事物的初步探索
Springboot与ActiveMQ.Solr.Redis中分布式事物的初步探索 解决的场景:事物中的异步问题,当要求数据库与solr服务器的最终一致时. 程序条件: 利用消息队列,当数据库添加成功 ...
- ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送
现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码再到消息提醒,这些功能普遍的会用到邮件发送功能.我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到 ...
- # PHP - 使用PHPMailer发邮件
PHPMailer支持多种邮件发送方式,使用起来非常简单 1.下载PHPMailer https://github.com/PHPMailer/PHPMailer,下载完成加压后, 把下边的两个文件复 ...
- 测试MailUtils,作用是发邮件
package cn.itcast.test; import java.io.IOException; import javax.mail.MessagingException; import jav ...
- 学习linux之用mail命令发邮件
背景 这两天工作比较闲,网上各种冲浪(这个词暴露我的网龄了).看到一位大神的文章更闲 <>.端详一番,原来是用R语言拼接字符串后用shell命令发出去.发现shell命令既然还能直接发邮件 ...
随机推荐
- 【转载】React初学者入门须知
http://www.oschina.net/news/75530/9-things-every-reactjs-beginner-should-know react.js入门学习 看了一遍,没什么特 ...
- axis : java.lang.NoSuchMethodError
Hi friends,Iam getting the following error when deploying my app in jboss error.Iam new to axis .can ...
- uva1262Password
解码,暴力. 恬不知耻地把暴力题解放了上来,因为k比较小,直接暴力找到字符串第k大就可以了. 编码解码就是根据组合数学公式算出来它到底在哪. dfs返回bool就能使得找到字典序第k大字符串以后退出d ...
- vs2008 编译时候 自动关闭 问题解决方法
最近又出现如此让人崩溃的问题. vs2008在编译程序时候老是莫名其妙的自动退出.卸载重装以后问题仍然存在. 害我一度以为是vs2008的BUG,看网上说的更新BUG. ...
- BZOJ1048: [HAOI2007]分割矩阵
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1048 题解:搞清题意之后来个记忆化爆搜就行了. 代码: #include<cstdio& ...
- BZOJ2337: [HNOI2011]XOR和路径
题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...
- 利用dns解析来实现网站的负载均衡
当网站的访问量大了就会考虑负载均衡,这也是每一个架构师的基本功了,其基本地位就相当于相声里的说学逗唱,活好不好就看这个了 :) 传统的负载均衡思路是单点的,不管你是硬件的还是软件的基本都是这样的原理 ...
- 纯css做的安卓开机动画
随着css3的发展,越来越多的负责绚丽的效果可以由纯css来完成了.用css3实现的动画效果丝毫不必js实现的逊色,而且浏览器对css渲染的速度远比js快,大多数时候css的体积也不js小.其中css ...
- .net,mvc使用bootstrap做一个标准后台
今天准备搭一个公用后台,使用bootstrap,方便今后开发,顺便mark一下 后期列表页将使用kendo-ui,增强后台的效果 下面是代码... login页面 @{ Layout = null; ...
- MySQL数据库备份和还原
备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 备份MySQL数据库 ...