ActiveMQ_基础学习

简介:

最近偶然接触到了JMS,故学习一下


1、下载&文档&视频

无疑官网是最好的选择(如果你英语可以的话),上面有最全的国外大牛的视频和博客讲解。http://activemq.apache.org/

首先通过http://www.apache.org/dyn/closer.cgi?path=/activemq/5.10.0/apache-activemq-5.10.0-bin.zip下载压缩包(最新版本5.10.0)


2、ActiveMQ优点

1.多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, PythonPHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
2.完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
3.对spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
4.完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
5.通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
6.支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
7.从设计上保证了高性能的集群,客户端-服务器,点对点
8.支持Ajax
9.支持与Axis的整合
10.可以很容易得调用内嵌JMS provider,进行测试


3、启动服务

把下载好的压缩包解压至任意磁盘,打开目录。如下:



打开bin中的win64文件夹(我的是win7 64位系统)执行activemq.bat




启动后在浏览器中输入http://localhost:8161/admin/会出现提示框要求输入用户名和密码

输入admin - admin即可进入

这些都是默认配置,都可以在conf文件夹中进行配置。我们先用默认的进行测试就行了



下面的这个Queues你们是没有东西的,我这个my-queue是我之前用来测试的队列,没有删除。


4、编写测试代码

首先往项目中导入下载的文件夹中的jar包 activemq-all-5.10.0.jar

(1)ProducerTool类

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.activemq.producer;  
  2.   
  3. import javax.jms.Connection;  
  4. import javax.jms.DeliveryMode;  
  5. import javax.jms.Destination;  
  6. import javax.jms.JMSException;  
  7. import javax.jms.MessageProducer;  
  8. import javax.jms.Session;  
  9. import javax.jms.TextMessage;  
  10.   
  11. import org.apache.activemq.ActiveMQConnection;  
  12. import org.apache.activemq.ActiveMQConnectionFactory;  
  13.   
  14. public class ProducerTool {  
  15.       
  16.     private String user = ActiveMQConnection.DEFAULT_USER ;  
  17.       
  18.     private String password = ActiveMQConnection.DEFAULT_PASSWORD ;  
  19.       
  20.     private String url = ActiveMQConnection.DEFAULT_BROKER_URL ;  
  21.       
  22.     private String subject = "benjamin" ;  
  23.       
  24.     private Destination destination = null ;  
  25.       
  26.     private Connection connection = null ;  
  27.       
  28.     private Session session = null ;  
  29.       
  30.     private MessageProducer producer = null ;  
  31.       
  32.     //初始化  
  33.     private void initialize() throws Exception {  
  34.         ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url) ;  
  35.         connection = connectionFactory.createConnection() ;  
  36.         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE) ;  
  37.         destination = session.createQueue(subject) ;  
  38.         producer = session.createProducer(destination) ;  
  39.         producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT) ;  
  40.     }  
  41.       
  42.     //发送消息  
  43.     public void produceMessage(String message) throws Exception {  
  44.         initialize() ;  
  45.         TextMessage msg = session.createTextMessage(message) ;  
  46.         connection.start() ;  
  47.         System.out.println("Producer:->Sending message: " + message);  
  48.         producer.send(msg) ;  
  49.         System.out.println("Producer:->Message sent complete!");  
  50.     }  
  51.       
  52.     //关闭连接  
  53.     public void close() throws JMSException {  
  54.         System.out.println("Producer:->Closing Connection");  
  55.         if(producer != null) {  
  56.             producer.close() ;  
  57.         }  
  58.         if(session != null) {  
  59.             session.close() ;  
  60.         }  
  61.         if(connection != null) {  
  62.             connection.close() ;  
  63.         }  
  64.     }  
  65. }  


