JMS开源框架ActiveMQ入门

c#小王子 c#小王子 2022-03-12 487 Java

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开源框架ActiveMQ入门

 

下面的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的图表

使用-JFreeChart来创建基于web的图表

XStream使用文档

XStream使用文档

WebService发布过程及常见问题

WebService发布过程及常见问题

webpack实战入门进阶调优分享

webpack实战入门进阶调优分享

weblogic调优参数及监控指标

weblogic调优参数及监控指标

weblogic节点管理

weblogic节点管理

weblogic管理控制台概述

weblogic管理控制台概述

weblogic-部署和启动

weblogic-部署和启动

WebLogic-Server-性能及调优-调优-Java-虚拟机

Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。

Velocity用户教程

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

Velocity用户手册

Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。


文章热度: 166291
文章数量: 333
推荐阅读

FlashFXP绿色版网盘下载,附激活教程 908

FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具

Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 629

firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ

navicat for mysql中文绿色版网盘下载 599

Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq

火车头采集器(旗舰版)绿色版网盘下载 1018

火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA

Photoshop(CS-2015-2023)绿色中文版软件下载 1349

安装文件清单(共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

知之

知之平台是全球领先的知识付费平台。提供各个领域的项目实战经验分享,提供优质的行业解决方案信息,来帮助您的工作和学习

使用指南 建议意见 用户协议 友情链接 隐私政策 Powered by NOOU ©2020 知之