JMS开源框架ActiveMQ入门
介绍基本的JMS概念与开源的JMS框架ActiveMQ应用,内容涵盖一下几点:
1. 基本的JMS概念
2. JMS的消息模式
3. 介绍ActiveMQ
4. 一个基于ActiveMQ的JMS例子程序
一:JMS基本概念
1. JMS的目标
为企业级的应用提供一种智能的消息系统,JMS定义了一整套的企业级的消息概念与工具,尽可能最小化的Java语言概念去构建最大化企业消息应用。统一已经存在的企业级消息系统功能。
2. 提供者
JMS提供者是指那些完全完成JMS功能与管理功能的JMS消息厂商,理论上JMS提供者完成。
JMS消息产品必须是100%的纯Java语言实现,可以运行在跨平台的架构与操作系统上,当前一些JMS厂商包括IBM,Oracle, JBoss社区 (JBoss Community), Apache 社区(ApacheCommunity)。
3. JMS应用程序, 一个完整的JMS应用应该实现以下功能:
· JMS 客户端 – Java语言开发的接受与发送消息的程序
· 非JMS客户端 – 基于消息系统的本地API实现而不是JMS
· 消息 – 应用程序用来相互交流信息的载体
· 被管理对象–预先配置的JMS对象,JMS管理员创建,被客户端运用。如链接工厂,主题等
· JMS提供者–完成JMS功能与管理功能的消息系统
二:JMS的消息模式
1.点对点的消息模式(Point to Point Messaging)

下面的JMS对象在点对点消息模式中是必须的:
a.队列(Queue) – 一个提供者命名的队列对象,客户端将会使用这个命名的队列对象
b.队列链接工厂(QueueConnectionFactory) – 客户端使用队列链接工厂创建链接队列
ConnectionQueue来取得与JMS点对点消息提供者的链接。
c. 链接队列(ConnectionQueue) – 一个活动的链接队列存在在客户端与点对点消息提供者之间,客户用它创建一个或者多个JMS队列会话(QueueSession)
d. 队列会话(QueueSession) – 用来创建队列消息的发送者与接受者(QueueSenderand QueueReceiver)
e.消息发送者(QueueSender 或者MessageProducer)– 发送消息到已经声明的队列
f.消息接受者(QueueReceiver或者MessageConsumer) – 接受已经被发送到指定队列的消息
2.发布订阅模式(publish – subscribe Mode)