(2)ConsumerTool类

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.activemq.consumer;  
  2.   
  3. import javax.jms.Connection;  
  4. import javax.jms.Destination;  
  5. import javax.jms.JMSException;  
  6. import javax.jms.Message;  
  7. import javax.jms.MessageConsumer;  
  8. import javax.jms.MessageListener;  
  9. import javax.jms.Session;  
  10. import javax.jms.TextMessage;  
  11.   
  12. import org.apache.activemq.ActiveMQConnection;  
  13. import org.apache.activemq.ActiveMQConnectionFactory;  
  14.   
  15. public class ConsumerTool implements MessageListener{  
  16.       
  17. private String user = ActiveMQConnection.DEFAULT_USER ;  
  18.       
  19.     private String password = ActiveMQConnection.DEFAULT_PASSWORD ;  
  20.       
  21.     private String url = ActiveMQConnection.DEFAULT_BROKER_URL ;  
  22.       
  23.     private String subject = "benjamin" ;  
  24.       
  25.     private Destination destination = null ;  
  26.       
  27.     private Connection connection = null ;  
  28.       
  29.     private Session session = null ;  
  30.       
  31.     private MessageConsumer consumer = null ;  
  32.       
  33.     //初始化  
  34.     public void initialize() throws JMSException {  
  35.         //连接工厂是用户创建连接的对象,这里使用的是ActiveMQ的ActiveMQConnectionFactory根据url,username和password创建连接工厂。   
  36.         ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url) ;  
  37.         //连接工厂创建一个jms connection    
  38.         connection = connectionFactory.createConnection() ;  
  39.         //是生产和消费的一个单线程上下文。会话用于创建消息的生产者,消费者和消息。会话提供了一个事务性的上下文。    
  40.         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE) ;  
  41.         //目的地是客户用来指定他生产消息的目标还有他消费消息的来源的对象,两种消息传递方式:点对点和发布/订阅    
  42.         destination = session.createQueue(subject) ;  
  43.         //会话创建消息的生产者将消息发送到目的地    
  44.         consumer = session.createConsumer(destination) ;  
  45.     }  
  46.       
  47.     //消费消息  
  48.     public void consumeMessage() throws JMSException {  
  49.         initialize() ;  
  50.         connection.start() ;  
  51.           
  52.         System.out.println("Consumer:->Begin listening...");  
  53.         //开始监听  
  54.         //如果不想监听,想去主动的接受消息,只需要改为receive()即可  
  55.         consumer.setMessageListener(this) ;  
  56.         // Message message = consumer.receive();   
  57.     }  
  58.       
  59.     //关闭连接  
  60.     public void close() throws JMSException {  
  61.         System.out.println("consumer:->Closing Connection");  
  62.         if(consumer != null) {  
  63.             consumer.close() ;  
  64.         }  
  65.         if(session != null) {  
  66.             session.close() ;  
  67.         }  
  68.         if(connection != null) {  
  69.             connection.close() ;  
  70.         }  
  71.     }  
  72.       
  73.     //消息处理函数  
  74.     @Override  
  75.     public void onMessage(Message message) {  
  76.         try {  
  77.             if(message instanceof TextMessage) {  
  78.                 TextMessage txtMsg = (TextMessage) message ;  
  79.                 String msg = txtMsg.getText() ;  
  80.                 System.out.println("Consumer:->Received: " + msg);  
  81.             }else {  
  82.                 System.out.println("Consumer:->Received: " + message);  
  83.             }  
  84.         } catch (JMSException e) {  
  85.             e.printStackTrace();  
  86.         }  
  87.     }  
  88. }  


(3)测试TestJMS类

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.activemq.testjms;  
  2.   
  3. import javax.jms.JMSException;  
  4.   
  5. import org.apache.activemq.ActiveMQConnection;  
  6.   
  7. import com.activemq.consumer.ConsumerTool;  
  8. import com.activemq.producer.ProducerTool;  
  9.   
  10. public class TestJMS {  
  11.     public static void main(String[] args) throws JMSException, Exception {  
  12.         ConsumerTool ct = new ConsumerTool() ;  
  13.         ProducerTool pt = new ProducerTool() ;  
  14.         System.out.println(ActiveMQConnection.DEFAULT_BROKER_URL + "-------------");  
  15.         //开始监听  
  16.         ct.consumeMessage() ;  
  17.           
  18.         //延迟500毫秒后发送消息  
  19.         Thread.sleep(500) ;  
  20.         pt.produceMessage("Hello World!") ;  
  21.         pt.close() ;  
  22.           
  23.         //延迟500毫秒后停止接收信息  
  24.         Thread.sleep(500) ;  
  25.         ct.close() ;  
  26.     }  
  27. }  

输出台会输出:



因为我们在程序中创建了名为“Benjamin”的队列,所以我们打开刚才的管理ActiveMQ的页面,可以看到Queue下面多了个队列。

目录
相关文章
|
消息中间件 Java Linux
activeMQ入门安装
activeMQ入门安装
246 0
activeMQ入门安装
|
3月前
|
消息中间件 Java Kafka
SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
|
4月前
|
消息中间件 安全 Java
一文读懂RabbitMQ核心概念及架构
一文读懂RabbitMQ核心概念及架构
|
10月前
|
消息中间件 Java Linux
消息中间件系列教程(02) -ActiveMQ -安装&入门案例
消息中间件系列教程(02) -ActiveMQ -安装&入门案例
49 0
|
消息中间件 网络协议 中间件
RabbitMQ消息中间件学习1:基本概念与简单实战模式讲解
Message Queue(消息队列),在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信。 就是两个子系统之间进行通信,有两种选择,第一种是直接远程调用,第二种是借助第三方完成通信。 发送方称为生产者,接收方称为接受者。
RabbitMQ消息中间件学习1:基本概念与简单实战模式讲解
|
消息中间件 SQL Java
ActiveMQ系列:一个MQ产品的基础知识
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品、不同开发语言等条件的限制。
203 0
ActiveMQ系列:一个MQ产品的基础知识
|
消息中间件 中间件
ActiveMQ - 基础篇(上)
ActiveMQ - 基础篇(上)
128 0
ActiveMQ - 基础篇(上)
|
消息中间件
ActiveMQ - 基础篇(下)
ActiveMQ - 基础篇(下)
126 0
ActiveMQ - 基础篇(下)
|
消息中间件 Java Apache
消息中间件学习笔记--ActiveMQ(一、安装)
消息中间件学习笔记--ActiveMQ(一、安装)
127 1
消息中间件学习笔记--ActiveMQ(一、安装)
|
消息中间件 Java API
ActiveMQ入门案例
ActiveMQ入门案例
ActiveMQ入门案例