springboot整合activeMQ

来源:互联网 发布:验机软件 编辑:程序博客网 时间:2024/05/29 11:25
windows下 部署
1.activeMQ依赖于JDK,
2.解压/安装activeMQ的包,进入如下目录

3.activemq.bat双击启动脚本

如图表示启动成功,ActiveMQ默认启动到8161端口,启动完了后在浏览器地址栏输入:http://localhost:8161/admin要求输入用户名密码,默认用户名密码为admin、admin,这个用户名密码是在conf/users.properties中配置的。输入用户名密码后便可看到如下图的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 的内容可以点击这里。

springboot整合activeMQ
1.添加maven依赖
<dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-activemq</artifactId>        </dependency><dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-jms</artifactId>          </dependency>          <dependency>              <groupId>org.apache.activemq</groupId>              <artifactId>activemq-client</artifactId>          </dependency> 
没有直接使用注释的依赖,是因为其含有如下依赖
<dependency>      <groupId>org.apache.activemq</groupId>      <artifactId>activemq-broker</artifactId>  </dependency>
而它的作用是什么呢,会在程序中直接内嵌 ActivityMQ,也就是说不需要安装 ActiveMQ,但是这个如果服务宕机了,内嵌的 ActiveMQ 也就没了。关键,这个内嵌的 ActiveMQ 而无法看到图形化界面,所以这里没有直接使用注释里的依赖。
2.在application.properties中增加如下配置
## URL of the ActiveMQ broker. Auto-generated by default. For instance `tcp://localhost:61616`# failover:(tcp://localhost:61616,tcp://localhost:61617)# tcp://localhost:61616spring.activemq.broker-url=tcp://localhost:61616spring.activemq.user=adminspring.activemq.password=adminspring.activemq.in-memory=truespring.activemq.pool.enabled=false
 ActiveMQ 的端口做一个简短说明,61616为消息代理接口 ,8161 为管理界面
定义JMS
package com.fcc.common.config;import org.apache.activemq.ActiveMQConnectionFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jms.core.JmsMessagingTemplate;import javax.jms.ConnectionFactory;/** * @Author:FeiCongcong * @Date:2017/8/7 0007 14:46 */@Configurationpublic class JmsMessagingTemplateConfig {    @Value("${spring.activemq.broker-url}")    private String broker_url;    @Value("${spring.activemq.in-memory}")    private String in_memory;    @Value("${spring.activemq.pool.enabled}")    private String pool_enabled;    @Bean("jmsMessagingTemplate")//注册bean给spring容器管理,    public JmsMessagingTemplate jmsMessagingTemplate(){        JmsMessagingTemplate jmsMessagingTemplate=new JmsMessagingTemplate();        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(broker_url);        jmsMessagingTemplate.setConnectionFactory(connectionFactory);        return jmsMessagingTemplate;    }}
消息生产者
package com.fcc.common.component;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jms.core.JmsMessagingTemplate;import org.springframework.stereotype.Component;import javax.jms.Destination;/** * @Author:FeiCongcong * @Date:2017/8/7 0007 10:17 */@Componentpublic class MqProducerComponent {    @Autowired // 也可以注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装    private JmsMessagingTemplate jmsTemplate;    // 发送消息,destination是发送到的队列,message是待发送的消息    public void sendMessage(Destination destination, final String message){        jmsTemplate.convertAndSend(destination, message);    }}
消息消费者
package com.fcc.common.component;import org.springframework.jms.annotation.JmsListener;import org.springframework.messaging.handler.annotation.SendTo;import org.springframework.stereotype.Component;/** * @Author:FeiCongcong * @Date:2017/8/7 0007 10:19 */@Componentpublic class MqCosumerComponent {    // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息    @JmsListener(destination = "mytest.queue")    @SendTo("out.queue")    public void receiveQueue(String text) {        System.out.println("Consumer收到的报文为:"+text);    }}
测试类:
package com.fcc.web.controller;import org.apache.activemq.command.ActiveMQQueue;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.fcc.common.component.MqProducerComponent;import org.springframework.web.bind.annotation.ResponseBody;import javax.jms.Destination;/** * @Author:FeiCongcong * @Date:2017/8/7 0007 11:07 */@Controller@RequestMapping("MQ")public class MqController {    @Autowired    private MqProducerComponent mqProducerComponent;    @RequestMapping("test")    @ResponseBody     public String mqTest(){          Destination destination = new ActiveMQQueue("mytest.queue");          for (int i = 0; i < 10; i++) {            mqProducerComponent.sendMessage(destination, "myname is fcc!!!");          }          return null;     }}
启动类加注解@EnableJms
@RestController@EnableAutoConfiguration//启用自动配置@ComponentScan(basePackages="com.fcc")//组件扫描@EnableJmspublic class MainWeb {    public static void main(String[] args) throws Exception {        SpringApplication.run(MainWeb.class, args);    }}
测试:浏览器请求 http://localhost:8092/MQ/test
控制台输出
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
打开 ActiveMQ 的管理页面,

原创粉丝点击