a.主题Topic(Destination) – 一个提供者命名的主题对象,客户端将会使用这个命名的主题对象
b.主题链接工厂(TopciConnectionFactory) – 客户端使用主题链接工厂创建链接主题
ConnectionTopic来取得与JMS消息Pub/Sub提供者的链接。
c.链接主题(ConnectionTopic) – 一个活动的链接主题存在发布者与订阅者之间
d.会话(TopicSession) – 用来创建主题消息的发布者与订阅者 (TopicPublisher and TopicSubscribers)
e.消息发送者MessageProducer) – 发送消息到已经声明的主题
f.消息接受者(MessageConsumer) – 接受已经被发送到指定主题的消息
三:介绍ActiveMQ
ActiveMQ是apache社区完成的JMS开源消息组件,客户端支持多种语言调用,包括Java,C++, C#,
Perl, Python等。支持Spring配置集成等。更多信息访问这里:
http://activemq.apache.org/index.html
四:基于ActiveMQ的Publish/subscribe模式Demo程序
消息Broker,JMSprovider
1. import java.net.URI;
2. import java.net.URISyntaxException;
3.
4. import javax.jms.Connection;
5. import javax.jms.ConnectionFactory;
6. import javax.jms.Destination;
7. import javax.jms.JMSException;
8. import javax.jms.MessageProducer;
9. import javax.jms.Session;
10. import javax.jms.TextMessage;
11. import javax.naming.Context;
12. import javax.naming.InitialContext;
13. import javax.naming.NamingException;
14.
15. import org.apache.activemq.broker.BrokerFactory;
16. import org.apache.activemq.broker.BrokerService;
17. import org.apache.commons.logging.Log;
18. import org.apache.commons.logging.LogFactory;
19.
20. /**
21. * refer to http://activemq.apache.org/jndi-support.html
22. * http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html
23. * @author gloomyfish
24. *
25. */
26. public class PureJMSProducer {
27.
28. private static final Log LOG = LogFactory.getLog(PureJMSProducer.class);
29.
30. private PureJMSProducer() {
31. }
32.
33. /**
34. * @param args the destination name to send to and optionally, the number of
35. * messages to send
36. */
37. public static void main(String[] args) {
38. Context jndiContext = null;
39. ConnectionFactory connectionFactory = null;
40. Connection connection = null;
41. Session session = null;
42. Destination destination = null;
43. MessageProducer producer = null;
44. BrokerService broker = null;
45. final int numMsgs = 10;
46.
47. /*
48. * Create a JNDI API InitialContext object
49. */
50. try {
51. jndiContext = new InitialContext();
52. } catch (NamingException e) {
53. LOG.info("Could not create JNDI API context: " + e.toString());
54. System.exit(1);
55. }
56.
57. // create external TCP broker
58. try {
59. broker = BrokerFactory.createBroker(new URI("broker:tcp://localhost:61616"));
60. broker.start();
61. } catch (URISyntaxException e) {
62. LOG.info("Could not create broker: " + e.toString());
63. } catch (Exception e) {
64. LOG.info("Could not create broker: " + e.toString());
65. }
66. // try {
67. //
68. // }
69.
70. /*
71. * Look up connection factory and destination.
72. */
73. try {
74. connectionFactory = (ConnectionFactory)jndiContext.lookup("ConnectionFactory");
75. destination = (Destination)jndiContext.lookup("MyTopic");
76. } catch (NamingException e) {
77. LOG.info("JNDI API lookup failed: " + e);
78. System.exit(1);
79. }
80.
81. /*
82. * Create connection. Create session from connection; false means
83. * session is not transacted. Create sender and text message. Send
84. * messages, varying text slightly. Send end-of-messages message.
85. * Finally, close connection.
86. */
87. try {
88. connection = connectionFactory.createConnection();
89. session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
90. producer = session.createProducer(destination);
91. TextMessage message = session.createTextMessage();
92. Thread.sleep(3000);
93. for (int i = 0; i < numMsgs; i++) {
94. message.setText("This is message " + (i + 1));
95. LOG.info("Sending message: " + message.getText());
96. producer.send(message);
97. Thread.sleep(3000);
98. }
99.
100. /*
101. * Send a non-text control message indicating end of messages.
102. */
103. producer.send(session.createMessage());
104. } catch (JMSException e) {
105. LOG.info("Exception occurred: " + e);
106. } catch (InterruptedException e) {
107. LOG.info("Exception occurred: " + e);
108. } finally {
109. if (connection != null) {
110. try {
111. connection.close();
112. } catch (JMSException e) {
113. }
114. }
115. }
116.
117. // stop the TCP broker
118. try {
119. broker.stop();
120. } catch (Exception e) {
121. LOG.info("stop the broker failed: " + e);
122. }
123. }
}
【下载地址】
百度网盘链接:https://pan.baidu.com/s/1dcq8TW_dp1Bb0_EkYZSHtg
提取码:77rf
相关文章
使用-JFreeChart来创建基于web的图表
XStream使用文档
WebService发布过程及常见问题
webpack实战入门进阶调优分享
weblogic调优参数及监控指标
weblogic节点管理
weblogic管理控制台概述
weblogic-部署和启动
WebLogic-Server-性能及调优-调优-Java-虚拟机
Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。
FlashFXP绿色版网盘下载,附激活教程 2667
FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具
Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 2513
firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ
navicat for mysql中文绿色版网盘下载 2289
Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq
火车头采集器(旗舰版)绿色版网盘下载 2488
火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA
Photoshop(CS-2015-2023)绿色中文版软件下载 2497
安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64