Springboot集成activemq

来源:互联网 发布:java ssm大型项目源码 编辑:程序博客网 时间:2024/05/15 03:50

JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,ActiveMQ而是这个规范的一个具体实现。

JMS的队列消息传递过程如下图:

JMS的主题消息传递过程如下图:

ActiveMQ下载与部署。

1、  下载

到官网下载最新版本,有windows版本和Linux版本的。

http://activemq.apache.org/download.html


windows版本:apache-activemq-5.10-20140603.133406-78-bin.zip

linux版本:apache-activemq-5.10-20140603.133406-78-bin.tar.gz

 

2、  部署

A、 windows下部署

ActiveMQ部署其实很简单,和所有Java一样,要跑java程序就必须先安装JDK并配置好环境变量,这个很简单。

然后解压下载的apache-activemq-5.10-20140603.133406-78-bin.zip压缩包到一个目录,得到解压后的目录结构如下图:

进入bin目录,发现有win32和win64两个文件夹,这2个文件夹分别对应windows32位和windows64位操作系统的启动脚本。

我的实验环境是windowsXP,就进入win32目录,会看到如下目录结构。

其中activemq.bat便是启动脚本,双击启动。

ActiveMQ默认启动到8161端口,启动完了后在浏览器地址栏输入:http://localhost:8161/admin要求输入用户名密码,默认用户名密码为admin、admin,这个用户名密码是在conf/users.properties中配置的。输入用户名密码后便可看到如下图的ActiveMQ控制台界面了。


目录(?)[-]

  1. ActiveMQ
    1. 特性
  2. Spring-Boot 集成 ActiveMQ
    1. 添加maven依赖
    2. JAVA代码实现
    3. 定义QUEUE
    4. 消息生产者
    5. 消息消费者
    6. 测试接口
    7. 启动类
    8. 测试

ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
特性:

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

Spring-Boot 集成 ActiveMQ

添加maven依赖

  1. <span style="white-space:pre">  </span><!--  
  2.         <dependency>  
  3.             <groupId>org.springframework.boot</groupId>  
  4.             <artifactId>spring-boot-starter-activemq</artifactId>  
  5.         </dependency>  
  6.         -->  
  7.         <dependency>  
  8.             <groupId>org.springframework</groupId>  
  9.             <artifactId>spring-jms</artifactId>  
  10.         </dependency>  
  11.         <dependency>  
  12.             <groupId>org.apache.activemq</groupId>  
  13.             <artifactId>activemq-client</artifactId>  
  14.         </dependency> 
没有直接使用注释的依赖,是因为其含有如下依赖

[html] view plain copy
 print?
  1. <dependency>  
  2.     <groupId>org.apache.activemq</groupId>  
  3.     <artifactId>activemq-broker</artifactId>  
  4. </dependency>  
而它的作用是什么呢,会在程序中直接内嵌 ActivityMQ,也就是说不需要安装 ActiveMQ,但是这个如果服务宕机了,内嵌的 ActiveMQ 也就没了。关键,这个内嵌的 ActiveMQ 而无法看到图形化界面,所以这里没有直接使用注释里的依赖。
在application.properties中增加如下配置

[plain] view plain copy
 print?
  1. # activemq  
  2. spring.activemq.broker-url=tcp://localhost:61616  
  3. spring.activemq.user=admin  
  4. spring.activemq.password=admin  
  5. spring.activemq.in-memory=true  
  6. spring.activemq.pool.enabled=false  
这里对 ActiveMQ 的端口做一个简短说明,61616为消息代理接口 ,8161 为管理界面

JAVA代码实现

定义QUEUE

[java] view plain copy
 print?
  1. package com.activemq.queue;  
  2.   
  3. import org.apache.activemq.command.ActiveMQQueue;  
  4. import org.springframework.context.annotation.Bean;  
  5. import org.springframework.context.annotation.Configuration;  
  6.   
  7. import javax.jms.Queue;  
  8.   
  9. @Configuration  
  10. public class QueueConfig {  
  11.   
  12.     @Bean  
  13.     public Queue logQueue() {  
  14.         return new ActiveMQQueue(QueueName.LOG_QUEUE);  
  15.     }  
  16. }  

消息生产者

[java] view plain copy
 print?
  1. package com.activemq.producer;  
  2.   
  3. import org.slf4j.Logger;  
  4. import org.slf4j.LoggerFactory;  
  5. import org.springframework.beans.factory.annotation.Autowired;  
  6. import org.springframework.boot.CommandLineRunner;  
  7. import org.springframework.jms.core.JmsMessagingTemplate;  
  8. import org.springframework.stereotype.Component;  
  9.   
  10. import javax.jms.Queue;  
  11.   
  12. @Component  
  13. public class LogProducer implements CommandLineRunner {  
  14.   
  15.     private static final Logger LOGGER = LoggerFactory.getLogger(LogProducer.class);  
  16.   
  17.     @Autowired  
  18.     private JmsMessagingTemplate jmsMessagingTemplate;  
  19.   
  20.     @Autowired  
  21.     private Queue logQueue;  
  22.   
  23.     @Override  
  24.     public void run(String... strings) throws Exception {  
  25.         send("This is a log message.");  
  26.         LOGGER.info("Log Message was sent to the Queue named sample.log");  
  27.     }  
  28.   
  29.     public void send(String msg) {  
  30.         this.jmsMessagingTemplate.convertAndSend(this.logQueue, msg);  
  31.     }  
  32. }  

消息消费者

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. package com.activemq.consumer;  
  2.   
  3. import com.activemq.queue.QueueName;  
  4. import org.slf4j.Logger;  
  5. import org.slf4j.LoggerFactory;  
  6. import org.springframework.jms.annotation.JmsListener;  
  7. import org.springframework.stereotype.Component;  
  8.   
  9. @Component  
  10. public class LogConsumer {  
  11.   
  12.     private static final Logger LOGGER = LoggerFactory.getLogger(LogConsumer.class);  
  13.   
  14.     @JmsListener(destination = QueueName.LOG_QUEUE)  
  15.     public void receivedQueue(String msg) {  
  16.         LOGGER.info("Has received from " + QueueName.LOG_QUEUE + ", msg: " + msg);  
  17.     }  
  18. }  

测试接口

<div class="dp-highlighter bg_java" style="font-family:Consolas,"Courier New",Courier,mono,serif; background-color:rgb(231,229,220); width:693px; overflow-x:auto; overflow-y%
0 0
原创粉丝点击