J2EE与JMS

JMS是J2EE的13种核心技术规范之一,是J2EE众多应用程序组件中的重要一员。J2EE有标准的JMS API开放,以支持各个JMS应用生产厂商的产品,开源的有jbossmq,openjms,mantamq,ActiveMQ等,不过大多已停止发展; 商业的有IBM WebSphere MQ, BEA WebLogic JMS, Oracle AQ等。

Apache ActiveMQ是众多JMS Provider中的的佼佼者,毕竟它由强大的Apache社区支持,一直保持着开发和升级,目前已经最新的版本是5.4.2。它功能强大,支持多种语言编写的客户端,符合J2EE1.4规范,支持持久化,甚至支持Ajax等等.

JMS开发入门

环境: jdk1.5以上, eclipse for j2ee版本, ${download}/activemq5.4.2/bin/activemq.exe运行起来

jar包: activemq-all-5.4.2.jar(官方发布里有)   commons-logging-1.1.jar

废话不多说, 上代码先, demo1代码:

/*
* xcch@cnic.cn
* 消息发送者
*/
import java.util.Date;
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessageSender {
public static void main(String[] args) throws Exception {
//ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("failover:(tcp://primary:61616)?timeout=3000&startupMaxReconnectAttempts=1&maxReconnectAttempts=0");//failover:失效转移
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://primary:61616?connectionTimeout=3000");
Connection connection = connectionFactory.createConnection();
//connection.setExceptionListener(new MyJmsException());
connection.start();
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("my-queue");
MessageProducer producer = session.createProducer(destination);
for(int i=0; i<3; i++) {
MapMessage message = session.createMapMessage();
message.setLong("count", new Date().getTime());
Thread.sleep(1000);
//通过消息生产者发出消息
producer.send(message);
}
session.commit();
session.close();
connection.close();
}
}
 
/*
* 消息接收者
*/
import java.util.Date;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MapMessage;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessageReceiver {
public static void main(String[] args) throws Exception {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
Connection connection = connectionFactory.createConnection();
connection.start();
final Session session = connection.createSession(Boolean.TRUE,
Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("my-queue");
MessageConsumer consumer = session.createConsumer(destination);
int i = 0;
while (i < 3) {
i++;
MapMessage message = (MapMessage) consumer.receive();
session.commit();
// TODO something....
System.out.println("收到消息:" + new Date(message.getLong("count")));
}
session.close();
connection.close();
}
} 

注意,这里要求先将activemq.exe运行起来,作为JMS的Provider.其实J2EE官方发行版里面应该也带有JMS的一个Provider,相关的demo参考2

字符串 "tcp://primary:61616?connectionTimeout=3000" 表示一个URI,它包括了协议部分,url部分,及选项. ActiveMQ其实支持多种transport(参考2),不同的transport对应不同的URI(格式,选项参数等不同).

参考:

  1. Oracle-JMS部分参考http://download.oracle.com/javaee/1.3/jms/tutorial/1_3_1-fcs/doc/client.html
  2. J2EE-JMS部分参考:http://download.oracle.com/javaee/6/tutorial/doc/bncdr.html
  3. JMS常见transport参考:http://whitesock.javaeye.com/blog/164933

JMS入门——开发起步之ActiveMQ相关推荐

  1. JMS入门(一)--JMS基础

    1. JMS基本概念 JMS(Java Message Service) 即Java消息服务.它提供标准的产生.发送.接收消息的接口,简化企业应用的开发.它支持两种消息通信模型:点到点(point-t ...

  2. Floodlight 入门 之 起步篇 - 如何处理PacketIN消息

    Floodlight 入门 之 起步篇 - 如何处理PacketIN消息 2017-3-2 小论文写不出来好纠结,今天还在做Floodlight开发,好烦躁.这边博文介绍如何处理PacketIN消息, ...

  3. openlayers入门开发系列之地图属性查询篇

    本篇的重点内容是利用openlayers实现地图属性查询功能,效果图如下: 实现思路: 模糊查询点击事件 //模糊查询 $("#swatchQuery").bind("c ...

  4. ASP.NET Aries 入门开发教程4:查询区的下拉配置

    背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...

  5. JMS学习(4):--Spring和ActiveMQ整合的完整实例

    前言 这篇博文,我们基于spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了Point-To-Point的异步队列消息和PU ...

  6. html间隔代码_HTML+CSS基础入门开发,经典Loading加载缩放动画特效

    大家好,本篇文章分享经典Loading加载缩放动画特效,欢迎参考和指正. 效果图: Loading加载缩放动画特效 HTML代码: CSS代码: 知识点: animation:是CSS3的动画属性,这 ...

  7. openlayers4 入门开发系列之地图工具栏篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  8. leaflet-webpack 入门开发系列二加载不同在线地图切换显示(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 ...

  9. leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 ...

最新文章

  1. 人才迁徙潮,2019年互联网各梯队排名重组,最适合程序员去的互联网公司有哪些?...
  2. Kubernetes存储之PV-PVC
  3. 西安后宰门小学_陈洪杰:“数学魔术”课程校本化的价值与意义 || 为西安后宰门小学点个赞...
  4. CommonLang3中的StringUtils最全解析
  5. 缺省参数-缺省参数的注意事项
  6. POJ - 3581 Sequence(后缀数组)
  7. Java——File类
  8. 用户体验很棒的Git学习网站
  9. 转: 如何挑选适合的前端框架
  10. FFmpeg Video Editor
  11. Chrome 新功能:因更新或崩溃而重启后,PWA应用将自动恢复运行!
  12. 技术出身要创业,容易吗?
  13. 【SSH网上商城项目实战13】Struts2实现文件上传功能
  14. 初学者入门——NOI题库1.3
  15. 全网最全的autojs例子,有一千六百多的脚本文件,少走弯路
  16. 电脑一启动吃鸡就重启计算机,玩吃鸡老是重启电脑
  17. Live Streaming
  18. Geronimo入门与进阶
  19. 博后招募 | 浙江大学陈华钧教授招聘知识图谱等方向博后及算法工程师
  20. html5创建三次贝塞尔曲线,HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线

热门文章

  1. 45 个 Git 操作场景,专治不会合代码
  2. 基于java记账管理系统(论文+PPT+源码)
  3. HLS - intel HLS 指令使用指南
  4. Win10 cmd Java编译及输出中文出错解决方法(超好用)
  5. 日常Linux命令--vi/vim复制一行,粘贴
  6. [转]论语新解(上篇)(1)
  7. (四)路径规划算法---QP解决Minimum Snap轨迹优化问题
  8. 本地windows如何启动redis服务命令
  9. Github 切换分支
  10. 名帖376 祝允明 草书《滕王阁序并诗》